如何在 MATLAB 中对频域图像进行去模糊处理?
How to deblur an image in frequency domain in MATLAB?
我通过在频域中使用平均滤波器蒙版模糊了图像。现在,我想对其进行去模糊处理,但我一直得到黑色图像。这是我的代码:
*1161x799 是我图片的尺寸
我想知道为什么即使我使用了另一个可信赖的代码,我仍然得到一个黑色图像。
im_gray = rgb2gray(im);
im_gray = im2double(im_gray);
%17*17 Average Filter
avgFilter = ones(17) / 289;
%Now taking FFT of both image and filter to work in frequency domain
im_fft = fft2(im_gray, 1161,799);
avgFilter_fft = fft2(avgFilter, 1161,799);
Conv = im_fft .* avgFilter_fft;
%inverse FFT
blurry_image = ifft2(Conv);
%deblur
Inv = Conv./avgFilter_fft;
deblur = ifft2(Inv);
您可能正在为某些频率分量计算 0/0,这意味着 Inv
将具有 NaN 值,这意味着 deblur
全部为 NaN。确保避免被零除:
Inv = Conv ./ (avgFilter_fft + 1e-12);
或者,通过删除 NaN 值来修正除法的结果:
Inv = Conv ./ avgFilter_fft;
Inv(isnan(Inv)) = 0;
我通过在频域中使用平均滤波器蒙版模糊了图像。现在,我想对其进行去模糊处理,但我一直得到黑色图像。这是我的代码:
*1161x799 是我图片的尺寸
我想知道为什么即使我使用了另一个可信赖的代码,我仍然得到一个黑色图像。
im_gray = rgb2gray(im);
im_gray = im2double(im_gray);
%17*17 Average Filter
avgFilter = ones(17) / 289;
%Now taking FFT of both image and filter to work in frequency domain
im_fft = fft2(im_gray, 1161,799);
avgFilter_fft = fft2(avgFilter, 1161,799);
Conv = im_fft .* avgFilter_fft;
%inverse FFT
blurry_image = ifft2(Conv);
%deblur
Inv = Conv./avgFilter_fft;
deblur = ifft2(Inv);
您可能正在为某些频率分量计算 0/0,这意味着 Inv
将具有 NaN 值,这意味着 deblur
全部为 NaN。确保避免被零除:
Inv = Conv ./ (avgFilter_fft + 1e-12);
或者,通过删除 NaN 值来修正除法的结果:
Inv = Conv ./ avgFilter_fft;
Inv(isnan(Inv)) = 0;