我正在努力在不知道 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');
图片样本: