//添加噪声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);ifrand(1,1)>=0.99//大于该值产生焦点ifrand(1,1)>=0.5//大于0.5产生白点image2(i,j)=(255);elseimage2(i,j)=(0);//否则产生黑点
end
end
end
end
//高斯低通滤波器
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:M1for 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));
//巴特沃斯低通滤波器
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:M2for 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
//绘画
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('巴特沃斯低通滤波器处理后');