2013-03-21 66 views
3

我正嘗試使用opencv 2.4.2中的hierarchicalClustering方法。在opencv中使用flann的層次聚類

它工作沒有錯誤,但問題是,我不承擔它接受例如參數。分支......

而且我認爲這會導致我的問題,我總是隻有一個羣集。

我的輸入是LBPH功能的cv :: Mat(用於面部檢測),行數是12,列數是6272. 無論分支因子的值是什麼,我總是得到一個簇,質心是來自輸入矩陣grouppeed_one_ferson_features的行的平均值。 你能建議嗎?

謝謝!

繼承人的代碼:

cv::Mat groupped_one_person_features; 
.... // fill grouppeed_one_ferson_features with data 
int Nclusters=50; 
cv::Mat centroids (Nclusters,Features.data[0][0].cols,CV_32FC1); 
int count = cv::flann::hierarchicalClustering<cvflann::L1<float>>groupped_one_person_features,centroids,cvflann::KMeansIndexParams(2000,11,cvflann::FLANN_CENTERS_KMEANSPP)); 

回答

3

首先,你在最後一行錯過了一個括號:

int count = cv::flann::hierarchicalClustering<cvflann::L1<float>>(groupped_one_person_features,centroids,cvflann::KMeansIndexParams(2000,11,cvflann::FLANN_CENTERS_KMEANSPP)); 

在該命令,參數(根據flann_base.hpp):

  • 要聚集的點
  • 計算出的聚類中心。矩陣應該預先分配,而centers.rows是請求的集羣數量。
  • 聚類參數
  • 的距離要用於羣集

因此,如果你總是得到一個集羣,這可能意味着你的centroids矩陣只有一行。你能證實這一點嗎?

KMeansIndexParams的參數(按照kmeans_index.h):

  • 分支因子:樹中的一個節點
  • 迭代孩子的數量:最大迭代以在一個k均值聚類執行(k均值樹)
  • centers_init:用於挑選kmeans樹的初始聚類中心的算法
  • cb_index:聚類邊界索引。在搜索kmeans樹時使用
+1

這個參數的含義可以很容易地從文檔中讀取。你可能真的知道這些參數是什麼意思,即改變它們會導致什麼樣的行爲? – penelope 2014-11-20 10:38:41