天天看點

維納濾波在圖像複原中的應用

      圖像退化/複原模型

     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('非盲複原');

     實驗結果

維納濾波在圖像複原中的應用