OpenCV聚类袋词K-Means

时间:2014-12-16 16:09:38

标签: c++ opencv cluster-analysis k-means feature-extraction

使用SIFT DetectorExtractorFlannBased MatcherDictionary设置为BOWKMeansTrainer,如下所示:

TermCriteria termCrit(CV_TERMCRIT_ITER, 100, 0.001);
int dictionarySize = 15; // -- Same as number of images given in
int retries = 1;
int flags = KMEANS_PP_CENTERS;

BOWKMeansTrainer trainBowTrainer(dictionarySize, termCrit, retries, flags);

“集群提取的关键点”的数组大小将显示为[128 x 15]

然后在另一组15张图片上使用BOWImgDescriptorExtractor作为Extractor时,如果先前提取的数组为Vocabulary,则数组会出现在[15 x 15]

为什么?

我无法找到这一切实际上如何运作的内容,而不仅仅是把它放在哪里以及给予什么价值。

1 个答案:

答案 0 :(得分:1)

如果您有[n x 15]张图片和n,则结果应始终为k=15

但是在第一次运行中,您查看了词汇表,而不是第一批图像的要素表示。您看到的128是SIFT维度;这些是15“典型”SIFT向量;它们不是您图像的描述。

需要来阅读BoW模型,以及为什么结果应该是每个图像的长度为k(可能是稀疏的,即有很多0)的向量。我有这样的印象,你希望这种方法为每个图像生成一个128维特征向量。另外,k = 15可能太小了;并且训练数据集也太小了。