问题
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.
回答1:
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.
回答2:
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
回答3:
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).
来源:https://stackoverflow.com/questions/24299500/can-sift-run-in-realtime