SURF vs SIFT, is SURF really faster?

43,641

Solution 1

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.

Solution 2

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.

Solution 3

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.

Solution 4

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.

Solution 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.

Share:
43,641
dynamic
Author by

dynamic

__ _ ____/ /_ ______ ____ _____ ___ (_)____ / __ / / / / __ \/ __ `/ __ `__ \/ / ___/ / /_/ / /_/ / / / / /_/ / / / / / / / /__ \__,_/\__, /_/ /_/\__,_/_/ /_/ /_/_/\___/ /____/ avatar from http://www.pinterest.com/pin/504332858244739013/

Updated on August 31, 2020

Comments

  • dynamic
    dynamic over 3 years

    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.