我正在尝试为大量图像缩放"matching_to_many_images.cpp" . (20K图片)https://github.com/kipr/opencv/blob/master/samples/cpp/matching_to_many_images.cpp

我使用基于FLANN的匹配器匹配图像(使用SURF关键点和描述符提取器) . 我尝试按照本文中描述的方法(部分"Searching on a Compute Cluster")http://www.cs.ubc.ca/research/flann/uploads/FLANN/flann_pami2014.pdf

我有一个训练图像集C,总共n个图像 .

C = {B(1)... B(N)} .

我将集合C分成N个“桶”,其中每个桶包含(n / N)个图像 . 对于每个存储桶,我分别执行“detectKeyPoints”,“computeDescriptors”和“trainMatcher” . 这意味着每个image -bucket都有一个单独的“DescriptorMatcher” . 总共N个DescriptorMatchers .

然后对于查询图像,我执行“detectKeyPoints”,“computeDescriptors”,然后对N个DescriptorMatchers中的每一个执行“匹配” .

最后从每个DescriptorMatcher接收DMatch列表,将local-image-bucket-indices映射到global-image-index并计算每个image的匹配描述符数 . 将此数字最接近查询图像 .

我用N = 1运行它,得到正确的结果 . 但是当我增加N(> 1)时,我注意到我没有得到正确的匹配结果 .

我的问题是:

1)我是否根据论文做了正确的步骤?我试图了解如何完成“减少”步骤,如本文所述 .

2)我可以从DMatch对象中提取两个因素; “距离”和“每个图像的总匹配数” . 如何使用这两个因素找到最接近的匹配图像?