使用MATLAB的imgaussfilt函数

时间:2017-06-10 01:09:14

标签: matlab image-processing blur deconvolution gaussianblur

我在不知道PSF值的情况下恢复模糊图像。我使用盲去卷积来估计PSF值和Lucy Richardson方法来完全恢复图像。问题是,我用fspecial('gaussian')来模糊图像,现在我需要使用imgaussfilt函数来做到这一点。但是,一旦我这样做,图像就不会像预期的那样恢复。第一种方法,我得到了很好的结果。

fspecial('gaussian')imgaussfilt()之间有什么区别?有没有办法可以恢复第二个功能模糊的图像?

PS:所有图像都是生物识别系统中使用的虹膜图片。

首先,我使用此代码尝试了恢复过程:

function [J, P, V] = blindDeconv(image, qualityBlur, upTo)
lowerValue = 20;
for i = 3:15
    for j = 1:upTo
        P = fspecial('gaussian', i, j);
        [I PSF] = deconvblind(image,P);
        %[I PSF] = deblur(image, j);
        quality = blurMetric(I);
        if quality < lowerValue
            lowerValue = quality;
            P = PSF;
            J = I;
            V = j;
        end
    end
end

这是我模糊和去模糊图像的主要脚本:

%----------------------
%  Blurring process
%----------------------
%PSF = fspecial('gaussian', 7, j);
%blur{i,j} = imfilter(im2double(image{i}), PSF, 'conv');
blur{i,j} = imgaussfilt(im2double(image{i}), j);
qualityBlur{i, j} = blurMetric(blur{i, j});
link = strcat(folder, '/', prefix, '_blur_', num2str(j), '.jpeg');
imwrite(blur{i, j}, link, 'jpeg');

%---------------------
% Deblurring process
%----------------------
[J, P, V] = blindDeconv(blur{i, j}, qualityBlur{i, j}, upTo);
deblurred{i, j} = deconvlucy(J, P, 20, V);
qualityDeblurred{i, j} = blurMetric(deblurred{i, j});
link = strcat(folder, '/', prefix, '_deblur_', num2str(j), '.jpeg');
imwrite(deblurred{i, j}, link, 'jpeg');

图片示例:

sample

0 个答案:

没有答案