我正在寻找数据库中的图片(1000 张图片)。为了做到这一点,我使用带有 ORB 的功能包。然后,我使用 LSH。
有一点我完全不明白。有了 KD-TREE,我在我最近的 3 个邻居中得到了一个很好的匹配,其他结果非常糟糕。我认为这是因为 KD-TREE 在高维数据中的表现非常糟糕。
索引:[47、194、1118] 距离:[0、0.01984383、0.021690277]
然后,当我使用带有汉明距离的 LSH 时,无论我的查询图像如何,我总是得到相同的坏结果。
索引 : [0, 1, 2] 距离 : [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 作为匹配器。