Matlab图像处理图像平滑与滤波

潇洒哥
932次浏览
2020年03月26日 12:36
最佳经验
本文由作者推荐
椒盐

实验三、图像平滑与滤波 一、实验题目: 图像平滑与滤波 二、实验目的: 在熟悉图像平滑的基本原理和方法的基础上,在理论指导下,能在MATLAB环境下对图像进行平滑处理。本实验要求用线性平滑滤波、中值平滑滤波、频域低通滤波的方法进行程序设计。经过平滑处理,对结果图像加以比较,得出自己的实验结论。 三、实验内容: (1)利用MATLAB为用户提供的专门函数实现均值滤波。 (2)利用MATLAB为用户提供的专门函数实现中值滤波。 (3)编写频域理想低通、巴特沃斯低通及高斯低通滤波函数。 四、预备知识: (1)熟悉平滑滤波原理。 (2)熟悉频域滤波原理。 (3)熟悉在MATLAB环境下对图像文件的I/O操作。 五、实验原理: 平滑滤波技术用于平滑图像中的噪声。平滑噪声可以在空间域中进行,基本方法是求像素灰度的平均值或中值。也可以在频域中用基于傅立叶的分析方法进行。 这里对常用滤波函数进行简要介绍。 (1) 噪声产生函数:imnoise 图像平滑主要是针对图像的各种噪声而言的,因此需要模拟数字图像的各种噪声来分析滤波效果。MATLAB的图像处理工具箱提供了imnoise函数,可以用该函数给图像添加不同种类噪声,其调用格式为: J = imnoise(I, ’type’, parameters) I是输入图像,J是对I添加噪声后的输出图像。表5.1列出了imnoise函数能够产生的五种噪声及其对应参数。

表5.1 噪声种类及参数说明 TYPE gaussian localvar passion salt & pepper speckle PARAMETERS m,v v 无 d v 说明 均值为m,方差为v的高斯噪声。默认值m=0,v=0.01 均值为0,方差为v的高斯白噪声 泊松噪声 噪声强度为d的椒盐噪声。默认值为0.05 均值为0,方差为v的均匀分布随机噪声 例1.5.1给图像加上椒盐噪声,可以使用下列语句。 >> I=imread(''); >> J=imnoise(I,'salt & pepper',0.2);%给图像加入椒盐噪声 >> subplot(1,2,1);imshow(I);title('原始图像'); >> subplot(1,2,2);imshow(J);title('加入椒盐噪声的图像'); 其显示结果如图1.5.1所示。 图1.5.1 原始图像和加入噪声后的图像 (2) 图像滤波函数:filter2、imfilter 空域滤波是在图像空间中借助模板对图像进行邻域操作,输出图像每一个像素的取值都是根据模板对输入像素相应邻域内的像素值进行计算得到的。模板运算的数学涵义是一种卷积(或互相关)运算。 MATLAB提供了基于卷积的图像滤波函数filter2进行平滑滤波,该函数用指定的滤波器模板对图像进行运算。其调用格式为: B = filter2(h,A) B = filter2(h,A,shape) 其中B=filter2(h,A)返回图像A经算子h滤波后的结果,参数shape指定滤波的计算范围,即:

shape=‘full’时,作边界补零 shape=‘same’时,返回图像B与输入图像A大小相同 shape=‘valid’时,不考虑边界补零,只计算有效输出部分。 此外,也可以使用imfilter函数进行卷积或相关性滤波来实现图像平滑。该 函数的调用格式为: B = imfilter(A,H) B = imfilter(A,H, option1,option2,…) 其中B=imfilter(A,H)返回图像A经算子h滤波后的结果; B=imfilter(A,H, option 1, option 2,…)是根据指定的option参数实现图像 滤波。option参数可以有下列取值: 边界填充选项 对一幅图像进行滤波时,零填充可能会导致图像被一个黑框围绕,为了消除 零填充的人工痕迹,imfilter函数支持三种可选的边界填充方法: ‘symmetric’ 边界对称 ‘replicate’ 边界复制,缺省值 ‘circular’ 边界循环 输出尺寸选项 其选项与filter2函数的shape参数相同。 滤波选项 ‘corr’ 使用相关性来进行滤波,缺省使用此方法 ‘conv’ 使用卷积方法实现滤波 以上两个滤波函数的参数h可以是自定义的滤波器模板,也可以是MATLAB 提供的预定义滤波器模板。函数fspecial生成滤波所用的预定义模板。其调用格式为: h = fspecial(‘type’) h = fspecial(‘type’,parameters) 其中,参数type指定滤波器的种类,parameters是与滤波器种类有关的具体参 数。 例1.5.2 对图1.5.1中加入椒盐噪声的图像进行均值滤波,可以使用下列语句。 >> h=fspecial('average',3); >> gd=imfilter(J,h); >> subplot(1,2,1);imshow(J);title('加入椒盐噪声的图像'); >> subplot(1,2,2);imshow(gd);title('3×3模板均值滤波');

其显示结果如图1.5.2所示。 图1.5.2 均值滤波 (3) 中值滤波器函数:medfilt2 中值滤波是一种最常用的非线性平滑滤波器,其滤波原理是把邻域中的图像的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。其调用格式为: B = medfilt2(A) B = medfilt2(A,[M N]) 其中,A是输入图像,B是中值滤波后输出的图像。[M N]指定滤波模板的大小,默认模板是3×3的。 例1.5.3 对图1.5.1中加入椒盐噪声的图像进行中值滤波,可以使用下列语句。 >> k=medfilt2(J); >> subplot(1,2,1);imshow(J);title('加入椒盐噪声的图像'); >> subplot(1,2,2);imshow(k);title('3×3模板中值滤波'); 其显示结果如图1.5.3所示。 图1.5.3 中值滤波

(4) 频域低通滤波 频域滤波的基本步骤为: 1) 用(-1)x+y乘以输入图像来进行频域中心变换; 2) 由(1)计算图像的DFT,即I(u,v); 3) 用滤波函数H(u,v)乘以I(u,v); 4) 计算(3)中结果的反DFT; 5) 得到(4)中的实部; 6) 用(-1)x+y乘以(5)中的结果。 MATLAB图像处理工具箱提供了一些函数来进行傅立叶变换。 ①函数:fft2 用于计算二维快速傅立叶变换。调用格式为: Y = fft2(X) Y = fft2(X,M,N); 式中X是输入图像矩阵,Y是X进行二维傅立叶变换后的图像矩阵;X和Y 大小相同。 在Y=fft2(X,M,N)中,按照M、N指定的值对图像进行剪切或补0后进行傅 立叶变换,返回变换矩阵的大小为M×N。 ②函数:fftshift fftshift函数将变换后的图像频谱中心从矩阵的原点移到矩阵的中心。其调用格式为: Y = fftshift(X) Y = fftshift(X,DIM) fftshift用于调整 fft、fft2和fftn的输出结果。对于向量X,将其左右两半交换位置,对于矩阵 X,将其一、三象限和二、四象限进行互换,对于高维向量 X,将矩阵各维的两半进行互换。 ③函数:ifft2 用于计算图像的二维傅立叶反变换。其调用格式为: Y = ifft2(X) Y = ifft2(X,M,N) ifft2用于返回图像的二维傅立叶反变换矩阵,其参数定义同fft2。 例1.5.3 对图1.5.1中加入椒盐噪声的图像进行截至频率D0为25的高斯低通滤波,其显示结果如图1.5.4所示。

图1.5.4 频域高斯低通滤波 六、实验步骤: (1)对给定的图像添加均值为0,方差分别为200、400的高斯噪声,以及概率分别为0.1、0.2的椒盐噪声,显示添加噪声后的图像。 (2)对加噪图像分别进行3×3、5×5、9×9的均值滤波,显示并比较滤波结果。 (3)对加噪图像分别进行3×3、5×5、9×9的中值滤波,显示并比较滤波结果。 (4)对加噪图像进行截止频率D0分别为10、25的理想低通、巴特沃斯低通及高斯低通滤波,显示并比较滤波结果。 七、思考题目: (1)原图像和处理后图像的比较。 (2)均值滤波和中值滤波有哪些优缺点?主要区别?对所给图像,哪种方法效果更佳? (3) 窗口尺寸对滤波结果有什么影响?对所给图像应取多大?

椒盐