0

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.

Ankit Nayan
  • 363
  • 7
  • 18

3 Answers3

0

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.

minorlogic
  • 1,872
  • 1
  • 17
  • 24
0

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/

BRIEF: http://gilscvblog.wordpress.com/2013/09/19/a-tutorial-on-binary-descriptors-part-2-the-brief-descriptor/

ORB: http://gilscvblog.wordpress.com/2013/10/04/a-tutorial-on-binary-descriptors-part-3-the-orb-descriptor/

BRISK: http://gilscvblog.wordpress.com/2013/11/08/a-tutorial-on-binary-descriptors-part-4-the-brisk-descriptor/

FREAK: http://gilscvblog.wordpress.com/2013/12/09/a-tutorial-on-binary-descriptors-part-5-the-freak-descriptor/

OpenCV usage example: http://docs.opencv.org/doc/user_guide/ug_features2d.html

GilLevi
  • 2,117
  • 5
  • 22
  • 38
0

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

Nuno Aniceto
  • 1,892
  • 1
  • 15
  • 16