实验三 图像滤波实验
一、实验目的
1.熟练掌握空域滤波中常用滤波器的原理;
2.理解邻域平均、中值滤波降噪法等的图像增强原理;
3.加深对图像增强的认识,巩固所学图像增强理论知识和相关算法; 4.利用MATLAB程进行图像滤波,观察增强效果。 二、实验原理
以图像平滑为例:图像平滑方法是一种实用的图像处理技术,能减弱或消除图像中的高频率分量,但不影响低频率分量。因为高频率分量主要对应图像中的区域边缘等灰度值较大变化较快的部分,平滑滤波将这些分量滤去可减少局部灰度起伏,使图像变得比较平滑。实际应用中,平滑滤波还可用于消除突发噪声,或者在提取较大目标前去除过小的细节或将目标内的小间断连接起来。 1. 邻域平均法
用窗口像素的平均值取代中心像素原来的灰度值。邻域的选取通常有4-邻域和8-邻域。
g(i,j)1f(x,y)L(x,y)A
2. 中值滤波
与加权平均方式的平滑滤波不同,中值滤波是抑制噪声的非线性处理方法。对于给定的n个数值{a1,a2,…,an},将它们按大小有序排列。当n为奇数时,位于中间位置的那个数值称为这n各数值的中值。当n为偶数时,位于中间位置的两个数值的平均值称为这n个数值的中值。中值滤波,就是图像中滤波后的某像素输出值等于该像素邻域中各像素灰度的中值。 三、实验内容与步骤:按下面要求编写程序并运行
对peppers.bmp图像添加零均值“高斯”噪声,用3×3或9×9滑动平均模板进行降噪处理,观察平均降噪图像的效果。 1.对peppers.bmp图像添加零均值“高斯”噪声 程序代码如下:
I=imread('d:\\peppers.bmp');
. kszl
.
J=imnoise(I,'gaussian',0,0.02); subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(J);title('加噪处理后的图');
运行结果如下:
2.用3×3滑动平均模板进行降噪处理,观察平均降噪图像的效果 程序代码如下:
I=imread('d:\\peppers.bmp'); J=imnoise(I,'gaussian',0,0.02); [H,W]=size(J); M=double(J); M1=M; for j=2:H-1 for k=2:W-1
M1(j,k)=[M(j-1,k-1)+M(j-1,k)+M(j-1,k+1)+M(j,k-1)+M(j,k)+M(j,k+1)+M(j+1,k-1)+M(j+1,k)+M(j+1,k+1)]/9; end; end;
subplot(1,3,1);imshow(I);title('原图');
. kszl
.
subplot(1,3,2);imshow(J);title('加噪处理');
subplot(1,3,3);imshow(uint8(M1),[]);title('3*3邻域平均降噪处理'); 运行结果如下:
3.对peppers.bmp图像添加“椒盐”噪声,分别采用5×5的矩形、圆形及十字形窗口进行中值滤波处理,观察处理结果。(滤波过程采用迭代操作,对输入图像重复进行同样的中值滤波,直到输出不再有变化为止。) 3.1.对peppers.bmp图像添加“椒盐”噪声 程序代码如下:
I=imread('d:\\peppers.bmp'); J = imnoise(I,'salt & pepper',0.2); subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(J);title('椒盐加噪处理'); 运行结果如下:
. kszl
.
3.2采用5×5的矩形中值滤波处理 程序代码如下:
I= imread('d:\\peppers.bmp'); J=imnoise(I,'salt & pepper',0.2); P=double(J); [H,W]=size(J); flag=1;
while( flag==1) %若输出跟前一个图有变化则进行中值滤波处理 flag=0; for i=3:(H-2) for j=3:(W-2)
A=P(i-2:i+2,j-2:j+2); %5*5矩阵窗口模板 mid=median(A(:)); %求矩阵模板中值 if(P(i,j)~=mid) P(i,j)=mid; flag=1; end
. kszl
.
end end
if flag==0 %若输出不再变化停止滤波操作 break; end; end;
subplot(1,3,1),imshow(I);title('原图');
subplot(1,3,2),imshow(J);title('椒盐加噪处理 ');
subplot(1,3,3),imshow(uint8(P));title('5*5矩形中值滤波'); 运行结果如下:
3.3采用圆形窗口中值滤波处理 程序代码如下:
I= imread('d:\\peppers.bmp'); J=imnoise(I,'salt & pepper',0.2); P=double(J); [H,W]=size(J); flag=1; while( flag==1) flag=0;
. kszl
.
for i=3:(H-2) for j=3:(W-2)
A=P(i-2:i+2,j-2:j+2)
%5*5矩阵窗口模板(还要去除四个角上的点转变成5*5圆形模板 Q=A(:);
Q(1)=[]; %5*5圆形模板这几处要置空 Q(4)=[]; Q(19)=[];
Q(22)=[]; mid=median(Q); if(P(i,j)~=mid) P(i,j)=mid; flag=1; end; end; end; if flag==0 break; end; end;
subplot(1,3,1),imshow(I);title('原图');
subplot(1,3,2),imshow(J);title('椒盐加噪处理 ');
subplot(1,3,3),imshow(uint8(P));title('5*5圆形中值滤波'); 运行结果如下:
. kszl
.
3.4采用十字形窗口中值滤波处理 程序代码如下:
I= imread('d:\\peppers.bmp'); J=imnoise(I,'salt & pepper',0.2); K=double(J); [H,W]=size(J); flag=1; While( flag==1) falg=0; for i=3:(H-2) for
j=3:(W-2)
A=[P(i-2,j),P(i-1,j),P(i,j-2),P(i,j-1),P(i,j),P(i,j+1),P(i,j+2),P(i+1,j),P(i+2,j)]; mid=median(A(:)); if(P(i,j)~=mid) M(i,j)=mid; falg=1; end; end; end;
. kszl
.
if flag==0 break; end; end;
subplot(1,3,1),imshow(I);title('原图');
subplot(1,3,2),imshow(J);title('椒盐加噪处理 ');
subplot(1,3,3),imshow(uint8(P));title('5*5十字形中值滤波’); 运行结果如下:
实验总结
○1本次实验中5*5圆形模板其实和5*5矩形模板处理方法很相似,只要将四个角落出的数置清空即可。
○2本次实验中值滤波法用MATLAB运行时时间很长,待以后熟练后可以直接用其提供的中值滤波函数来实现。
○3相对而言,邻域平均法比较简单,本实验采用的是3*3模板,如果是9*9模板就需要用循环语句来实现了。
. kszl
.
○4中值滤波法处理的三种模板中,矩形和圆形模板处理结果差不多,十字形模板处理效果偏差。 四、总结
例如你们的某位师姐总结说:通过数字图像平滑处理的学习,我更深入理解了数字图像平滑的概念,掌握了几种图像平滑处理方法,通过实验了解了图像低通、模糊、去噪的方法。平滑处理关键在于对数字图像平滑处理几种方法的理解,以及从原理到计算机算法实现的过程,理解什么是图像中的低频成分,什么又是图像中的高频成分,逐渐建立一种概念,把眼睛看到的图像在意识中能够抽象成图像的空间域模型和频域模型。当然,数字图像平滑处理的方法不胜枚举,我们在这里不能详尽阐述,而且同一种处理方法的算法实现也是不一异同,它们在计算效率、适应范围、硬件实现等方面各有长短。
. kszl
因篇幅问题不能全部显示,请点此查看更多更全内容