我编写了一个程序,通过获取两个ORB描述符然后使用多探针LSH索引来比较它们来比较两个图像:
flann::Index flannIndex(descriptorsA, flann::LshIndexParams(1,20,2), cvflann::FLANN_DIST_HAMMING);
flannIndex.knnSearch(descriptorsB, index, dist, 1, flann::SearchParams());
将一个输入图像与42k(线性)的10k图像进行比较,检索效果良好。
-
在我之前
flann::Index flannIndex(descriptorsA, flann::LshIndexParams(10,10,2), cvflann::FLANN_DIST_HAMMING);
flannIndex.knnSearch(descriptorsB, index, dist, 1, flann::SearchParams());
使用相同的输入和数据库,花了65秒也检索到了良好的结果。
我的问题更多是关于LSH的实现:为什么减少表的数量和增加密钥大小,使搜索更快?换句话说:
为什么
flann::Index flannIndex(descriptorsA, flann::LshIndexParams(1,20,2), cvflann::FLANN_DIST_HAMMING);
比
快flann::Index flannIndex(descriptorsA, flann::LshIndexParams(10,10,2), cvflann::FLANN_DIST_HAMMING);