在数学应用上,对于运动引起的图像模糊,最简单的方法是直接做逆滤波,但是逆滤波对加性噪声特别敏感,使得回复的图像几乎不可用。最小均方差(维纳)滤波用来去除含有噪声的模糊图像,其目标是找到未污染图像的一个估计,使它们之间的均方差最小,可以去除噪声,同时清晰化模糊图像。
给定一个系统
上面的式子可以改写成更为清晰的形式
上面直接给出了维纳滤波的表达式,接下来介绍推导过程。
上面提到,维纳滤波是建立在最小均方差,可以如下表示:
Matlab自带了示例程序,如下
%Read image
I = im2double(imread(‘cameraman.tif‘));
figure,subplot(2,3,1),imshow(I);
title(‘Original Image (courtesy of MIT)‘);
%Simulate a motion blur
LEN = 21;
THETA = 11;
PSF = fspecial(‘motion‘, LEN, THETA);
blurred = imfilter(I, PSF, ‘conv‘, ‘circular‘);
subplot(2,3,2),imshow(blurred);
title(‘Blurred Image‘);
%Restore the blurred image
wnr1 = deconvwnr(blurred, PSF, 0);
subplot(2,3,3),imshow(wnr1);
title(‘Restored Image‘);
%Simulate blur and noise
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, ‘gaussian‘, ...
noise_mean, noise_var);
subplot(2,3,4),imshow(blurred_noisy)
title(‘Simulate Blur and Noise‘)
%Restore the blurred and noisy image:First attempt
wnr2 = deconvwnr(blurred_noisy, PSF, 0);
subplot(2,3,5);imshow(wnr2);title(‘Restoration of Blurred, Noisy Image Using NSR = 0‘)
%Restore the Blurred and Noisy Image: Second Attempt
signal_var = var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, noise_var / signal_var);
subplot(2,3,6),imshow(wnr3)
title(‘Restoration of Blurred, Noisy Image Using Estimated NSR‘);
维纳滤波需要估计图像的信噪比(SNR)或者噪信比(NSR),信号的功率谱使用图像的方差近似估计,噪声分布是已知的。从第一排中可以看出,若无噪声,此时维纳滤波相当于逆滤波,恢复运动模糊效果是极好的。从第二排可以看出噪信比估计的准确性对图像影响比较大的,二排中间效果几乎不可用。
http://en.wikipedia.org/wiki/Wiener_deconvolution 英文维基百科
http://www.owlnet.rice.edu/~elec539/Projects99/BACH/proj2/wiener.html 莱斯大学的项目资料
作者 | 日期 | 联系方式 |
---|---|---|
风吹夏天 | 2015年5月29日 | wincoder@qq.com |
原文地址:http://blog.csdn.net/bluecol/article/details/46242355