L-R演算法去模糊
阿新 • • 發佈:2019-02-17
在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實現