在opencv中使用flann进行分层聚类

时间:2013-03-21 13:31:15

标签: opencv hierarchical-clustering

我正在尝试使用opencv 2.4.2中的方法hierarchicalClustering。

它没有错误地工作,但问题是,我不承认它接受的参数,例如。分支...

而且我觉得我的问题始终只是一个集群。

我的输入是一个cv :: Mat的LBPH特征(用于面部检测)行数为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));

1 个答案:

答案 0 :(得分: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):

  • 要聚集的点
  • 计算出的聚类中心。 Matrix应该预先分配,centers.rows是请求的集群数。
  • 群集参数
  • 用于群集的距离

因此,如果您总是获得一个群集,则可能意味着您的centroids矩阵只有一行。你能核实一下吗?

KMeansIndexParams的参数是(根据kmeans_index.h):

  • 分支因子:树中节点的子节点数
  • 迭代:在一个kmeans聚类中执行的最大迭代次数(kmeans树)
  • centers_init:用于为kmeans树选择初始聚类中心的算法
  • cb_index:集群边界索引。在搜索kmeans树时使用