SURF vs SIFT, is SURF really faster?
Asked Answered
Y

6

33

I am testing some object detection with SURF and SIFT.

SURF claims to be faster and more robust than SIFT but I found in my test that this is not true. SIFT with medium images (600*400) is the same speed of SURF and it recognizes objects pretty well (maybe even better than SURF).

Am I doing something wrong?

[Edit]

Please note there is an article explaining how SURF could be much faster with a little change to opencv code.

If you know some active opencv developer please let him see it.

Ypres answered 23/6, 2012 at 19:36 Comment(2)
600*400 image for modern computer is nothing. Try to test video or huge (in 100 times bigger than yours) images.Pupillary
Please try with the freshly-published open source version of SURF github.com/herbertbay/SURFLover
J
32

When it was designed it was intended to be faster, but actually, the differences are not relevant for real-time applications with standard cameras. By the way, FAST detector is faster and quite robust. I am programming for real-time augmented reality on phones, and we use a combination of SIFT (initialization) and FAST (pyramidal FAST for real-time feature detection) during the application execution. FAST is faster, and it is implemented in OpenCV, so if you don't want to stick to SURF give it a try. I haven't seen recent papers that use SURF for real-time but I have seen modified versions of SIFT, with fewer pixels for descriptors and other kinds of modifications, so it seems like SURF was kind of a great idea that didn't get as far as it was thought to. That is just my opinion, anyway.

Jessamine answered 2/7, 2012 at 21:2 Comment(4)
Thanks for your contribution, anyway regarding SURF there is a little optimization that could led to greater performance. It is described here: computer-vision-talks.com/2011/06/a-few-thoughts-about-cvround I tried to contact an opencv developer with no luck :(Ypres
Anyway which Extractor are you using? Because FastDescriptorExtractor doens't exists. Maybe you are using OrbDescriptorExtractor() ? I am using ORB tooYpres
mm, we use a modified SIFT descriptor to be able to compare features from FAST (real-time) with feaures from SIFT (offline initialization). It is similar to the one described in this paper: ieeexplore.ieee.org/xpl/…Jessamine
This doesn't answer the question at all.Bjork
N
18

OpenCV does not have the best implementation of SURF for speed or stability. SURF is fundamentally faster, by a larger amount, than SIFT if you were to count FLOPS of two well written implementations. SIFT computes an image pyramid by convolving the image several times with large Gaussian kernels, while SURF accomplishes an approximation of that using integral images.

To see a comparison of several implementations of SURF, take a look at my page here:

http://boofcv.org/index.php?title=Performance:SURF

It's unfortunate that OpenCV rejected the patch related to rounding due to cross platform issues. Maybe the patch will be tweaked and resubmitted. In my own work I noticed that general purpose round() was very slow and replaced it with a custom function.

As for the FAST detector, mentioned by Jav_Rock, I only use that as a last resort. It is much less stable of a detector than anything else out there, but it really is fast.

Natant answered 2/12, 2012 at 18:21 Comment(1)
Just for curiosity, is it possible to get the link of the patch if you have submitted it online?Pacesetter
F
5

SURF should be faster, while SIFT more robust. Astor is correct in saying 600*400 is a small image by today's standards; though.

That said, SURF should be many orders of magnitude faster than SIFT.

Faggoting answered 23/6, 2012 at 19:45 Comment(0)
S
5

Without any changes, if you apply SIFT and SURF in OPENCV SIFT seems like faster than SURF, but it is not. For proving that I have tested them on a 393*387 pixel image. After running same feature extraction 100 times and get their average time, the result is

SIFT: 0.0983946(s)

SURF: 0.183372(s)

However, the number of key-points have a big difference, SIFT: kpsize = 671 d-row = 671 d-col = 128

SURF: kpsize = 1156 d-row = 1156 d-col = 64

SURF returns almost twice the number of key-points of SIFT, so it is not fair to say SIFT is faster than SURF.

When we used the Fast as a detector then apply the SIFT, SURF:

SIFT: 0.199448(s) SURF: 0.0613682(s)

SIFT: kpsize = 2362 d-row = 2362 d-col = 64

SURF: kpsize = 2362 d-row = 2362 d-col = 64

Here, SURF is three times faster than SIFT.

Snub answered 10/12, 2014 at 10:6 Comment(0)
L
5

Please use the original implementation of SURF for testing. Open CV is slower.

When comparing the original implementations of SIFT and SURF, you will get much faster results with SURF. You can get even faster by maybe an order of magnitude by tweaking the parameters. However, robustness might suffer. This all depends on your use case.

In general, SURF is as robust as SIFT. Depending the dataset you might get different results, but en gros, they are the same when it comes to robustness.

There are also GPU implementations of SURF that are tremendously faster than my original implementation.

Lover answered 12/4, 2017 at 21:36 Comment(2)
Please read the original SURF paper comparing the different algorithms. vision.ee.ethz.ch/~surf/eccv06.pdfLover
BTW, the original SURF implementation is now open source github.com/herbertbay/SURFLover
S
1

I have increased speed of my Surf feature detector by not applying it on every frame but on every 6th frame, it was ok for my application. make a counter i, make an if statement if(i%6==0), put ur code in under this if statement, the speed will increase

Strohbehn answered 14/8, 2015 at 14:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.