逆滤波与维纳滤波(二)

  在数学应用上,对于运动引起的图像模糊,最简单的方法是直接做逆滤波,但是逆滤波对加性噪声特别敏感,使得恢复的图像几乎不可用。最小均方差(维纳)滤波用来去除含有噪声的模糊图像,其目标是找到未污染图像的一个估计,使它们之间的均方差最小,可以去除噪声,同时清晰化模糊图像。

定义

给定一个系统

  •  x(t)x(t)是在时间 tt刻输入的信号(未知)
  • h(t
    h(t)是一个线性时间不变系统的脉冲响应(已知)
  • n(t
    n(t)是加性噪声,与x(t
    x(t)
    不相关(未知)
  • y(t)y(t)是我们观察到的信号

    我们的目标是找出这样的卷积函数g(t)g(t),这样我们可以如下得到估计的x(t)x(t):

                    

 

   这里x^(t)x^(t)是x(t)x(t)的最小均方差估计。

  基于这种误差度量, 滤波器可以在频率域如下描述:

          

 

 

 

 

  维纳滤波相比于逆滤波考虑了加性噪声的影响:

解释

  上面的式子可以改写成更为清晰的形式:

          

 

   H(f)是退化函数的频率域傅里叶变换。

          

 

 是信号噪声比。当噪声为零时(即信噪比趋近于无穷),方括号内各项也就等于1,意味着此时刻维纳滤波也就简化成逆滤波过程。但是当噪声增加时,信噪比降低,方括号里面值也跟着降低。这说明,维纳滤波的带通频率依赖于信噪比。

推导

  上面直接给出了维纳滤波的表达式,接下来介绍推导过程。
  上面提到,维纳滤波是建立在最小均方差,可以如下表示:

               

 

   这里 E是期望
  如果我们替换表达式中的X^(f),上面可以重新组合成:

               

 

   展开二次方,得到下式:

            

 

 然而,我们假设噪声与信号独立无关,这样有

      

 

 并且我们如下定义功率谱

       

 

 这样我们有

        

 

 为了得到最小值,我们对 G(f)G(f)求导,令方程等于零。

       

 

 由此最终推出维纳滤波器。

%---------------------------公式法----------------------------
fourier_H_motion=fft2(H_motion,width,height);  %H(u,v)
pow_H_motion=abs(fourier_H_motion).^2;   %|H(u,v)|^2
noise=motion_blur_noise-motion_blur;    %提取噪声分量
fourier_noise=fft2(noise);    % N(u,v)  噪声傅里叶变换
fourier_double_gray_pic=fft2(double_gray_pic);  %F(u,v)为未经过退化的图片
nsr=abs(fourier_noise).^2./abs(fourier_double_gray_pic).^2;   %噪信比=|N(u,v)|^2/|F(u,v)|^2
H_w=1./fourier_H_motion.*pow_H_motion./(pow_H_motion+nsr); %H_w(u,v)=1/H(u,v)*|H(u,v)|^2/[|H(u,v)|^2+NSR] 
fourier_motion_blur_noise=fft2(motion_blur_noise);  %G(u,v)
restore_with_noise=ifft2(fourier_motion_blur_noise.*H_w);  %输出频域=G(u,v)H_w(u,v),时域为频域傅里叶逆变换
figure('name','公式法维也纳滤波');
subplot(1,2,1);imshow(motion_blur_noise,[]);title('运动模糊添加噪声')
subplot(1,2,2);imshow(restore_with_noise,[]);title('维也纳滤波')

 

   可见在噪声较大的时候,我们采用维纳滤波消除部分噪声的影响,能够获得较好的图片。

参考:https://blog.csdn.net/bluecol/article/details/46242355?utm_source=app

posted @ 2021-01-14 14:32  为红颜  阅读(1438)  评论(0编辑  收藏  举报