4

我目前正在尝试通过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 数组中的高频值和低频值在哪里?

谢谢, DJ22

4

2 回答 2

6

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

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

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

于 2011-03-16T18:19:35.867 回答
0

这是。尝试计算 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 中获得原始数据。

希望能帮助到你 :)

于 2012-05-19T22:40:11.437 回答