在數學應用上,對於運動引起的圖像模糊,最簡單的方法是直接做逆濾波,但是逆濾波對加性噪聲特別敏感,使得恢復的圖像幾乎不可用。最小均方差(維納)濾波用來去除含有噪聲的模糊圖像,其目標是找到未污染圖像的一個估計,使它們之間的均方差最小,可以去除噪聲,同時清晰化模糊圖像。
定義
給定一個系統

- 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
