一.实验理论基础``
维纳滤波(wiener filtering) 一种基于最小均方误差准则、对平稳过程的最优估计器。这种滤波器的输出与期望输出之间的均方误差为最小,因此,它是一个最佳滤波系统。可用于提取被平稳噪声所污染的信号。
从连续的(或离散的)输入数据中滤除噪声和干扰以提取有用信息的过程称为滤波,这是信号处理中经常采用的主要方法之一,具有十分重要的应用价值,而相应的装置称为滤波器。根据滤波器的输出是否为输入的线性函数,可将它分为线性滤波器和非线性滤波器两种。维纳滤波器是一种线性滤波器。
维纳滤波的基本原理是:设观察信号y(t)含有彼此统计独立的期望信号x(t)和白噪声ω(t)可用维纳滤波从观察信号y(t)中恢复期望信号x(t)。设线性滤波器的冲击响应为h(t),此时其输入y(t)为y(t)=x(t)+w(t),输出为
从而,可以得到输出对x(t)期望信号的误差为
其均方误差为:
E[ ]表示数学期望。应用数学方法求最小均方误差时的线性滤波器的冲击响应hopt(t)可得方程:
式中,Ryx(t)为y(t)与x(t)的互相关函数,Ryy(τ-σ)为y(t)的自相关函数。上述方程称为维纳-霍夫(Wiener-Hopf)方程。求解维纳-霍夫方程可以得到最佳滤波器的冲击响应hopt(t)。
clear;
close all;
clc
%Read image
I = im2double(imread('31.jpg'));
figure,subplot(4,4,1),imshow(I);
title('Original Image');
noise = imnoise(zeros(size(I)),'gaussian',0,0.0001);
%Simulate a motion blur
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'circular');
subplot(4,4,2),imshow(blurred);
title('Blurred Image');
%Simulate the noise image
g = I + noise;
subplot(4,4,3),imshow(g);
title('noise image');
%Simulate blur and noise
bg = blurred + noise;
subplot(4,4,4),imshow(bg)
title('Blur and Noise image')
%Restore the I image
wnr11 = deconvwnr(I, PSF);%信噪比为零
subplot(4,4,5),imshow(wnr11);
title('Original Image、S/N=0');
wnr12 = deconvwnr(blurred, PSF);%信噪比为零
subplot(4,4,6),imshow(wnr12);
title('blurred Image、S/N=0');
wnr13 = deconvwnr(g, PSF);%信噪比为零
subplot(4,4,7),imshow(wnr13);
title('noise Image、S/N=0');
wnr14 = deconvwnr(bg, PSF);%信噪比为零
subplot(4,4,8),imshow(wnr14);
title('blur and noise Image、S/N=0');
Sn = abs(fft2(noise)).^2;
nA = sum(Sn(:))/prod(size(noise));
SI = abs(fft2(I)).^2;
IA = sum(SI(:))/prod(size(I));
R = nA/IA;
wnr21 = deconvwnr(I,PSF,R);%噪信比已知 R
subplot(4,4,9),imshow(wnr21);
title('Original Image、N/S=R');
wnr22 = deconvwnr(blurred,PSF,R);%噪信比已知 R
subplot(4,4,10),imshow(wnr22);
title('blurred Image、N/S=R');
wnr23 = deconvwnr(g,PSF,R);%噪信比已知 R
subplot(4,4,11),imshow(wnr23);
title('noise Image、N/S=R');
wnr24 = deconvwnr(bg,PSF,R);%噪信比已知 R
subplot(4,4,12),imshow(wnr24);
title('blur and noise Image、N/S=R');
NCORR = fftshift(real(ifft2(Sn)));%自相关函数
ICORR = fftshift(real(ifft2(SI)));
wnr31 = deconvwnr(I,PSF,NCORR,ICORR);%自相关函数
subplot(4,4,13),imshow(wnr31);
title('Original Image、自相关函数');
wnr32 = deconvwnr(blurred,PSF,NCORR,ICORR);%自相关函数
subplot(4,4,14),imshow(wnr32);
title('blurred Image、自相关函数');
wnr33 = deconvwnr(g,PSF,NCORR,ICORR);%自相关函数
subplot(4,4,15),imshow(wnr33);
title('noise Image、自相关函数');
wnr34 = deconvwnr(bg,PSF,NCORR,ICORR);%自相关函数
subplot(4,4,16),imshow(wnr34);
title('blur and noise Image、自相关函数');
实验结果
实验结果分为4*4=16张图片,第一排:第一张为原图,第二张为加入运动模糊图片,第三张为加入高斯白噪声图片,第四张为加入运动模糊和高斯白噪声的图片。
第二、三、四排分别是S/N=0,N/S=R,利用自相关函数,对第一排图片进行维纳滤波。滤波结果如下:
.实验分析
维纳滤波需要估计图像的信噪比(SNR)或者噪信比(NSR),信号的功率谱使用图像的方差近似估计,噪声分布是已知的。从第二列中可以看出,若无噪声,此时维纳滤波相当于逆滤波,恢复运动模糊效果是极好的。从第二、三、四排可以看出噪信比估计的准确性对图像影响比较大的。利用自相关函数的维纳滤波是效果最好的。
加入的高斯白噪声方差越大,影响效果越明显。对运动模糊图片的滤波效果优于加入高斯白噪声图片效果。对于图片中存在的运动模糊,逆滤波方法更优。对于总体噪声而言,利用自相关函数的维纳滤波适用性更强,效果更好。