天天看点

5.8 最小均方误差(维纳)滤波

       对于退化了的图像,最直接的考虑是使用逆滤波器来完成图像的复原,然而由于退化函数是零或者非常小的值,这就导致直接使用逆滤波器会放大噪声或者浮点数的舍入误差,导致复原图像几乎不可用。

  维纳滤波器是一种基于最小均方误差算法的滤波器,其目标是找到未污染图像 f f f的一个估计 f ^ \hat f f^​,使得他们之间的均方误差最小,这种误差由下式给出:

e 2 = E { ( f − f ^ ) 2 } (1) e^2=E\left \{ (f - \hat f)^2 \right \} \tag{1} e2=E{(f−f^​)2}(1)

  维纳滤波器的推导基于以下假设:

  1. 信号与噪声统计独立。

  2.信号与噪声中有一个为零均值。

  为了表示方便,令 f f f表示原始图像 f ( x , y ) f(x, y) f(x,y), h h h表示退化函数 h ( x , y ) h(x,y) h(x,y), η \eta η表示噪声 η ( x , y ) \eta(x,y) η(x,y), g g g退化后的图像 g ( x , y ) g(x, y) g(x,y), w w w表示维纳滤波器 w ( x , y ) w(x,y) w(x,y), f ^ \hat f f^​表示经过维纳滤波器后对无噪声图像 f ^ ( x , y ) \hat f(x,y) f^​(x,y)的一个估计。其傅里叶变换相应的表示为 F 、 H 、 N 、 G 、 W 、 F ^ F、H、N、G、W、\hat F F、H、N、G、W、F^。由退化模型,得到

{ g = f ∗ h + η f ^ = w ∗ g (2) \begin{cases} g = f*h +\eta \cr \hat f = w*g\end{cases} \tag{2} {g=f∗h+ηf^​=w∗g​(2)及 { G = F ∗ H + N F ^ = W ∗ G (3) \begin{cases} G = F*H +N \cr \hat F = W*G\end{cases} \tag{3} {G=F∗H+NF^=W∗G​(3)

在均方误差公式中,将 f − f ^ f - \hat f f−f^​看做一个信号 y y y,由Parseval定理: ∑ y 2 = 1 2 π ∑ Y 2 \sum y^2 = \frac{1}{2 \pi}\sum Y^2 ∑y2=2π1​∑Y2,注意到 H 、 W H、W H、W均为确定函数, N 、 F N、F N、F均为广义平稳随机过程,所以 E { H } = H , E { W } = W , E { F F ∗ } = S f ( u , v ) , E { N N ∗ } = S η ( u , v ) E\{H\}=H, E\{W\}=W, E\{FF^*\}=S_f(u,v), E\{NN^*\}=S_{\eta}(u,v) E{H}=H,E{W}=W,E{FF∗}=Sf​(u,v),E{NN∗}=Sη​(u,v),其中 S f ( u , v ) S_f(u,v) Sf​(u,v)为无噪信号(图像)的功率谱密度,则 S η ( u , v ) S_{\eta}(u,v) Sη​(u,v)为噪声的功率谱密度

e 2 = E { ( f − f ^ ) 2 } = 1 2 π E { ( F − F ^ ) 2 } = 1 2 π E { ( F − W G ) 2 } = 1 2 π E { ( F − W ( F H + N ) ) 2 } = 1 2 π E { ( ( 1 − W H ) F − W N ) 2 } = 1 2 π [ ( 1 − W H ) ( 1 − W H ) ∗ E { F F ∗ } − ( 1 − W H ) W ∗ E { F N ∗ } − ( 1 − W H ) ∗ W E { F ∗ N } + W W ∗ E { N N ∗ } ] \begin{aligned} e^2 &=E\left \{ (f - \hat f)^2 \right \} \\ &= \frac{1}{2\pi} E\left \{ (F - \hat F)^2 \right \} \\ &=\frac{1}{2\pi} E\left \{ (F - WG)^2 \right \} \\ &= \frac{1}{2\pi} E\left \{ \Big (F - W (FH+N) \Big)^2 \right \} \\ &= \frac{1}{2\pi} E\left \{ \Big((1 - WH)F-WN \Big)^2 \right \} \\ &= \frac{1}{2\pi} \Big [ (1-WH)(1-WH)^*E\{FF^*\} - (1-WH)W^*E\{FN^*\} - (1-WH)^*WE\{F^*N\} + WW^*E\{NN^*\} \Big] \end{aligned} e2​=E{(f−f^​)2}=2π1​E{(F−F^)2}=2π1​E{(F−WG)2}=2π1​E{(F−W(FH+N))2}=2π1​E{((1−WH)F−WN)2}=2π1​[(1−WH)(1−WH)∗E{FF∗}−(1−WH)W∗E{FN∗}−(1−WH)∗WE{F∗N}+WW∗E{NN∗}]​

由于图像与噪声不相关,所以 E { F N ∗ } = 0 、 E { F ∗ N } = 0 E\{FN^*\}=0、E\{F^*N\}=0 E{FN∗}=0、E{F∗N}=0,故

e 2 = 1 2 π [ ( 1 − W H ) ( 1 − W H ) ∗ E { F F ∗ } + W W ∗ E { N N ∗ } ] = 1 2 π [ ( 1 − W H ) ( 1 − W H ) ∗ S f + W W ∗ S η ] \begin{aligned} e^2 &= \frac{1}{2\pi} \Big [ (1-WH)(1-WH)^*E\{FF^*\} + WW^*E\{NN^*\} \Big] \\ &= \frac{1}{2\pi} \Big [ (1-WH)(1-WH)^*S_f + WW^*S_{\eta} \Big] \end{aligned} e2​=2π1​[(1−WH)(1−WH)∗E{FF∗}+WW∗E{NN∗}]=2π1​[(1−WH)(1−WH)∗Sf​+WW∗Sη​]​

这是一个关于W的函数,令 d e 2 d W = 0 \frac{\mathrm{d} e^2 }{\mathrm{d} W}=0 dWde2​=0得:

W = H ∗ S f S f ∣ H ∣ 2 + S η W=\frac{H^*S_f}{S_f \left|H\right|^2+S_{\eta}} W=Sf​∣H∣2+Sη​H∗Sf​​

由于均方误差大于0,故此极值即为最小值,此表达式即为维纳滤波器的频域表达式。使用维纳滤波器,可以将得到原始图像的估计为:

F ^ = [ H ∗ S f S f ∣ H ∣ 2 + S η ] G ( u , v ) = [ H ∗ f ∣ H ∣ 2 + S η / S f ] G ( u , v ) = [ 1 H ∣ H ∣ 2 ∣ H ∣ 2 + S η / S f ] G ( u , v ) (4) \begin{aligned} \hat F &= \left[ \frac{H^*S_f}{S_f \left|H\right|^2+S_{\eta}} \right]G(u,v) \\&= \left[ \frac{H^*f}{ \left|H\right|^2+S_{\eta}/S_f} \right]G(u,v) \\&= \left[ \frac{1}{H} \frac{\left|H\right|^2}{ \left|H\right|^2+S_{\eta}/S_f} \right]G(u,v) \end{aligned} \tag{4} F^​=[Sf​∣H∣2+Sη​H∗Sf​​]G(u,v)=[∣H∣2+Sη​/Sf​H∗f​]G(u,v)=[H1​∣H∣2+Sη​/Sf​∣H∣2​]G(u,v)​(4)

该式子中,SNR= S f s η \frac{S_f}{s_{\eta}} sη​Sf​​称之为信噪比,当信噪比非常高时,图片质量越好,(4)式就退化为直接逆滤波。

  IPT中提供了deconvwnr函数来进行维纳滤波,该函数的调用形式有三种,其中g代表退化图像,PSF是点扩散函数,fr是复原图像:

  1. fr = deconvwnr(g, PSF)

  这种形式假设信噪比为0,从而这种形式就是逆滤波器

  2. fr = deconvwnr(g, PSF, NSPR)

  这种形式假设信噪比已知,可以用来实现参数维纳滤波器

  3. fr = deconvwnr(g, PSF, NACORR,FACORR)

  这种形式需要用到为退化图像的自相关函数NACORR和噪声的自相关函数FACORR,由通信原理我们知道自相关函数的傅里叶变换是功率谱密度,这样,我们可以通过计算噪声功率谱的反变换得到其自相关函数。

  下图(a)显示了一幅含有8x8个方格的图像,它经退化并被一高斯噪声污染。图(b)显示了使用第一种形式的逆滤波器滤波的结果,显然,对图像的复原效果较差,图©显示了使用第二种形式的维纳滤波器滤波的结果,此时已较接近原始图像,只不过方格中仍有可见的噪声。图(d)显示了使用第三种形式的维纳滤波器滤波的结果,此时的还原效果最好。

5.8 最小均方误差(维纳)滤波
5.8 最小均方误差(维纳)滤波

本节所用代码如下:

f = checkerboard(8);

PSF = fspecial('motion', 7, 45);

gb = imfilter(f, PSF, 'circular');

noise = imnoise(zeros(size(f)), 'gaussian', 0, 0.001);

g = gb + noise;

figure
subplot(1, 2, 1)
imshow(pixeldup(g, 8), []);
title('(a)含有噪声的退化图像');

fr1 = deconvwnr(g, PSF);
subplot(1, 2, 2)
imshow(pixeldup(fr1, 8), [ ])
title('(b)逆滤波结果')

Sn = abs(fft2(noise)).^2;
nA = sum(Sn(:)) / prod(size(noise));
Sf = abs(fft2(f)).^2;
fA = sum(Sf(:)) / prod(size(f));
R = nA / fA;
fr2 = deconvwnr(g, PSF, R);
figure
subplot(1, 2, 1);
imshow(pixeldup(fr2, 8), [ ])
title('(c)维纳滤波结果(信噪比为常数)');

NCORR = fftshift(real(ifft2(Sn)));
ICORR = fftshift(real(ifft2(Sf)));
fr3 = deconvwnr(g, PSF, NCORR, ICORR);
subplot(1, 2, 2)
imshow(pixeldup(fr3, 8), [])
title('(d)维纳滤波结果(信噪比为非常数)');
           

继续阅读