Я использую BoW с SURF и FlannBasedMatcher для поиска изображений в базе данных.
Я извлек все свои функции из своей базы данных (Обучение), используя SURF, затем я построил словарь и, наконец, я получил гистограммы частоты BOF для каждого изображения в моей базе данных (обучение).
чтобы быть ясным, я не помещаю детали всего этого процесса, но скажите мне, если вам нужны некоторые детали.
Итак, на этом этапе у меня есть:
cv :: Mat allDescriptors —> дескрипторы всей моей базы данных (обучение)
cv :: Mat Vocabulary —> представление кодовой книги
cv :: Mat responseDatabase —> частотные гистограммы для каждой картинки в моей базе данных
Затем я использовал запрос и вычислил его ответ в соответствии со словарем, вычисленным ранее.
Наконец у меня есть эти данные:
Теперь у меня есть некоторые трудности.
я использовал
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() );
Это сработало хорошо, и я получил следующие результаты:
Но теперь с этими результатами, как я могу восстановить две картины, соответствующие моим 2 ближайшим соседям?
Действительно, у меня нет никаких следов фотографий внутри каждой из моих данных.
Может быть, я пропустил один шаг, но какой?
Поблагодарить
Я решил это, но я не знаю, было ли это лучшим способом.
После вычисления каждого изображения вот так:
bowide.compute(img,keypoints,responseHist);
я сохранил картинки в большом векторе и поэтому могу загрузить их для соответствия.
vectorImg.push_back(img);
Проблема в том, что мне нужно сохранить имя каждого изображения в текстовом файле, а затем прочитать текстовый файл во время сопоставления. (чтобы загрузить их)
Действительно, вычисление BoWFeature для каждого изображения в базе данных выполняется только один раз, и я не хочу запускать один и тот же процесс каждый раз, когда мне хотелось бы сравнить запрос с базой данных. Так что, как только моя база данных обучена, я могу выполнить сопоставление только потому, что у меня в текстовом файле есть все мои изображения с индексом.