尽管维纳滤波可以获得比逆滤波更好的效果,但也存在如下问题
1)维纳波需要知道未退化图像和声的功率谱,而未退化图像与噪声的功率一般都是未知的。此时,可以近似,但是功率谱比的常数估计一般还是没有合适的解。
2)维纳滤波建立在最小化统计准则的基础上,它所得到的结果只是平均意义上的最优。 据此,本节将要介绍的约束最小二乘方滤波可以在一定程度上解决上述问题。其一约束最小二乘方滤波只要求噪声方差和均值的知识,而这些参数经常能通过一幅给定的退化图像计算出来;其二,约束最小二乘方滤波对于所处理的每一幅图像都能产生最优的结果。
close all;
clear all;
clc;
I=imread('lena.bmp');
I=rgb2gray(I);
I=im2double(I);
%运动模糊+高斯噪声
LEN=25; %设置运动位移为7个像素
THETA=45; %设置运动角度为45°
PSF=fspecial('motion',LEN,THETA); %建立二维仿真线性运动滤波器PSF
MF=imfilter(I,PSF,'circular','conv'); %用PSF产生退化图像
%高斯噪声
noise_var=0.01;noise_mean=0;
MFN=imnoise(MF,'gaussian',noise_mean,noise_var);
%计算噪信比
NSR=noise_var/var(I(:));
K1=deconvwnr(MFN,PSF,NSR); %维也纳滤波
[M N]=size(I);
NOISEPOWER=M*N*(noise_var-noise_mean);
K2=deconvreg(MFN,PSF,NOISEPOWER); %最小二乘方滤波
figure;
subplot(221),imshow(I);
subplot(222),imshow(MFN),title('运动模糊+高斯噪声');
subplot(223),imshow(K1),title('维也纳滤波');
subplot(224),imshow(K2),title('最小二乘方滤波');