基于Matlab的图片平滑和锐化处理

在本实验中我分别采用了系统自带的fspecial函数和自己编写的均值平滑模板和两个锐化模板进行图片处理。

目录

空间域平滑增强

空间域锐化增强


空间域平滑增强

实验要求:采用均值平滑模板对图片进行处理,得到去除噪声后的图像,并使用平滑模板滤波2-3次,比较实验结果。

使用Matlab自带函数 fspecial() 的average模式:

clc;
clear;
close all;

%使用自带函数
Picture=imread('lena_noise.bmp');
subplot(1,4,1);imshow(Picture,[]);title('原图');
Tem_Smooth=fspecial('average',[3,3]);
P_Smooth1=imfilter(Picture,Tem_Smooth);
subplot(1,4,2);imshow(P_Smooth1,[]);title('均值滤波一次后图像');
P_Smooth2=imfilter(P_Smooth1,Tem_Smooth);
subplot(1,4,3);imshow(P_Smooth2,[]);title('均值滤波二次后图像');
P_Smooth3=imfilter(P_Smooth2,Tem_Smooth);
subplot(1,4,4);imshow(P_Smooth3,[]);title('均值滤波三次后图像');

自己编写均值滤波函数:

function F=averfilter(x,n) %x为输入的图像,n为均值模板大小(n×n)
a(1:n,1:n)=1;
[height,width]=size(x);
x1=double(x); %将图像信息流设为double格式
x2=x1;
for i=1:height-n+1   %由于是在n×n大小的像素组中从最左上角的开始计算,因此在范围限制上去除最后两行
    for j=1:width-n+1  %去除最后两列
        b=x1(i:i+(n-1),j:j+(n-1)).*a;
        s=sum(sum(b));
        x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %在n×n大小的空间内的中心像素被赋值
    end
end
F=uint8(x2);%将信息范围强制转换为0-255内

与系统自带函数进行结果比对:

上面一行为fspecial()的average格式下的处理结果,下面一行为自己编写的均值滤波函数的处理结果。效果还行,只是对比度比fspecial函数处理后的稍低一些。

 

空间域锐化增强

实验要求:分别采用一阶微分算子Sobel算子和二阶微分算子拉普拉斯算子进行锐化滤波,并比较两种不同的锐化滤波模板处理后的结果。

Sobel算子拉普拉斯算子

 使用系统自带函数 fspecial() 的 sobel 和 laplacian 模式:

figure;
Picture2=imread('moon.bmp');
subplot(1,3,1);imshow(Picture2,[]);title('原图');
Tem_Sharpen1=fspecial('sobel');
P_Sharpen1=imfilter(Picture2,Tem_Sharpen1);
subplot(1,3,2);imshow(P_Sharpen1,[]);title('采用sobel算子锐化后图像');
Tem_Sharpen2=fspecial('laplacian');
P_Sharpen2=imfilter(Picture2,Tem_Sharpen2);
subplot(1,3,3);imshow(P_Sharpen2,[]);title('采用拉普拉斯算子锐化后图像');

 自己编写Sobel算子锐化模板函数:

function F=Sobelfilter(x)
a=[-1,-2,-1;0,0,0;1,2,1];  %Sobel算子第一个3×3矩阵
b=[-1,0,1;-2,0,2;-1,0,1];  %Sobel算子第二个3×3矩阵
[height,width]=size(x);
x1=double(x);
x2=x1;
for i=1:height-3+1
    for j=1:width-3+1
        c=x1(i:i+(3-1),j:j+(3-1)).*a;
        d=x1(i:i+(3-1),j:j+(3-1)).*b;
        x2(i:i+(3-1),j:j+(3-1))=sqrt(c^2+d^2);  %一般赋值两个矩阵相乘结果平方的开方
    end
end
F=uint8(x2);

自己编写的Laplacian算子锐化模板函数:

function B=LaplacianFilter(x)
x=im2double(x);
[height,width]=size(x);
B=zeros(size(x));
for i=2:height-1    %在编写这个函数时以最中心位置的像素为基准x(i,j),因此范围从第2行第2列变换到倒数第二行和倒数第二列
    for j=2:width-1
        B(i,j)=-x(i+1,j)-x(i-1,j)-x(i,j+1)-x(i,j-1)+8*x(i,j)-x(i-1,j-1)-x(i-1,j+1)-x(i+1,j-1)-x(i+1,j+1);      %直接进行矩阵相乘
    end
end
B=im2uint8(B);

实验结果比对:

上面一行为fspecial()的处理结果,下面一行为自己编写的滤波函数的处理结果。

 另外我采用上面的laplacian算子函数的编写方法另外写了Sobel算子的锐化模板函数,处理结果如下,与fspecial函数处理结果有较大差别,因此并未采用。

function C=Sobel(x)
x=double(x);
[height,width]=size(x);
B=zeros(size(x));
C=zeros(size(x));
for i=2:height-1
    for j=2:width-1
        B(i,j)=-x(i-1,j-1)-2*x(i-1,j)-x(i-1,j+1)+x(i+1,j-1)+2*x(i+1,j)+x(i+1,j+1);
        C(i,j)=-B(i-1,j-1)+B(i-1,j+1)-2*B(i,j-1)+2*B(i,j+1)-B(i+1,j-1)+B(i+1,j+1);
    end
end
C=uint8(C);

  • 15
    点赞
  • 203
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB提供了许多数字图像处理工具箱,可以用于图像的平滑锐化处理。下面是基于MATLAB的数字图像平滑锐化处理算法分析: 1. 图像平滑处理算法 (1)均值滤波 均值滤波是一种基本的平滑处理算法。它通过计算像素周围邻域的平均灰度值来平滑图像。MATLAB提供了imfilter函数来实现均值滤波,可以通过指定滤波器卷积核的大小来调整平滑效果。 (2)中值滤波 中值滤波是一种非线性平滑处理算法。它通过计算像素周围邻域的中值来平滑图像。MATLAB提供了medfilt2函数来实现中值滤波,可以通过指定滤波器卷积核的大小来调整平滑效果。 (3)高斯滤波 高斯滤波是一种基于高斯函数的线性平滑处理算法。它通过计算像素周围邻域的加权平均灰度值来平滑图像。MATLAB提供了imgaussfilt函数来实现高斯滤波,可以通过指定滤波器卷积核的大小和标准差来调整平滑效果。 2. 图像锐化处理算法 (1)拉普拉斯算子 拉普拉斯算子是一种基于二阶微分的锐化处理算法。它通过计算像素周围邻域的二阶导数来增强图像的边缘。MATLAB提供了imfilter函数和fspecial函数来实现拉普拉斯算子,可以通过指定滤波器卷积核的大小来调整锐化效果。 (2)Sobel算子 Sobel算子是一种基于一阶微分的锐化处理算法。它通过计算像素周围邻域的一阶导数来增强图像的边缘。MATLAB提供了imfilter函数和fspecial函数来实现Sobel算子,可以通过指定滤波器卷积核的大小来调整锐化效果。 (3)Canny算子 Canny算子是一种基于梯度的锐化处理算法。它通过计算像素周围邻域的梯度幅度和方向来增强图像的边缘。MATLAB提供了edge函数来实现Canny算子,可以通过指定梯度阈值和非极大值抑制阈值来调整锐化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值