使用 FFT 的图像反卷积



我正在尝试使用以下代码使用高斯滤波器盲目取消模糊图像但我知道每当过滤器包含零时我都有问题,所以我想知道除了使用 FFT 之外是否有任何其他反卷积方法

function [ out ] = imblur( file)
img = im2double(imread(file));
h = fspecial('gaussian', [15 15], 3);
img_red = img(:,:,1);
img_blue = img(:,:,2);
img_green = img(:,:,3);

[m,n] = size(img_red);
[mb,nb] = size(h);
% output size 
mm = m + mb - 1;
nn = n + nb - 1;
x1(:,:,1) = (ifft2(fft2(img_red,mm,nn)./ fft2(h,mm,nn)));
x2(:,:,2) = (ifft2(fft2(img_blue,mm,nn)./ fft2(h,mm,nn)));
x3(:,:,3) = (ifft2(fft2(img_green,mm,nn)./ fft2(h,mm,nn)));
out = cat(3, x1(:,:,1), x2(:,:,2), x3(:,:,3)); 
imshow(out);

用 epsilon 替换零就可以了。

最新更新