Is there any C/C++ implementation of SIFT that runs in realtime in a processor of ~2.2GHz and a RAM of 4GB? Or what is the lowest achievable runtime for extracting SIFT features and descriptors of ~2000 keypoints. The C++ implementation by Andrew Vedaldi takes around 3.5 seconds for 2000 keypoints.
3 Answers
Generaly NO. Exact implementation of SIFT can't run in real time even with modern PC. But there is a implementations on GPU http://cs.unc.edu/~ccwu/siftgpu/.
The faster alternative is SURF, but still not real time. I know only one implementation of DoH descriptor running in real time on modern mobiles, but it is not public.

- 1,872
- 1
- 17
- 24
-
Has any implementation reduced it to even 1s for ~2000keypoins or the code by Andrew Vedaldi is till now the fastest without paralleization? – Ankit Nayan Jun 19 '14 at 08:43
-
you can compare with openCV implementation – minorlogic Jun 19 '14 at 09:12
-
openCV is very slow and the results are not good like the one by Andrew Vedaldi – Ankit Nayan Jun 19 '14 at 10:04
As said above, SIFT cannot run in real time. However, you can use binary descriptors instead, which provide a fast alternative at slightly worse accuracy and performance. A series of tutorial on binary descriptors can be found here:
Introduction: http://gilscvblog.wordpress.com/2013/08/26/tutorial-on-binary-descriptors-part-1/
OpenCV usage example: http://docs.opencv.org/doc/user_guide/ug_features2d.html

- 2,117
- 5
- 22
- 38
-
But SIFT is not only descriptor, it is also detector. And probably you can't find detector with real time performance with , for example 640*480 resolution. – minorlogic Jun 19 '14 at 15:24
-
You can use ORB which is really fast. Or tune up the SIFT/SURF/algorithm options.
OpenCV 3.1.0 now has several algorithms, such as KAZE & AKAZE - the latter is perhaps the very best image detector&descriptor as it shows great results with its (fast explicit) diffusion scale space. The previous SIFT&SURF are moved to the 'extra' repository.
Nevertheless perhaps what you want is to improve the matcher algorithm. In that case try to use FLANN (also in 3.1.0).

- 1,892
- 1
- 15
- 16