逆滤波和维纳滤波恢复降质图像

Posted My heart will go ~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆滤波和维纳滤波恢复降质图像相关的知识,希望对你有一定的参考价值。

题目:用式子

H ( u , v ) = e − k ∗ ( u 2 + v 2 ) 5 / 6 H(u,v)= e^{-k*(u^2+v^2)^ {5/6}} Hu,v=ek(u2+v2)5/6
对图像进行模糊处理,然后加白高斯噪声,得到降质图像。用逆滤波和维纳滤波恢复图像,对结果进行分析。

逆滤波的原理非常之简单,只需要在频域除去滤波器即可,就不用管噪声了。
在这里插入图片描述

维纳滤波的处理原理为:

在这里插入图片描述

%首先进行图像降质
a=imread('aft.jpg');
a1=rgb2gray(a);%转换为灰度图
subplot(2,2,1);
imshow(a1);
title('原图');
a2=double(a1);%为了处理方便,转换为 double 类型
b=fft2(a2);%傅里叶变换
b1=fftshift(b);
%下面是求滤波器
[m,n]=size(a1);
H=zeros(m,n);
cx=m/2;
cy=n/2;
%设置滤波器
for x=1:m
for y=1:n
H(x,y)=exp(-0.0025*((x-cx)*(x-cx)+(y-cy)*(y-cy))^(5/6));
end
end
c=H.*b1;
c1=ifftshift(c);
d=real(ifft2(c1));
wgnoise=wgn(m,n,15);
d1=d+wgnoise;
subplot(2,2,2);
imshow(uint8(d1));
title('降质并模糊之后');
%检查上面处理无误
e=fft2(d1);
e1=fftshift(e);
e2=e1;
for u=1:m
for v=1:n
r=sqrt((u-m/2)^2+(v-n/2)^2);
   if r<=40
   e2(u,v)=e1(u,v)/H(u,v);
   end
end
end
f=ifftshift(e2);
f1=real(ifft2(f));
subplot(2,2,3)
imshow(uint8(f1));
title('逆滤波之后')
%下面是维纳滤波
g=zeros(m,n);
for u=1:m
    for v=1:n
        g(u,v)=e1(u,v)*(1/H(u,v)*(abs(H(u,v))^2/(abs(H(u,v))^2+0.1)));
    end
end
g1=ifftshift(g);
g2=real(ifft2(g1));
subplot(2,2,4)
imshow(uint8(g2));
title('维纳滤波')


实验结果:
在这里插入图片描述

此次作业需要注意的是:
傅里叶变换之后,要将零频移动到图片中央。在这里这一步骤的目的是方便在进行逆滤波的时候设置半径为一个固定值的的滤波范围。

以上是关于逆滤波和维纳滤波恢复降质图像的主要内容,如果未能解决你的问题,请参考以下文章

加性高斯白噪声及维纳滤波的基本原理与Python实现

图像修复基于维纳滤波实现图像复原matlab源码含GUI

维纳滤波通过MATLAB自带的维纳滤波函数进行滤波

基于Matlab图像处理的维纳滤波器

基于维纳滤波的图像运动模糊还原matlab仿真

基于matlab的退化图像复原------维纳滤波复原