С помощью 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);
размер массива Clustered Extracted Keypoints будет выглядеть как [128 x 15]
,
Затем при использовании BOWImgDescriptorExtractor
как Extractor
на другом наборе из 15 изображений, с ранее извлеченным массивом в качестве его Vocabulary
, массив выходит в [15 x 15]
,
Зачем?
Я не могу найти так много о том, как все это на самом деле работает, а просто о том, где это поставить и какие ценности дать.
Результат всегда должен быть [n x 15]
если у вас есть n
изображения и k=15
,
Но в первом запуске вы посмотрели на вокабулярный, не особенность представления первых изображений. 128
вы видите, что есть размерность SIFT; это 15 «типичных» SIFT-векторов; они не являются описаниями ваших изображений.
Вы необходимость читать о модели BoW, и почему результат должен быть вектор длины k
(потенциально разреженный, то есть со многими нулями) для каждого изображения. У меня сложилось впечатление, что вы ожидаете, что этот подход создаст один 128-мерный вектор объектов для каждого изображения. Кроме того, k = 15, вероятно, слишком мало; и набор обучающих данных также слишком мал.