圖像退化/複原模型
g(x,y) = h(x,y)*f(x,y)+n(x,y) 頻域:G(u,v) = H(u,v)F(u,v) +N(u,v)
其中f(x,y)為原始圖像,h(x,y)為退化函數,n(x,y)為噪聲函數,目标就是根據觀測圖像g(x,y)以及一些先驗或者估計資訊複原f(x,y)
圖像複原的核心内容就是估計退化函數,因為當噪聲N為0時,F = G/H,知道了退化函數,即可複原原圖像,但是當N不為0時,且H較小時,無法直接使用盲複原(噪聲被過度放大)。
維納濾波
維納濾波又叫最小均方差濾波,它的目标是找到一個原圖像f的估計圖像f',使得它們之間的均方誤差最小。
數學表達式: e^2 = E((f-f')^2)
根據假設,推導出估計圖像的表達式如下:

從上公式可以看到,該表達式将估計圖像和原圖像的信噪比相聯系,當H(u,v)和信噪比(Sf/Sn)較大時,該公式接近盲複原公式G/H,當信噪比較小時,會對該區域複原圖像除以一個大于1的系數(壓制作用)。
當處理白噪聲時,噪聲功率譜Sn是一個常數,大大簡化處理。然而未退化功率譜很少是已知的,一般用下式表示,K是一個特定常數,用來找到最好視覺效果。
維納濾波是圖像複原中常用的一種複原方法,常與其他方法共同使用完成圖像複原。此外,盲去卷積算法在圖像複原中也有着重要的意義,可參考:盲去卷積在圖像複原中的作用,相比維納來講,它不需要如此多的先驗知識。
維納濾波MATLAB實驗
MATLAB關于維納濾波函數有wiener2和deconvwnr,分别适用于灰階圖像和彩色圖像,這裡隻使用wiener2
實驗代碼:
I=imread('lena.jpg');
noise=5*randn(size(I));
noise = noise - min(min(noise));
J = double(I) +noise;
R1=wiener2(J,[10 10]); %未知噪聲
R2=wiener2(J,[10 10],noise); %已知噪聲分布
figure
subplot(2,2,1),imshow(uint8(I));title('原始圖像');
subplot(2,2,2),imshow(uint8(I1));title('退化圖像');
subplot(2,2,3),imshow(uint8(R1));title('盲複原'); subplot(2,2,4),imshow(uint8(R2));title('非盲複原');
實驗結果