I=imread('lula.jpg');%输入lula
imshow(I)
I=imnoise(I, 'gaussian', 0, 0.01);%加高斯白噪声,均值为0,方差为0.01
figure(2)
imshow(I)
J=fftshift(fft2(I));%快速傅里叶变换加shift
figure(3)
%归一化
% M=real((J))-min(min(min(real(J))));%减去最小的,搬到0
% M=M./max(max(max(M)));%除以最大的,压缩到0-1
% M=M.*255;%乘以255,伸展到8位图像空间
imshow(uint8(real(J)))%显示频谱图(未归一化)
%该图片低频功率非常高,若显示归一化后的图像,则图像中心有一个亮点,四周黑暗
[row,col,~]=size(I);
H=zeros(row,col);
x0=floor(row/2);%图片中心
y0=floor(col/2);
D0=100;%截止频率
n=0.2;%滤波器阶数
for u=1:row
for v=1:col
D=(u-x0)^2+(v-y0)^2;%计算距离
H(u,v)=1/(1+(D/D0))^(2*n);%计算系统函数
end
end
W=H.*J;%直接点乘滤波
denoise=ifft2(ifftshift(W));%返回空域
figure(4)
imshow(uint8(real(denoise)))%显示去噪后图片
输入原图片:
加入均值为0,方差为0.01的高斯白噪声后:
转换到频域,观察频谱图(中间亮为低频多,四周亮为高频多)
这个频域图未做归一化,归一化后图片四周是黑色的,中间是白色亮点,说明该图像低频成分极多。
对于频谱图,距离中心近的为低频,距离中心远的为高频。设计一个系统函数,该函数为一个低通滤波器:
H
(
u
,
v
)
=
1
1
+
(
D
D
0
)
2
n
H(u,v)=\frac{1}{1+(\frac{D}{D_0})^{2n}}
H(u,v)=1+(D0D)2n1
设当前测试点(u,v)距离频谱图中心的距离为
D
D
D,截止频率为
D
0
=
100
D_0=100
D0=100,滤波器阶数为
n
=
0.2
n=0.2
n=0.2
滤波器大概长这个样子:
与频谱图做点乘,可以得到低通滤波后的结果,再通过傅里叶反变换返回空域图像:
可以看到噪点明显被消除了,但是由于高频成分也丢失了,因此图片边缘消失,直观上看图片变模糊了。