首先,不需要在执行IFFT之前就将FFT的结果移回去。这只是大量的转移,对结果没有影响。无论您是否同时移动两个数组,两个数组的乘积都以相同的方式发生。
您在输出中注意到的问题是四个象限已交换。发生这种情况的原因是因为滤波器的大小偏移了一半,导致输出发生了相同的偏移。
为什么要转移?好吧,因为FFT将原点放在图像的左上角。这不仅对于FFT的输出如此,对于其输入也是如此。因此,您需要生成一个内核,其起源在左上角。怎么样?只需
在 致电 之前 申请
ifftshift即可: __
fft
freq = fp.fft2(im)freq_kernel = fp.fft2(fp.ifftshift(kernel))convolved = freq*freq_kernelim_out = fp.ifft2(convolved).real
请注意,
ifftshift将原点从中心移到左上角,而
fftshift将原点从角移到中心。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)