2013-07-02 79 views
0

我想先生成一些2D頻域係數,然後使用ifft生成紋理,以生成2D紋理。爲了計算法線貼圖,我想採用這個2D函數的導數。我只是想知道如果下面是正確的:使用ifft計算函數的導數

in 1D I would just do a loop for (k = 0; k < N, k++) coefficients[k] *= i * k; where i is sqrt(-1) 
in 2D I should do this? for (m=0;m<N;m++) for (n=0;n<N;n++) coefficients[m,n] *= (i*m)*(i*n) -> -m*n; 

回答

0

對於2D中,「衍生物」是2D梯度矢量,其分量是,在空間域中,偏導數w.r.t.協調軸(通常表示爲x和y)。所以,對於一個軸,您將執行coefficients[m,n] *= i*m,對另一個軸執行coefficients[m,n] *= i*n。您將對這兩者應用逆2D fft,以獲得偏導數d/dx和偏導數d/dy的圖像。正常將然後是向長度1歸一化的矢量(d/dx,d/dy,-1)。

+0

所以你應該說我應該創建2組係數並對它們運行2個單獨的1D ifft? – jz87

+0

不是。對他們每個人來說,你都會申請2d ifft。此信息添加回答。 – ondrejdee

+0

你的意思是係數[m,n] * = i * n? – jz87