3

在此处输入图像描述在此处输入图像描述在此处输入图像描述这个问题有点宽泛。

这是我所做的:

我有一种应用 fft 的方法。我不打算发布它,因为它是否正确并不是这里的重点。

我通过该方法运行一个图像,然后尝试显示两个相同大小的图像,一个用于实部,一个用于虚部。

这似乎工作正常,除了我的方法产生的灰度值通常远大于 255,因此我不确定我看到的是什么。

然后我获取原始结果(不是我显示的任何像素值,因为我假设它们以某种方式被修改以适应 0 到 255 之间)并通过与以前相同的方法运行它,但通过符号更改来实现 ifft。

然后我也尝试显示它。同样,原始值在大多数情况下都远大于 255。

我的问题归结为:a.) 我是否必须对 fft 进行一些缩放以使其适合 0 到 255 之间?b.) 当我做 ifft 时,我是否必须反转这个缩放比例?c.) 在我申请 ifft 之前,我必须在 fft 上做任何翻译吗?

c部分源于我已经阅读了一些关于将fft的角落居中的内容,但我不确定这意味着什么。

一个较小的问题,d 部分,如果我通过首先将 1d fft 应用到所有行然后再应用到所有列来在原始图像上应用 2d fft,我是否需要以相同的顺序应用 ifft 或我需要颠倒顺序吗?

我想这就是现在的全部。我一直在寻找答案,但似乎找不到太多,因此不胜感激。

编辑:我添加了一些图片,也许它们会有所帮助。第一个是原始图像,第二个是我的 fft 方法(幅度和虚部)的结果,第三个是中间图像上的 ifft 的结果。

EDIT2:将图像更新为来自较新方法的图像。

4

2 回答 2

3

人们通常不会发现分开查看实部和虚部很有用,而是查看幅度,可能还有相位,但通常只查看幅度。

a) 通常,是的,无论您正在查看哪些组件,您都需要应用缩放。图像的总功率和它的 FFT 之间存在比例关系,而不是单个分量。此外,您经常想做一些事情,比如记录数据的日志,或者忽略零分量等,所以最好自己进行缩放。

b)在a部分,您应该进行缩放以进行可视化,而不是缩放实际的 FFT。您应该采用原始 FFT 的 IFFT。

c) 根据您的 FFT 例程,您可能需要除以 2pi 或样本中的点数,但这取决于您的 FFT 例程的工作方式。文档应该澄清这一点。首先,看看你开始和结束之间是否有 2pi 的因子。

于 2012-12-19T18:14:27.693 回答
0

回答你的四个问题:

一个。您是否必须缩放 FFT 的结果才能查看它们?是的。您需要取幅值,然后缩小到 0 到 255 之间的值。

湾。您是否必须在 IFFT 之前反向缩放。仅当您想查看 FFT 的结果时才回答 A。您不能 IFFT 缩放数字。使用原始数字。

C。在 FFT 和 IFFT 之间进行转换?不。

d。FFT 期间 Row 与 Col 的顺序是否重要?不,FFT 的结果是一组实数和虚数。这是一个确定性的结果。您可以按任意顺序进行 IFFT。

您可能遇到的关键方面之一是数学和可视化之间的差异。IFFT 适用于浮点数或双实数和虚数。图像需要 0 到 255 之间的整数。您必须在代码中处理此转换。您表示您认为它已“以某种方式修改”。自己执行此转换更安全。

最后同上tom10的答案。您可能需要缩放 IFFT 的结果。这取决于 FFT 和 IFFT 的实现。

于 2012-12-23T14:48:31.067 回答