2016-03-24 51 views
0

我想使用一個數組作爲k均值算法的輸入。該數組具有x和y方向的位移值,並且是Lucas Kanade光流估計的結果。代碼如下:如何在kmeans之後顯示聚集圖像?

編輯:

int number_of_features=150; 
// Lucas Kanade optical flow 
cvCalcOpticalFlowPyrLK(frame1_1C,frame2_1C,pyramid1,pyramid2,frame1_features,frame2_features,number_of_features,optical_flow_window, 5,optical_flow_found_feature, optical_flow_feature_error,optical_flow_termination_criteria, 0); 

float Dx[150],Dy[150]; // displacement matrices 
float Dis[150][2]; // total displacement matrix 

int K=2; // clusters selected 
Mat bestLabels, centers; 

for(int i = 0; i < number_of_features; i++) 
{ 
CvPoint p,q; 
p.x = (int) frame1_features[i].x; 
p.y = (int) frame1_features[i].y; 
q.x = (int) frame2_features[i].x; 
q.y = (int) frame2_features[i].y; 

//displacements 
Dx[i]=p.x-q.x; 
Dy[i]=p.y-q.y; 

Dis[i][0] = Dx[i]; 
Dis[i][1] = Dy[i]; 

} 


// k means algorithm 


// Creating Mat for Input data 
cv::Mat flt_Dis(150, 2, CV_32F, Dis); 

cv::kmeans(flt_Dis, K, bestLabels,TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0),3, KMEANS_PP_CENTERS, centers); 

我已經解決了我以前的問題,現在我要顯示的圖像集羣。我猜bestLabels存儲每個元素的索引,例如如果它被歸類爲第0或第1類。我對嗎 ??我如何顯示聚集圖像?

+0

如果您想得到幫助,請花費更多時間格式化代碼並提供有關您問題的所有信息。什麼是'cv :: kmeans'? 'cvCalcOpticalFlowPyrLK'?等 – norisknofun

+0

我認爲有圖像處理經驗的人可以理解。 cv :: kmeans是算法kmeans和cvCalcOpticalFlowPyrLK是使用Lucas Kanade方法估計稀疏點集上的光流的函數。 –

+0

不,你不能。只是將您的矩陣轉換爲「matrix.convertTo(flt_matrix,CV_32F)」的浮動類型,並使用該 – Miki

回答

0

K-means 可以可以是實施可以使用整數。你只需要這樣做。

雖然結果不會是整數。

+0

你的意思是像上面提出的那樣? –

+1

不,註釋中的建議是將數據轉換爲浮點數,然後運行cv :: kmeans。我的建議是編寫'yourown :: integerkmeans'。 –

+0

您能否解釋我在上面的代碼中出了什麼問題? –

相關問題