为什么基于FLANN的描述符匹配器每次都会匹配到不同的关键点?

3

这正常吗?当我尝试使用暴力匹配器时,结果每次都是一致的,但是 flann 却不是。 少量关键点会匹配到不同的位置。我正在使用 Android 的包装器编写代码,关键点检测器和描述符是 SURF,类似于这样:

Mat queryDescriptors = new Mat();
Mat trainDescriptors = new Mat();
DescriptorExtractor surfDE = DescriptorExtractor.create(DescriptorExtractor.SURF);
surfDE.compute(queryImage, queryKeyPoints, queryDescriptors);
surfDE.compute(trainImage, trainKeyPoints, trainDescriptors);
DescriptorMatcher dm = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
List<DMatch> matches = new ArrayList<DMatch>();
dm.match(queryDescriptors, trainDescriptors, matches);

1
DescriptorMatcher.create这一行代码给我报错了。 - dynamic
2个回答

5

FLANN是一种快速库,用于近似最近邻搜索。 近似最近邻算法是非确定性的,通常使用随机的KD树。


在每次使用FLANN之前,您可以使用cv::setRNGSeed(2391);来固定种子。请注意,如果您同时从多个线程使用FLANN,则此方法可能无法可靠地工作。 - Polar Nick

2
根据Andrey的说法,这就是原因!所以,这是正常的。要找到更多信息,需要分析算法!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接