C ++ / OpenCV — Почему FLANN :: index с ORB и LSH работает очень плохо?

Я ищу изображение в базе данных (1000 изображений). Для этого я использую Bag of Features с ORB.
Затем я использую LSH.

Есть кое-что, чего я совсем не понимаю.
С KD-TREE я получил один из трех ближайших соседей в одном хорошем матче, остальные результаты очень плохие.
Я думаю, это потому, что KD-TREE очень плохо работает с данными большого размера.

Индекс: [47, 194, 1118] Расст: [0, 0,01984383, 0,021690277]

Затем, когда я использую LSH с расстоянием Хэмминга, я всегда получаю одни и те же плохие результаты, независимо от моего изображения запроса.

Индекс: [0, 1, 2] Dist: [0, 0, 0]

 responseDatabase.convertTo(responseDatabase,CV_8U);
cv::flann::Index flannIndex(responseDatabase,cv::flann::LshIndexParams(20,10,2), cvflann::FLANN_DIST_HAMMING);
cv::Mat results, dists;
int k=3; // find the 3 nearest neighbors// search (nearest neighbor)
responseQuery.convertTo(responseQuery,CV_8U);
flannIndex.knnSearch(responseQuery, results, dists, k, cv::flann::SearchParams() );

а также

 cv::flann::Index flannIndex(responseDatabase,cv::flann::KDTreeIndexParams,cvflann::FLANN_DIST_EUCLIDEAN);
cv::Mat results, dists;
int k=3; // find the 3 nearest neighbors// search (nearest neighbor)
flannIndex.knnSearch(responseQuery, results, dists, k, cv::flann::SearchParams() );

responseQuery -> cv :: Mat, который содержит гистограмму ответа на запрос
databaseQuery -> cv :: Mat, который содержит гистограмму ответов для всех моих изображений из моей базы данных

Я что-то пропустил? Может быть, с ORB я должен что-то сделать помимо других вещей?
Я уточнил, что сначала я использовал SIFT и SURF с LSH и KD-TREE, и я получил довольно хорошие результаты, даже если они не были идеальными.

Может кто-нибудь объяснить мне, почему? Я действительно не понимаю, почему.

Однако я использую BruteForce-Hamming в качестве совпадения.

2

Решение

Задача ещё не решена.

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


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