SURF vs SIFT, is SURF really faster?

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.


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.