【问题标题】:Two Dimensional FFTW Help二维 FFTW 帮助
【发布时间】:2011-03-16 17:27:29
【问题描述】:

我目前正在尝试通过fftw_plan_dft_2d 计算图像的 fft。

为了使用这个函数,我将图像数据线性化到一个 in 数组中并调用上面提到的函数(详细如下)

ftw_plan fftw_plan_dft_2d(int n0, int n1,
                            fftw_complex *in, fftw_complex *out,
                            int sign, unsigned flags);

func 修改一个复数数组 out,其大小等于原始图像中的像素数。

您知道这是否是计算图像 2D FFT 的正确方法吗?如果是这样,out里面的数据代表什么? IE 数组中的高频值和低频值在哪里?

谢谢, djs22

【问题讨论】:

    标签: image-processing fft fftw


    【解决方案1】:

    2D FFT 相当于一次对图像的每一行应用 1D FFT,然后对第一次输出的所有列进行 1D FFT。

    2D FFT 的输出与 1D FFT 的输出一样,只是在 x、y 维度上具有复杂的量值,而不仅仅是一个维度。正如预期的那样,空间频率随着 x 和 y 索引的增加而增加。

    FFTW 手册 (here) 中有一节介绍了实到复 2D FFT 输出数据的组织,假设您使用的是该部分。

    【讨论】:

    • 感谢您的回答。我遇到的问题是这个 2D FFT 返回一个 1D 数组。将其重新配置为适当大小的二维数组很容易,但我仍然不太确定如何处理数据。
      我很确定这意味着我的最低频率内容将位于左上角,而较高频率的内容将位于右下角?
      关于手册中的部分;正如你所说,这明确适用于真实到复杂的功能,但不幸的是我正在使用 fftw_plan_dft_2d。
    • @djs22:好的 - 数组并不是真正的一维数组,它是 n0 x n1 在行主要顺序中 - 请参阅 FFTW 手册的第 2.2 节。
    【解决方案2】:

    是的。 尝试计算 2 个计划:

    plan1 = fftw_plan_dft_2d(image->rows, image->cols, in, fft, FFTW_FORWARD, FFTW_ESTIMATE); 
    plan2 = fftw_plan_dft_2d(image->rows, image->cols, fft, ifft, FFTW_BACKWARD, FFTW_ESTIMATE);
    

    您将在ifft中获得原始数据。

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多