1. 程式人生 > >L-R演算法去模糊

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演算法')

這裡寫圖片描述
數字影象處理的MATLAB實現