Why does the flann based descriptor matcher match to different keypoints everytime?
Question
Is it normal? When I tried the brute force matcher, the result is consistent everytime, but flann is not. A small amount of keypoints will match to different places. I am writing the code using the Android wrapper, the keypoint detector and descriptor is SURF, something like this:
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);
Solution
According to Andrey, this is the reason! So yes, it is normal. To find more one would have to dissect the algorithms!
OTHER TIPS
FLANN stands for Fast Library for Approximate Nearest Neighbors. The approximate nearest neighbor algorithms are non-deterministic, often randomized KD-trees.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow