2011-11-25 52 views
1

我看到有关于此主题的post,但没有任何回复。
如何编写对给定图像f执行2D快速傅立叶变换的函数?
对于某些整数m和n,可以假设宽度= 2^m,高度= 2^n,并且输入图像已经正确填充。
输入:的F - 在复杂的数字表示的2D图像
输出:的F - 的变换系数,也代表了复数如何在C++中执行2D快速傅里叶变换

void FFT2D(Complex<double> *f, Complex<double> *F, int width, int height) 
{ 

} 

大家谁认为我要你给它编程我:
我不知道。只是想这个应该怎么工作

+0

没有做某事的实验,不能做这项工作。 – user990635

+3

这不是问题,而是免费工作的要求。 –

+0

我没有要求给我写信。只是为了给我一些指导,说明如何在逻辑上做到这一点 – user990635

回答

3

可以使用FFTW library进行一些这方面的理论解释:

#include <fftw.h> 

void FFT2D(Complex<double> *f, Complex<double> *F, int width, int height){ 
    fftw_plan p = fftw_plan_dft_2d(width, height, f, F, FFTW_FORWARD, FFTW_ESTIMATE);    
    fftw_execute(p); 
    fftw_destroy_plan(p); 
} 
+0

我不明白答案...你能解释一下我应该有的步骤吗?例如,实际上是什么fftw_forward和fftw_estimate – user990635

+2

而不是编写自己的FFT,最好使用FFT库。 FFTW是最容易使用的。参见http://fftw.org/和http://fftw.org/fftw3_doc/Complex-One_002dDimensional-DFTs.html#Complex-One_002dDimensional-DFTs举例 –

3

我怀疑任何人的打算写一个FFT实现你。这是不平凡和耗时(你也没有显示出努力)。

你明白它背后的数学吗?如果你理解它背后的数学,你需要看看各种FFT算法(Cooley Tukey想到)并简单地实现它们。此外,这听起来像一个家庭作业问题。

不过既然你问,这里是一个C实现谷歌的DFT和FFT礼貌的:http://paulbourke.net/miscellaneous/dft/

PS:你想要写一个A *的实现?

+1

@Nicol - Lmao,我写了'Turkey'(哎呀! )大家感恩节快乐! –