二维FFTW帮助

时间:2011-03-16 17:27:29

标签: image-processing fft fftw

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

要使用此功能,我将图像数据线性化为数组并调用上述功能(详见下文)

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

2 个答案:

答案 0 :(得分:5)

2D FFT相当于在一次通过中对图像的每一行应用一维FFT,然后在第一次通过的输出的所有列上进行一维FFT。

2D FFT的输出就像1D FFT的输出一样,只是你在x,y维度上只有一个维度,而不是一个维度。空间频率随着x和y指数的增加而增加。

FFTW手册(here)中有一节介绍了实际到复杂的2D FFT输出数据的组织,假设你正在使用它。

答案 1 :(得分: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中的原始数据。

希望有所帮助:)