我试图在Python中实现一些将图像转换为傅里叶域的函数,反之亦然,用于图像处理任务。
我使用重复的1D-DFT实现2D-DFT,并且它工作正常,但是当我尝试使用重复的逆1D-DFT实现2D逆DFT时,出现了一些奇怪的问题:当我将图像转换为其傅立叶域时然后回到图像域,看起来图像被反射并与其反射合并,如下所示:
这是输入:
这是输出
这是造成混乱的函数:
def IDFT2(fourier_image):
image = np.zeros(fourier_image.shape)
for col in range(image.shape[1]):
image[:, col] = IDFT1(fourier_image[:, col])
for row in range(image.shape[0]):
image[row, :] = IDFT1(image[row,:])
return image
我做错了什么?我很确定IDFT1工作正常,常规2D-DFT也是如此。
答案 0 :(得分:3)
我不使用 Python ,所以我没有信心分析你的代码,但我敢打赌,你很可能忘记在某个阶段实现复杂的价值......
它应该是:
如果您在第二次传递(子弹#2,#6 )中仅使用真实到复杂的域 DFT / iDFT ,那么它将创建镜像,因为 DFT 的实际值是一个镜像序列......顺便说一句。如果你先处理行或列也没关系...你也可以先在 DFT 中处理行,然后在 iDFT 中先处理列,结果应该相同+/-浮动错误...
了解更多信息,请参阅
以及所有子链接,特别是2D FFT and wrapping example
,以便您可以将结果与工作内容进行比较