2

我正在尝试使用 opencv 2.4.2 中的分层聚类方法。

它可以正常工作,但问题是,我不了解它接受的参数,例如。分枝...

而且我认为我的问题是我总是只有一个集群。

我的输入是一个 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));
4

1 回答 1

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):

  • 分支因子:树中节点的子节点数
  • 迭代次数:在一个 kmeans 聚类(kmeans 树)中执行的最大迭代次数
  • center_init:用于为 kmeans 树挑选初始聚类中心的算法
  • cb_index:簇边界索引。在搜索 kmeans 树时使用
于 2013-04-10T12:49:03.337 回答