圖像去模糊(維納濾波)

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

定義

給定一個系統

y(t)=h(t)x(t)+n(t)

這裏, 是卷積符號
  • x(t) 是在時間t 刻輸入的信號(未知)
  • h(t) 是一個線性時間不變系統的脈衝響應(已知)
  • n(t) 是加性噪聲,與x(t) 不相關(未知)
  • y(t) 是我們觀察到的信號
    我們的目標是找出這樣的卷積函數g(t) ,這樣我們可以如下得到估計的x(t)
    x^(t)=g(t)y(t)

    這裏x^(t)x(t) 的最小均方差估計。
    基於這種誤差度量, 濾波器可以在頻率域如下描述
    G(f)=H(f)S(f)|H(f)|2S(f)+N(f)=H(f)|H(f)|2+N(f)/S(f)

    這裏:
  • G(f)H(f)gh 在頻率域f 的傅里葉變換。
  • S(f) 是輸入信號x(t) 的功率譜。
  • N(f) 是噪聲的n(t) 的功率譜。
  • 上標 代表複數共軛。
    濾波過程可以在頻率域完成:
    X^(f)=G(f)Y(f)

    這裏 X^(f)x^(t) 的傅里葉變換,通過逆傅里葉變化可以得到去卷積後的結果x^(t)

解釋

上面的式子可以改寫成更爲清晰的形式

G(f)=1H(f)|H(f)|2|H(f)|2+N(f)S(f)=1H(f)|H(f)|2|H(f)|2+1SNR(f)

這裏H(f)h 在頻率域f 的傅里葉變換。SNR(f)=S(f)/N(f) 是信號噪聲比。當噪聲爲零時(即信噪比趨近於無窮),方括號內各項也就等於1,意味着此時刻維納濾波也就簡化成逆濾波過程。但是當噪聲增加時,信噪比降低,方括號裏面值也跟着降低。這說明,維納濾波的帶通頻率依賴於信噪比。

推導

上面直接給出了維納濾波的表達式,接下來介紹推導過程。
上面提到,維納濾波是建立在最小均方差,可以如下表示:

e(f)=E|X(f)X^(f)|2

這裏E 是期望
如果我們替換表達式中的X^(f) ,上面可以重新組合成
e(f)=E|X(f)G(f)Y(f)|2=E|X(f)G(f)[H(f)X(f)+V(f)]|2=E|[1G(f)H(f)]X(f)G(f)V(f)|2

展開二次方,得到下式:
e(f)=[1G(f)H(f)][1G(f)H(f)]E|X(f)|2[1G(f)H(f)]G(f)E{X(f)V(f)}G(f)[1G(f)H(f)]E{V(f)X(f)}+G(f)G(f)E|V(f)|2

然而,我們假設噪聲與信號獨立無關,這樣有
E{X(f)V(f)}=E{V(f)X(f)}=0

並且我們如下定義功率譜
S(f)=E|X(f)|2N(f)=E|V(f)|2

這樣我們有
e(f)=[1G(f)H(f)][1G(f)H(f)]S(f)+G(f)G(f)N(f)

爲了得到最小值,我們對G(f) 求導,令方程等於零。
d(f)dG(f)=G(f)N(f)H(f)[1G(f)H(f)]S(f)=0

由此最終推出維納濾波器。

測試

Matlab自帶了示例程序,如下

%Read image
I = im2double(imread('cameraman.tif'));
figure,subplot(2,3,1),imshow(I);
title('Original Image (courtesy of MIT)');

%Simulate a motion blur
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
subplot(2,3,2),imshow(blurred);
title('Blurred Image');

%Restore the blurred image
wnr1 = deconvwnr(blurred, PSF, 0);
subplot(2,3,3),imshow(wnr1);
title('Restored Image');

%Simulate blur and noise
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
                        noise_mean, noise_var);
subplot(2,3,4),imshow(blurred_noisy)
title('Simulate Blur and Noise')

%Restore the blurred and noisy image:First attempt
wnr2 = deconvwnr(blurred_noisy, PSF, 0);
subplot(2,3,5);imshow(wnr2);title('Restoration of Blurred, Noisy Image Using NSR = 0')

%Restore the Blurred and Noisy Image: Second Attempt
signal_var = var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, noise_var / signal_var);
subplot(2,3,6),imshow(wnr3)
title('Restoration of Blurred, Noisy Image Using Estimated NSR');

這裏寫圖片描述
維納濾波需要估計圖像的信噪比(SNR)或者噪信比(NSR),信號的功率譜使用圖像的方差近似估計,噪聲分佈是已知的。從第一排中可以看出,若無噪聲,此時維納濾波相當於逆濾波,恢復運動模糊效果是極好的。從第二排可以看出噪信比估計的準確性對圖像影響比較大的,二排中間效果幾乎不可用。

參考閱讀

http://en.wikipedia.org/wiki/Wiener_deconvolution 英文維基百科
http://www.owlnet.rice.edu/~elec539/Projects99/BACH/proj2/wiener.html 萊斯大學的項目資料

轉載保留聲明

作者 日期 聯繫方式
風吹夏天 2015年5月29日 [email protected]
發佈了50 篇原創文章 · 獲贊 76 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章