一 、背景
下图截取自一幅卫星影像,造成图像质量下降的点扩展函数可近似为高斯模型,并含有加性白噪声。设法估计图像退化的参数,利用维纳滤波进行恢复。
二、算法原理
(1)首先假设点扩散函数为高斯模型 ,加性白噪声为高斯噪声 ,理想的未退化的图像为 ,那么退化图像可表示为 ,要想恢复出理想图像,就要估计点扩散函数 和加性白噪声 ;
(2)为了更好地估计叠加有白噪声的高斯模糊图像的点扩展函数,可以先对图像进行去噪处理。因此我们采用均值滤波对退化图像进行去噪;
(3)采用最大似然估计算法来估计退化图像的点扩展函数 ,即寻找最适合的点扩展函数来极大化似然函数,先假设一个初始值,然后通过迭代方式估计出点扩展函数;
(4)估计加性白噪声 ,采用matlab图像处理工具箱中的二维维纳滤波函数来估计噪声参数;
(5)最后采用维纳滤波对退化图像进行复原。维纳滤波也称最小均方误差滤波,它能处理被退化函数退化和噪声污染的图像。该滤波方法建立在图像和噪声都是随机变量的基础之上,目标是找到理想图像 的一个估计 ,使它们之间的均方误差最小,即 。
三、算法步骤
(1)均值滤波去噪
(2)估计加性白噪声模型参数
(3)估计点扩散函数
(4)维纳滤波进行图像复原
四、matlab程序代码
f=im2double(imread('hw3_satellite.tiff'));
figure
subplot(2,2,1);imshow(f);title('原图像')
%均值滤波去噪
[r,c]=size(f);
h=ones(3,3)/9; %box模板
f=double(f);
n=zeros(r,c);
for a=2:r-1
for b=2:c-1
n(a,b)=sum(sum(h.*f(a-1:a+1,b-1:b+1)));
end
end
subplot(2,2,2);imshow(n);title('均值滤波去噪后的图像');
%估计噪声参数
[~,noise_var]=wiener2(f,[5 5])
estimated_nsr = noise_var / var(f(:));
%EM算法估计点扩散函数
INITPSF=ones(17,17);%起始猜想
[~,P0]=deconvblind(n,INITPSF,20,10*sqrt(noise_var));%迭代20次
subplot(2,2,3);imshow(P0);title('估计的PSF');
%维纳滤波
J = deconvwnr(f, P0, estimated_nsr);
subplot(2,2,4);imshow(J);title('图像复原');
五、处理结果(包括必要的中间结果)。
估计出的点扩散模型为:
估计出的噪声功率估计值为:
原图像、均值滤波去噪后的图像、估计的PSF、图像复原后的图像如下: