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