说明
图像降质的过程通常可以用以下模型描述:
Y = H ∗ X + N Y=H*X+N Y=H∗X+N
Y表示观测到的图像,H表示点扩展函数(Point Spread Function, PSF)。“*“表示二维卷积运算。
参考陈春涛 ,黄步根发表的文献
使用以下公式进行迭代计算:
X
k
=
c
e
x
p
(
λ
k
∗
H
)
X_k=c\ exp(\lambda_k*H)
Xk=c exp(λk∗H)
λ
k
+
1
=
λ
k
+
Δ
λ
k
\lambda_{k+1}=\lambda_{k}+\Delta\lambda_{k}
λk+1=λk+Δλk
Δ
λ
k
=
l
o
g
(
Y
)
−
l
o
g
(
H
∗
X
k
)
\Delta\lambda_{k}=log(Y)-log(H*X_k)
Δλk=log(Y)−log(H∗Xk)
matlab代码
clc,close all
clear
I = im2double(imread('cameraman.tif'));
figure
imshow(I)
title('Original Image');
saveas(gcf,'save1.bmp')
% add blur
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
% add noise
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
noise_mean, noise_var);
figure, imshow(blurred_noisy)
title('Simulate Blur and Noise')
saveas(gcf,'save2.bmp')
% MEM method
lambda = ones(size(blurred_noisy));
I2 = ones(size(blurred_noisy));
c=0.4;
for i=1:20
dlambda = (log(blurred_noisy) - log(imfilter(I2, PSF, 'conv', 'circular')));
lambda = lambda + dlambda;
I2 = c*exp(imfilter(lambda, PSF, 'conv', 'circular'));
end
figure, imshow(I2)
title('MEM method')
saveas(gcf,'save.bmp')
效果
参考文献
[1] 陈春涛, 黄步根. 模糊图像的最大熵恢复[J]. 中国司法鉴定, 2010(01):76-78.