C ++ / OpenCV — Как я могу получить свое изображение после использования flann :: index? (С BoF)

Я использую BoW с SURF и FlannBasedMatcher для поиска изображений в базе данных.
Я извлек все свои функции из своей базы данных (Обучение), используя SURF, затем я построил словарь и, наконец, я получил гистограммы частоты BOF для каждого изображения в моей базе данных (обучение).

чтобы быть ясным, я не помещаю детали всего этого процесса, но скажите мне, если вам нужны некоторые детали.

Итак, на этом этапе у меня есть:

  • cv :: Mat allDescriptors —> дескрипторы всей моей базы данных (обучение)

  • cv :: Mat Vocabulary —> представление кодовой книги

  • cv :: Mat responseDatabase —> частотные гистограммы для каждой картинки в моей базе данных

Затем я использовал запрос и вычислил его ответ в соответствии со словарем, вычисленным ранее.
Наконец у меня есть эти данные:

  • cv :: Mat responseQuery —> частотная гистограмма моего запроса

Теперь у меня есть некоторые трудности.
я использовал

 cv::flann::Index flannIndex(responseDatabase, cv::flann::KDTreeIndexParams(), cvflann::FLANN_DIST_EUCLIDEAN);
cv::Mat results, dists;
int k=2;
flannIndex.knnSearch(responseQuery, results, dists, k, cv::flann::SearchParams() );

Это сработало хорошо, и я получил следующие результаты:

  • cv :: Mat результаты -> [38, 117] —
  • cv :: Mat dist -> [0.0010655867, 0.013091294]

Но теперь с этими результатами, как я могу восстановить две картины, соответствующие моим 2 ближайшим соседям?
Действительно, у меня нет никаких следов фотографий внутри каждой из моих данных.

Может быть, я пропустил один шаг, но какой?

Поблагодарить

2

Решение

Я решил это, но я не знаю, было ли это лучшим способом.

После вычисления каждого изображения вот так:

bowide.compute(img,keypoints,responseHist);

я сохранил картинки в большом векторе и поэтому могу загрузить их для соответствия.

  vectorImg.push_back(img);

Проблема в том, что мне нужно сохранить имя каждого изображения в текстовом файле, а затем прочитать текстовый файл во время сопоставления. (чтобы загрузить их)
Действительно, вычисление BoWFeature для каждого изображения в базе данных выполняется только один раз, и я не хочу запускать один и тот же процесс каждый раз, когда мне хотелось бы сравнить запрос с базой данных. Так что, как только моя база данных обучена, я могу выполнить сопоставление только потому, что у меня в текстовом файле есть все мои изображения с индексом.

0

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


По вопросам рекламы [email protected]