复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//添加噪声 C=imread(''); image=double(C);//转换成double [h,w]=size(image); image2=uint8(zeros(h,w)); for i=1:h for j=1:w image2(i,j)=image(i,j); if rand(1,1)>=0.99 //大于该值产生焦点 if rand(1,1)>=0.5 //大于0.5产生白点 image2(i,j)=(255); else image2(i,j)=(0);//否则产生黑点 end end end end
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//高斯低通滤波器 f1=im2double(image2); D0=40; g1=fft2(f1);//傅立叶变换 g1=fftshift(g1);//转换数据矩阵 [M1,N1]=size(g1);//如果图像f(x,y)的尺寸为M×N,则对(-1)(x+y)f(x,y)进行傅立叶变换后的频率平面的原点在(M/2,N/2) m1=fix(M1/2); n1=fix(N1/2); s1=zeros(M1,N1); for i=1:M1 for j=1:N1 d=sqrt((i-m1)^2+(j-n1)^2);//D(u,v)为频率平面从原点到点(u,v)的距离 h1=exp((-d^2)/(2*(D0^2)));//计算高斯低通滤波器传递函数 s1(i,j)=h1*g1(i,j); end end y1=ifft2(ifftshift(s1)); y1=log(1+abs(y1));
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//巴特沃斯低通滤波器 f2=im2double(image2); g2=fft2(f2); g2=fftshift(g2); n0=2; [M2,N2]=size(g2); m2=fix(M2/2); n2=fix(N2/2); s2=zeros(M2,N2); for i=1:M2 for j=1:N2 d=sqrt((i-m2)^2+(j-n2)^2); h2=1/(1+(d/D0)^(2*n0));//计算巴特沃斯低通滤波器传递函数 s2(i,j)=h2*g2(i,j); end end
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//绘画 figure; subplot(2,2,1);imshow(C); title('原图'); subplot(2,2,2);imshow(imamge2); title('椒盐噪声后'); y2=ifft2(ifftshift(s2)); y2=log(1+abs(y2)); //如果图像进行傅里叶转换后立即用imshow函数显示,则在命令行可能会显示:Warning: Displaying real part of complex input(警告: 显示复数输入项的实部)。这是因为经过傅里叶变换后的图像矩阵大多是复数矩阵,包含实部和虚部。 //此时如要显示图像则需要先用abs取复数矩阵的模,再进行显示 subplot(2,2,3);imshow(y1,[]); //当图像是double类型时要使用imshow(I,[])来根据数据矩阵的数值范围自动设置灰度图像显示范围 title('高斯低通滤波器处理后'); subplot(2,2,4);imshow(y2,[]); title('巴特沃斯低通滤波器处理后');
最后
以上就是忧伤石头最近收集整理的关于Matlab低通滤波器的使用--频域图像增强实验的全部内容,更多相关Matlab低通滤波器内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复