Я ищу изображение в базе данных (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 в качестве совпадения.
Задача ещё не решена.