使用1D变换实现2D逆傅里叶变换

时间:2016-11-25 23:33:57

标签: python numpy image-processing fft

我试图在Python中实现一些将图像转换为傅里叶域的函数,反之亦然,用于图像处理任务。

我使用重复的1D-DFT实现2D-DFT,并且它工作正常,但是当我尝试使用重复的逆1D-DFT实现2D逆DFT时,出现了一些奇怪的问题:当我将图像转换为其傅立叶域时然后回到图像域,看起来图像被反射并与其反射合并,如下所示:

这是输入:

img

这是输出

img

这是造成混乱的函数:

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也是如此。

1 个答案:

答案 0 :(得分:3)

我不使用 Python ,所以我没有信心分析你的代码,但我敢打赌,你很可能忘记在某个阶段实现复杂的价值......

它应该是:

  1. DFT 从真实域到复杂域的行
  2. DFT 从复杂域到复杂域的结果列
  3. 如果需要,应用规范化
  4. 任何或不处理......
  5. iDFT 从复杂域到复杂域的行
  6. iDFT 从复杂到真实域的结果列
  7. 如果需要,应用规范化
  8. 如果您在第二次传递(子弹#2,#6 )中仅使用真实到复杂的域 DFT / iDFT ,那么它将创建镜像,因为 DFT 的实际值是一个镜像序列......顺便说一句。如果你先处理行或列也没关系...你也可以先在 DFT 中处理行,然后在 iDFT 中先处理列,结果应该相同+/-浮动错误...

    了解更多信息,请参阅

    以及所有子链接,特别是2D FFT and wrapping example,以便您可以将结果与工作内容进行比较