L-R算法去模糊

LR 算法起源于极大似然,图像是用泊松统计建模的。当下面这个迭代收敛时,模型极大似然得到令人满意方程式:

f^k+1(x,y)=f^k(x,y)[x,y]g(x,y)h(x,y)f^k(x,y)

在MATLAB中L-R算法用deconvlucy实现基本语法:

f=deconvlucy(g,PSF,NUMIT,DAMPAR,WEIGHT)

其中f表示复原图像,g表示退化图像,PSF是点扩散函数,NUMIT为迭代次数,DAMPAR是标量,指定了结果图像和原始图像的偏离阈值,当像素偏离原值DAMPAR范围内就不再迭代,既抑制了噪声,又保留了图像细节。默认为0。WEIGHT是数组,大小与g相同,它为每个像素施于权重以反映图像质量,例如,从某个有缺陷的成像数组中得到不良像素都会被赋值为零,从而排出不良像素的影响。另一个作用根据平坦区域修正总量来调节像素权重。
如果复原图像呈现由算法所用的离散傅里叶变换引入的振铃,那么调用函数deconvluvcy之前,先利用edgeaper是由帮助的。

close all;
clear all;
clc;
% Display the original image.
I = imread('1.jpg'); 
[d1,d2,d3] = size(I); 
if(d3 > 1) 
I = rgb2gray(I);
end
I = im2double(I);

[hei,wid,~] = size(I);
subplot(1,4,1),imshow(I);
title('Original Image ');


% Simulate a motion blur.
LEN = 100;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
subplot(1,4,2), imshow(blurred); title('Blurred Image');


% Simulate additive noise.
noise_mean = 0;
noise_var = 0.00001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
                        noise_mean, noise_var);
subplot(1,4,3), imshow(blurred_noisy)
title('Simulate Blur and Noise')

DAMPAR=10*noise_var;
LIM=ceil(size(PSF,1)/2);
WEIGHT=zeros(size(blurred_noisy));
WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1;

NUMIT=5;
f5=deconvlucy(blurred_noisy,PSF,NUMIT,DAMPAR,WEIGHT);
subplot(1,4,4),imshow(f5);
title('L_R算法')

L-R算法去模糊_第1张图片
数字图像处理的MATLAB实现

你可能感兴趣的:(图像处理,Image,Deblurring)