OpenCV Clustering Bag of Words K-Средства

С помощью 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],

Зачем?

Я не могу найти так много о том, как все это на самом деле работает, а просто о том, где это поставить и какие ценности дать.

1

Решение

Результат всегда должен быть [n x 15] если у вас есть n изображения и k=15,

Но в первом запуске вы посмотрели на вокабулярный, не особенность представления первых изображений. 128 вы видите, что есть размерность SIFT; это 15 «типичных» SIFT-векторов; они не являются описаниями ваших изображений.

Вы необходимость читать о модели BoW, и почему результат должен быть вектор длины k (потенциально разреженный, то есть со многими нулями) для каждого изображения. У меня сложилось впечатление, что вы ожидаете, что этот подход создаст один 128-мерный вектор объектов для каждого изображения. Кроме того, k = 15, вероятно, слишком мало; и набор обучающих данных также слишком мал.

1

Другие решения