使用一维变换实现二维傅里叶逆变换
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 所以我没有信心分析您的代码,但我敢打赌您很可能会在某个阶段忘记实现复数值。 ...
应该是:
- DFT 行从实域到复域
- DFT 从复杂域到复杂域的结果列
- 如果需要应用规范化
- 任何或none 正在处理...
- iDFT 行从复杂域到复杂域
- iDFT 从复域到实域的结果列
- 如果需要应用规范化
如果您在第二遍中仅使用实域到复域 DFT/iDFT(项目符号 #2、#6)然后它会创建镜像,因为真实值的 DFT 是一个镜像序列......顺便说一句。如果您先处理行或列并不重要...您也可以先在 DFT 中处理行,在 iDFT 中先处理列结果应该相同的 +/- 浮动错误 ...
有关详细信息,请参阅
- How to compute Discrete Fourier Transform?
以及那里的所有子链接,尤其是 2D FFT and wrapping example
,因此您可以将您的结果与有效的结果进行比较
我正在尝试在 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 所以我没有信心分析您的代码,但我敢打赌您很可能会在某个阶段忘记实现复数值。 ...
应该是:
- DFT 行从实域到复域
- DFT 从复杂域到复杂域的结果列
- 如果需要应用规范化
- 任何或none 正在处理...
- iDFT 行从复杂域到复杂域
- iDFT 从复域到实域的结果列
- 如果需要应用规范化
如果您在第二遍中仅使用实域到复域 DFT/iDFT(项目符号 #2、#6)然后它会创建镜像,因为真实值的 DFT 是一个镜像序列......顺便说一句。如果您先处理行或列并不重要...您也可以先在 DFT 中处理行,在 iDFT 中先处理列结果应该相同的 +/- 浮动错误 ...
有关详细信息,请参阅
- How to compute Discrete Fourier Transform?
以及那里的所有子链接,尤其是 2D FFT and wrapping example
,因此您可以将您的结果与有效的结果进行比较