在数学应用上,对于运动引起的图像模糊,最简单的方法是直接做逆滤波,但是逆滤波对加性噪声特别敏感,使得恢复的图像几乎不可用。最小均方差(维纳)滤波用来去除含有噪声的模糊图像,其目标是找到未污染图像的一个估计,使它们之间的均方差最小,可以去除噪声,同时清晰化模糊图像。
定义
给定一个系统
- x(t)是在时间 t刻输入的信号(未知)
- h(t
是一个线性时间不变系统的脉冲响应(已知) - n(t
是加性噪声,与x(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