2011-11-25 88 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'(哎呀! )大家感恩節快樂! –