使用SIFT Detector
和Extractor
,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);
“集群提取的关键点”的数组大小将显示为[128 x 15]
。
然后在另一组15张图片上使用BOWImgDescriptorExtractor
作为Extractor
时,如果先前提取的数组为Vocabulary
,则数组会出现在[15 x 15]
为什么?
我无法找到这一切实际上如何运作的内容,而不仅仅是把它放在哪里以及给予什么价值。
答案 0 :(得分:1)
如果您有[n x 15]
张图片和n
,则结果应始终为k=15
。
但是在第一次运行中,您查看了词汇表,而不是第一批图像的要素表示。您看到的128
是SIFT维度;这些是15“典型”SIFT向量;它们不是您图像的描述。
你需要来阅读BoW模型,以及为什么结果应该是每个图像的长度为k
(可能是稀疏的,即有很多0)的向量。我有这样的印象,你希望这种方法为每个图像生成一个128维特征向量。另外,k = 15可能太小了;并且训练数据集也太小了。