数字图像处理上机作业五Word文档下载推荐.doc
《数字图像处理上机作业五Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《数字图像处理上机作业五Word文档下载推荐.doc(13页珍藏版)》请在冰豆网上搜索。
11111
11011
11111
11111];
2.中值平滑可以先编写中值平滑子函数zhongzhi(),然后在主函数中调用即可。
以3*3中值平滑为例来分析其操作过程,3*3中值平滑就是将以各项素为中心的9个像素值的中间值作为平滑后的新的像素值赋给该像素。
因此可以通过I(i-1:
i+1,j-1:
j+1)得到对应于I(i,j)点的九个像素值,然后在由median函数可求出这九个值的中值,赋给新矩阵的(i,j)点即可。
注意I(i-1:
j+1)操作可能会有i-1=0,j-1=0或i+1、j+1大于矩阵最大行列数的情况,从而出现错误。
在这里我的处理是在I矩阵的外围补上一圈0,即出现上述情况时像素值以0来代替。
具体代码为:
I0=zeros(m+2,n+2);
fori=2:
m+1
forj=2:
n+1
I0(i,j)=I(i-1,j-1);
end
end
同理,5*5的中值平滑也可以同样操作,只不过是在外围补上两圈零而已。
代码及注释如下:
主函数:
clear
I=imread('
Lenna.bmp'
);
J=imnoise(I,'
gaussian'
K=imnoise(I,'
salt&
pepper'
%H1为3*3邻域平滑的卷积核,H2为5*5邻域平滑的卷积核
H1=1/8*[111
101
111];
11111
11011
11111
11111];
J1=imfilter(J,H1);
%高斯白噪声的3*3邻域平滑
J2=imfilter(J,H2);
%高斯白噪声的5*5邻域平滑
K1=imfilter(K,H1);
%椒盐噪声的3*3邻域平滑
K2=imfilter(K,H2);
%椒盐噪声的5*5邻域平滑
J3=zhongzhi(J,3);
%高斯白噪声的3*3中值平滑
J4=zhongzhi(J,5);
%高斯白噪声的5*5中值平滑
K3=zhongzhi(K,3);
%椒盐噪声的3*3中值平滑
K4=zhongzhi(K,5);
%椒盐噪声的5*5中值平滑
subplot(131);
imshow(J);
title('
高斯白噪声'
subplot(132);
imshow(J1);
高斯白噪声的3*3邻域平滑'
subplot(133);
imshow(J2);
高斯白噪声的5*5邻域平滑'
figure
imshow(J3);
高斯白噪声的3*3中值平滑'
imshow(J4);
高斯白噪声的5*5中值平滑'
imshow(K);
椒盐噪声'
imshow(K1);
椒盐噪声的3*3邻域平滑'
imshow(K2);
椒盐噪声的5*5邻域平滑'
imshow(K3);
椒盐噪声的3*3中值平滑'
imshow(K4);
椒盐噪声的5*5中值平滑'
中值平滑子函数zhongzhi()如下:
functionJ=zhongzhi(I,k)
[m,n]=size(I);
ifk==3%3*3的中值平滑
I0=zeros(m+2,n+2);
forj=2:
I0(i,j)=I(i-1,j-1);
%将到操作的图像矩阵I外围不上0
end
end
a=I0(i-1:
j+1);
b=a(1:
9);
%将3*3的矩阵化成1*9的矩阵,便于median操作
J(i-1,j-1)=median(b);
%取中值,保存为平滑后矩阵J的i-1行、j-1列
elsek==5%5*5的中值平滑
I0=zeros(m+4,n+4);
fori=3:
m+2
forj=3:
n+2
I0(i,j)=I(i-2,j-2);
end
a=I0(i-2:
i+2,j-2:
j+2);
25);
J(i-2,j-2)=median(b);
J=uint8(J);
运行结果如下:
1)加高斯白噪声后图像,及3*3、5*5邻域平滑
2)加高斯白噪声后图像,及3*3、5*5中值滤波
3)加椒盐噪声后图像,及3*3、5*5邻域平滑
4)加椒盐噪声后图像,及3*3、5*5中值平滑
结论:
平滑滤波和中值滤波对噪声都有一定的抑制作用,且阶数越高滤波效果越好,中值滤波对椒盐噪声的抑制效果特别明显,中值滤波效果比平滑滤波好一些,轮廓比较清晰。
另外中值平滑在matlab中有现成的函数medfilt2,经过与medfilt2函数对比,已验证zhongzhi()效果与medfilt2完全相同。
2.设计一个程序对受到高斯白噪声及椒盐噪声干扰的图像在频域内分别采用理想低通和2阶butterworth滤波器进行平滑处理.
1).在频域进行低通滤波,可以先通过fft2得到图形的频响,然后通过fftshift将零频点移到中心位置,,再将频率响应的相应点利用数组乘法乘以传递函数即可。
最后再由频域转换回空域即可。
2).理想低通的传递函数为
在程序中我用I0来表示,I0的生成过程如下:
fori=1:
m
forj=1:
n
if(i-i0)^2+(j-j0)^2<
=60^2
I0(i,j)=1;
else
I0(i,j)=0;