LSH比BruteForce匹配慢



我需要做两个图像之间的相似性匹配。为此,我使用了c++中OpenCV中的ORB关键点检测器和ORB描述符提取器

我的问题在匹配。我决定测试两种类型的匹配:FLANNBasedMatcher使用LSH和BFMatcher。根据文档和这两种算法,LSH应该比蛮力更快(第一种算法不会逐个比较所有描述符,而第二种算法会)。

当我尝试两者时,我得到BFMatcher比LSH更快(但快得多),我不知道为什么以及如何修复它。

一开始,我认为它需要更多的关键点来观察差异,我决定通过让ORB检测多达70000个关键点来增加这一点:

OrbFeatureDetector detector(70000);

但这使它更慢了。

我不知道是否我假设LSH比暴力破解更快是错误的,或者如果我做错了我的代码。

我代码:

//Detector
    int numKeyPoints = 70000; 
    OrbFeatureDetector detector(numKeyPoints); 
    detector.detect( image, keypoints); 
// Extractor
    OrbDescriptorExtractor extractor;
    extractor.compute(image, keypoints, descriptors); 
// BFMatcher
    BFMatcher matcher(NORM_HAMMING); 
    matcher.radiusMatch(descriptors_1, descriptors_2, matches, 30);

// LSHMatcher
    FlannBasedMatcher matcher(new flann::LshIndexParams(6,12,2));
    matcher.knnMatch(descriptors_1, descriptors_2, matches, 1); 

平均时间:

  • Brute Force = 0.006 s/image
  • LSH = 0.04 s/image

是已知的bug吗?尝试使用分层聚类-它比暴力破解快得多。

cv::flann::Index tree(Desriptors,cv::flann::HierarchicalClusteringIndexParams(),FLANN_DIST_HAMMIN‌​G); 
cv::Mat indices, dists; 
tree.knnSearch(Desriptors2, indices, dists, 1, cv::flann::SearchParams());

相关内容

  • 没有找到相关文章

最新更新