2014-09-29 52 views
0

我想要求質心的座標,並且我已經計算了DFT(用於不同的目的)。我看過一些幻燈片,暗示可以通過查看矩陣的第一個值來粗略估計質心。 的代碼是基於:http://docs.opencv.org/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html使用dft粗略估計質心

cv::dft(complexI, complexI); 
// compute the magnitude and switch to logarithmic scale 
// => log(1 + sqrt(Re(DFT(I))^2 + Im(DFT(I))^2)) 
cv::split(complexI, planes); // planes[0] = Re(DFT(I), planes[1] = Im(DFT(I)) 
double x = (double)planes[0].at<int>(0,0)/INT_MAX; 
double y = ABS(((double)planes[1].at<int>(0,0)/INT_MAX)); 

但每次的y值變爲0時的x值似乎正確,但。我錯過了什麼嗎?

+0

我不確定你的輸入,輸出和預期輸出是什麼。如果你拼出來,它可能會有所幫助。另外:在C++中,你可以使用C++風格轉換而不是C風格轉換。例如。 double myDouble = static_cast (myInteger); 我認爲這將有助於可讀性。 – m24p 2014-09-29 15:43:51

+0

您是指「光譜質心」:http://en.wikipedia.org/wiki/Spectral_centroid? – 2014-09-30 07:32:13

+1

飛機[0] .at 應該是plane [0] .at (或double。請檢查飛機[0] .type()) – berak 2014-09-30 07:34:41

回答

1

這通常使用moments來完成。