图像模糊是一种拍摄常见的现象,我曾在图像去模糊(维纳滤波) 介绍过。这里不再详述,只给出物理模型,这里我们仍在频率域表示
NSR
等于0时,此时维娜滤波等同于逆滤波。因此可以直接使用matlab自带deconvwnr函数,将第三个参数NSR
设置成0即可,省事的同学可以试一下。
close all;
clear all;
clc;
% Display the original image.
I = im2double(imread(‘lena.jpg‘));
[hei,wid,~] = size(I);
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‘);
% Inverse filter
If = fft2(blurred);
Pf = fft2(PSF,hei,wid);
deblurred = ifft2(If./Pf);
subplot(2,3,3), imshow(deblurred); title(‘Restore Image‘)
% Simulate additive 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‘)
% Try restoration assuming no noise.
If = fft2(blurred_noisy);
deblurred2 = ifft2(If./Pf);
subplot(2,3,5), imshow(deblurred2)
title(‘Restoration of Blurred Assuming No Noise‘);
% Try restoration with noise is known.
noisy = blurred_noisy - blurred;
Nf = fft2(noisy);
deblurred2 = ifft2(If./Pf - Nf./Pf);
subplot(2,3,6), imshow(deblurred2)
title(‘Restoration of Blurred with Noise Is Known‘)
这里使用了经典的lena图是灰度图像,分别对图像进行运动模糊,逆滤波,运动模糊+高斯噪声,假定噪声未知直接逆滤波,噪声已知逆滤波。
逆滤波对噪声非常敏感,除非我们知道噪声的分布情况(事实上,这也很难知道),逆滤波几乎不可用,可以从二排中间看出,恢复图像效果极差。但若知道噪声分布,也是可以完全复原信息的。可以从二排最后一张图可以看出。写作本文的目的也仅是在数学角度上对图像模糊现象进行分析,后续会介绍更加有效的图像复原方法,敬请关注。
图像去模糊(维纳滤波) http://blog.csdn.net/bluecol/article/details/46242355
数字图像处理(第三版) 冈萨雷斯著 chapter 5,图像复原与重建
作者 | 日期 | 联系方式 |
---|---|---|
风吹夏天 | 2015年8月8日 | wincoder@qq.com |
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/bluecol/article/details/47357717