Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV - SURF Feature Comparison

I am curious about how the OpenCV Feature descriptors are compared. For instance, I can use cvExtractSURF() to get a list of features and their 64-bit (or 128-bit) descriptors, where can I find out how two descriptor can be compared?

In stepping through some sample code, to me it looks like two of my "matched" features have very different descriptors (at least by numerical values).

Has anyone ever figures out how to take two descriptor arrays and compare them?

Googling hasn't helped too much...

Cheers, Brett

like image 671
Brett Avatar asked Nov 12 '10 21:11

Brett


People also ask

Is SURF better than SIFT?

SURF is better than SIFT in rotation invariant, blur and warp transform. SIFT is better than SURF in different scale images. SURF is 3 times faster than SIFT because using of integral image and box filter.

Is SIFT better than Orb?

We showed that ORB is the fastest algorithm while SIFT performs the best in the most scenarios. For special case when the angle of rotation is proportional to 90 degrees, ORB and SURF outperforms SIFT and in the noisy images, ORB and SIFT show almost similar performances.

How SURF is different than SIFT?

SIFT is an algorithm used to extract the features from the images. SURF is an efficient algorithm is same as SIFT performance and reduced in computational complexity. SIFT algorithm presents its ability in most of the situation but still its performance is slow.


2 Answers

You might want to look at the paper Local invariant feature detectors: a survey. It's a great paper with a description of widely used feature detectors, including SURF.

like image 147
Karel Petranek Avatar answered Oct 30 '22 06:10

Karel Petranek


In the OpenCV 2.1 sample file find_obj.cpp, two methods are presented:

  • the built-in C++ Flann function(flann give aproximate solution and works faster), I don't know exactly how it works, but it is documented here.
  • a simpler C function (findPairs()) which finds the nearest neighbor by computing a simple euclidian distance between descriptors (look at the compareSURFDescriptors() function). The laplacian may also be used as a first indicator of similarity, as matching points have not the same laplacian (1 or -1). This sample is available here.
like image 31
Stéphane Péchard Avatar answered Oct 30 '22 06:10

Stéphane Péchard