【问题标题】:opencv kmeans doesn't classify data in some classesopencv kmeans 不对某些类中的数据进行分类
【发布时间】:2013-07-27 13:37:59
【问题描述】:

我正在尝试实现 Scalable Recognition with a Vocabulary Tree ,并且我正在使用 opencv kmeans 函数对特征向量进行聚类,因此我将所有向量放在一个 Mat 对象中并将其传递给函数,如下所示:

TermCriteria criteria;
criteria.epsilon = 0.1;
int attempts = 1;
int flags = KMEANS_RANDOM_CENTERS;
int K = 10;
Mat Centers;
Mat Labels;

kmeans(descriptors, K, Labels, criteria, attempts, flags, Centers);

所以在函数中填充“Centers”和“Labels”Mat 对象,如下所示:

Centers has K rows, 64 columns (I'm using SURF features) and one channel

Labels has as many rows as "descriptors", one column and one channel and it's values are in the range of [0 K-1]

这些是我检查过的。在对所有向量执行此操作后,我将具有相同标签的向量复制到新 Mat 并再次将其传递给函数。

我的问题是,有时 [0 k-1] 范围内的值之一在“标签”中丢失,因此没有一个特征向量被分类到该集群中。我已经检查了它是否有不同的 K,它通常在某个级别至少发生一次(但从不在第一次调用中)。即使 K = 3。

我假设在那些时候我传递给函数的数据是不正确的。所以我的问题是,什么时候会发生这种情况?我应该对传递给函数的数据进行哪些检查以确保它们有效?

另外,如果你有任何好的论文实现的链接,如果你在这里发布,我将不胜感激。

【问题讨论】:

    标签: opencv k-means


    【解决方案1】:

    事实证明,有时某些集群中的成员数量少于 K,因此在下一个级别中,该函数会返回错误。虽然我还没有弄清楚为什么有时一个集群是空的。

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2016-05-11
      • 2020-02-25
      • 2012-02-18
      • 2013-03-30
      • 2020-12-14
      • 2011-12-08
      • 2012-03-17
      • 2018-08-13
      相关资源
      最近更新 更多