【发布时间】:2013-07-17 17:11:34
【问题描述】:
我使用 kmean 函数将 8-D 向量聚类为一组簇:
kmeans(Vectors, clusterCount, labels, TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 100, 2), 10, KMEANS_PP_CENTERS, centers);
对我来说,最成功的集群是包含更多向量的集群。所以我的问题是如何找到人口最多的集群? label param是每个向量所属的指标,我感觉如果用它来找频率会消耗时间。 有没有人可以提出一个想法?
传统上,我执行以下任务:
int max = -1;int index = -1;
vector<int> classes;
classes.resize(clusterCount);
for (int i=0;i<labels.rows;i++)
{
int idx = labels.at<int>(i,0);
classes[idx]++;
if (classes[idx] > max)
{
max = classes[idx];
index = idx;
}
}
有没有比这更快的解决方案?
【问题讨论】:
-
你们有多少样品?即使您有数百万个样本,也不会花费太多时间来找到最频繁的样本。
标签: c++ performance opencv cluster-analysis k-means