使用一维变换实现二维傅里叶逆变换

Implementing 2D inverse fourier transform using 1D transforms

我正在尝试在 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 也是如此。

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

应该是:

  1. DFT 行从实域到复域
  2. DFT 从复杂域到复杂域的结果列
  3. 如果需要应用规范化
  4. 任何或none 正在处理...
  5. iDFT 行从复杂域到复杂域
  6. iDFT 从复域到实域的结果列
  7. 如果需要应用规范化

如果您在第二遍中仅使用实域到复域 DFT/iDFT(项目符号 #2、#6)然后它会创建镜像,因为真实值的 DFT 是一个镜像序列......顺便说一句。如果您先处理行或列并不重要...您也可以先在 DFT 中处理行,在 iDFT 中先处理列结果应该相同的 +/- 浮动错误 ...

有关详细信息,请参阅

  • How to compute Discrete Fourier Transform?

以及那里的所有子链接,尤其是 2D FFT and wrapping example,因此您可以将您的结果与有效的结果进行比较