适合初学者的离散傅里叶变换

信息处理 图像处理 自由度 C
2022-01-30 11:38:39

我想制作讨论同态滤波器的图像处理程序。但是当我阅读一些文章时,我无法理解。也许任何人都可以帮助它。我非常需要这个。对不起我的英语。

  1. 我通过离散傅里叶变换将空间域图像更改为频域。对?公式正向 DFT:

    • M和N是什么?图片的宽度和高度?
    • 然后,正向公式的输出,实部和虚部?像“a+bj”?
  2. 当我尝试用公式对傅里叶变换进行逆时:

    • F(u,v) 是正向 dft 的结果吗?但它有两部分真实和虚构?如果,F(u,v) = (a+bj) 和结果欧拉定理 e^... = cos(x)+j sin(x)。

      所以,F(u,v).e^... = (a+bj).( cos(x)+j sin(x) ) = a.cos(x) + j(a.sin(x) + b.cos(x)) - b.sin(x)

    我的方程式正确吗?

    • 又是反实部和虚部的结果?因为有“j”。
    • 我怎样才能得到我的原始图像?拍真实的部分,只是让我的形象变得模糊

THX 回复..

2个回答
  1. 是的,m 和 n 是图像的尺寸。F(u,v) 将是 u 和 v 的复值(实部和虚部)函数。

  2. 是的,您的方程式是正确的,并且 F(u,v) 是前向 DFT 的结果。F(u,v) 具有实部和虚部是正确的,将其乘以复数正弦曲线将得到一个同时具有实部和虚部的量。

那么,如果 u 和 v 的总和中的每个数字都是复数,那么如何取回真正有价值的图像呢?关键是 F(u,v) 具有一定的对称性,因为 f(i,k) 是实值。这种对称性导致 u 和 v 的总和为实数。

一维 DFT 也会发生同样的事情。在这种情况下,实值信号 f(t) 产生共轭对称 DFT F(u) (F(u) = F*(Nu))。2D 中的对称性稍微复杂一些,但这就是解决问题的原因。

我经常看到学生操纵 DFT 系数并意外破坏共轭对称性。然后,当他们采用逆 DFT 时,结果是复值,而应该是实值。

请注意,即使正确保留了对称性,数值误差有时也会产生具有非常小的虚部的逆 DFT。在这些情况下,最好只取实部作为结果。

是的,离散傅里叶变换 (DFT) 通常用于将空间域图像转换为频域图像。通常这是使用沿原始图像的每一行独立应用的一维快速傅立叶变换 FFT 来实现的,以产生中间图像,然后沿中间图像的每一列独立应用一维 FFT 以产生频域图像。FFT 和逆 FFT 给出的结果与您编写的方程完全相同,但执行速度要快得多。

是的,复数乘法正如你所说的那样工作,

F(u,v)。e^(jx) = (a+bj) 。(cos x + j sin x) = (a cos x - b sin x) + j( a sin x + b cos x)

传统上,我们重新排列频域图像,使频域图像的零频 bin 位于该图像的中间(“居中格式”)。

有时,一个人对某些图像进行傅里叶变换后会立即丢弃一半的数据,只取实部或只取绝对值。这会丢弃一半的信息——以后任何尝试通过对实部(或绝对值)进行傅里叶逆变换来恢复图像的尝试只会产生很大的模糊。

正如 Barry Van Veen 所指出的,如果你同时保留实部和虚部,你会发现每个实值图像都会产生在频率空间中具有一定对称性的频域图像。(此外,您会发现,即使您可能从值从 0 到 255 的黑白图像开始,但频域图像通常同时具有正负实值、正负虚值以及具有幅度的值成千上万)。正如他还指出的那样,如果您在进行过滤时保持这种对称性,那么当您进行逆变换时,结果应该再次非常接近真实值——通常只取实部作为结果是可以的.

是的,F(u,v) 是前向 DFT 的结果。是的,对于每个整数 u 和每个整数 v,F(u,v) 是具有实部和虚部的 2 部分数,F(u,v) = (a+bj)。

您可能会发现以下相关链接:

您可能已经知道,大多数需要排序的程序员都使用标准的现成排序库,而不是从头开始精心制作另一个 sort() 例程。此外,大多数需要进行 DFT 的程序员都使用标准的现成 FFT 库。