Tutorial :Find Exact Matches of SURF in openCV


I am using openCV Surf tracker to find exact points in two images. as you know, Surf returns many Feature points in both images. what i want to do is using these feature parameters to find out which matches are exactly correct (true positive matches). In my application i need only true positive matches.

These parameters existed : Hessian, Laplacian, Distance, Size, Dir.

I dont know how to use these parameters? is exact matches have less distance or more hessian? laplacian can help ? size or dir can help ?

How can i find Exact matches(true positives)??


You can find very decent matches between descriptors in the query and image by adopting the following strategy -

Use a 2 NN search for query descriptors among the image descriptors, and the following condition-

if distance(1st match) < 0.6*distance(2nd match) the 1st match is a "good match".

to filter out false positives.


It obvious you can't be 100% sure which points truly match. You can increase (in the cost of performance) positives by tuning SURF parameters (see some links here). Depending on your real task you can use robust algorithms to eliminate outliers, i.e. RANSAC if you perform kind of model fitting. Also, as Erfan said, you can use spatial information (check out "Elastic Bunch Graph Matching" and Spatial BoW).


The answer which I'm about to post is just my guess because I have not tested it to see whether it exactly works as predicted or not. By comparing the relative polar distance between 3 random candidate feature points returned by opencv and comparing it with the counterpart points in the template (with a certain error), you can not only compute the probability of true positiveness, but also the angle and the scale of your matched pattern.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »