我目前正试图通过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
答案 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中的原始数据。
希望有所帮助:)