我知道
结果没有意义。我发现
原始图像 * 滤波器 = 模糊图像
,其中*
是卷积。因此,滤波器 = ifft(fft(模糊)/fft(原始))
我有一个原始图像、已知的滤波器和已知的模糊图像。我尝试了以下代码。我只想比较使用fft和ifft计算的滤波器,并将其与已知的滤波器进行比较。我在Matlab中尝试过:orig = imread("orig.png")
blur = imread("blur.png")
fftorig = fft(orig)
fftblur = fft(blur)
div = fftblur/fftorig
conv = ifft(div)
结果没有意义。我发现
包含许多NaN值,fftblur和fftorig都包含许多0值。我需要做些什么吗?例如使用fftshift吗?
编辑: 为了更容易理解,我现在使用来自http://matlabgeeks.com/tips-tutorials/how-to-blur-an-image-with-a-fourier-transform-in-matlab-part-i/的图像。
我决定使用该链接中的
编辑: 为了更容易理解,我现在使用来自http://matlabgeeks.com/tips-tutorials/how-to-blur-an-image-with-a-fourier-transform-in-matlab-part-i/的图像。
我决定使用该链接中的
origimage
和blurimageunpad
计算内核:kernelc = real(ifft2(fft2(origimage)./fft2(blurimageunpad));
imagesc(kernelc)
colormap gray
这是结果:
很明显,这与链接顶部提到的高斯模糊不匹配。
/
,但你想要使用./
。然而,这不应该阻止 NaN 值出现在两个操作数都为 0 的情况下。 - Cris Luengo