Compare SURF Descriptors in One Image to a List of Descriptors in Other Images

I want to compare SURF descriptors in one image (A) with descriptors in several other images (B, C, D, ..) to find the most similar image in A. Descriptors have 64 dimensions.

Using C # and Emgu, matching is done by comparing the descriptors A with B, then C, then D, etc. This is very slow when the number of images exceeds 10, because you need to look for many irrelevant descriptors.

To speed up the process, the right way (according to the articles) seems to be to build one kd tree for descriptors in (B, C, D, ..) in order to quickly match the descriptor search in A. The Kd tree is split by sizes according to level. The first split is determined by the 1st dimension, the second is divided into the 2nd dimension, etc. However, with the number of measurements for the descriptors (64), the advantage of using the KD tree becomes less.

So my question is: what kind of experience or knowledge do you have using the KD tree / another method for matching SURF descriptors from one image (A) to several images (B, C, D ..). What works well and not so good, and you did something like that?

FLANN will be an option here since it is used by OpenCV, but I cannot find a version for C #. About Nearest Neightboor will also be an opportunity to speed up the work of the kd-tree, but does it work well with the corresponding images?

Regards Morten

+6
source share
2 answers

You can try FLANN in C or C ++. This is not too complicated.

Nevertheless, I am testing FLANN in C ++, but the matching time (using the SURF, FLANN functions, request for 1000 images) is very long, from 20 seconds to 400 seconds (depending on the number of object vectors per image).

0
source

Source: https://habr.com/ru/post/902743/


All Articles