2013-03-21 128 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