matlab 图片频域去噪实例(详细注释)

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
滤波器大概长这个样子:
在这里插入图片描述
与频谱图做点乘,可以得到低通滤波后的结果,再通过傅里叶反变换返回空域图像:

在这里插入图片描述
可以看到噪点明显被消除了,但是由于高频成分也丢失了,因此图片边缘消失,直观上看图片变模糊了。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值