Bootstrap

matlab 逆滤波,【CV】图像去模糊(逆滤波)

###Date: 2018.5.8

================================================

引言

图像模糊是一种拍摄常见的现象,我曾在图像去模糊(维纳滤波) 介绍过。这里不再详述,只给出物理模型,这里我们仍在频率域表示

G(u,v)=H(u,v)F(u,v)+N(u,v)(1)G(u,v)=H(u,v)F(u,v)+N(u,v)(1)

其中提到最简单的复原方法是直接做逆滤波(Inverse filter)。

F^(u,v)=G(u,v)H(u,v)(2)F^(u,v)=G(u,v)H(u,v)(2)

该除法是阵列操作,即按位除。

在含有噪声情况下,将(1)式两端除以

H(u,v)H(u,v)

F^(u,v)=F(u,v)+N(u,v)H(u,v)(3)F^(u,v)=F(u,v)+N(u,v)H(u,v)(3)

这里

N(u,v)N(u,v)

未知,式子表明,即使知道退化函数也不能准备复原图像。还有当退化函数

H(u,v)H(u,v)

是零或者非常小的值,则

N(u,v)H(u,v)N(u,v)H(u,v)

很容易支配整个式子。

下面我将用代码说明一下逆滤波,这里我采用直接编码形式。对了,前面我提到过,当噪声信息比

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')1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

这里使用了经典的lena图是灰度图像,分别对图像进行运动模糊,逆滤波,运动模糊+高斯噪声,假定噪声未知直接逆滤波,噪声已知逆滤波。

效果

b22b498359e431f33c8ed30a7ebbb471.png

说明

逆滤波对噪声非常敏感,除非我们知道噪声的分布情况(事实上,这也很难知道),逆滤波几乎不可用,可以从二排中间看出,恢复图像效果极差。但若知道噪声分布,也是可以完全复原信息的。可以从二排最后一张图可以看出。写作本文的目的也仅是在数学角度上对图像模糊现象进行分析,后续会介绍更加有效的图像复原方法,敬请关注。

相关阅读及参考文献

转载请保留以下信息

作者

日期

联系方式

风吹夏天

2015年8月8日

[email protected]

;