c++ - OpenCV 聚类词袋 K-Means

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

使用 SIFT DetectorExtractor,使用 FlannBased Matcher,并为 设置 Dictionary >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);

Clustered Extracted Keypoints 的数组大小将显示为 [128 x 15]

然后,当使用 BOWImgDescriptorExtractor 作为 Extractor 对一组不同的 15 张图像进行处理时,将先前提取的数组作为其 Vocabulary,数组出现在 [15 x 15]

为什么?

我找不到太多关于这一切实际如何运作的信息,而只是将它放在哪里以及赋予什么值(value)。

最佳答案

如果您有 n 个图像且 k=15,结果应始终为 [n x 15]

但在第一次运行中,您查看的是词汇,而不是第一张图像的特征表示。您看到的 128 是 SIFT 维度;这些是 15 个“典型”SIFT vector ;它们不是您图片的描述。

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

关于c++ - OpenCV 聚类词袋 K-Means,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508947/

相关文章:

c++ - 重载 '==' 会让你得到 '!=' 吗?

c++ - 尝试使用 sfinae 重载时不必要的 bool 重载替换

r - 如何从不同(戴安娜,簇R包)输出中获得最佳簇数?

c++ - Boost 1_52 构建 VS2012 失败

C++ 重载 : operator+ for adding Matrices by element

c++ - opencv 中的 StereoBM 类是否对输入图像或帧进行校正?

c++ - Sobel 的梯度是什么意思?

c++ - 如何使用 opencv 保存包含多个直方图的文件?

cluster-analysis - k-均值聚类误差会增加吗?

python - 重新排序矩阵元素以反射(reflect)朴素python中的列和行聚类