SIFT,SURF,ORB,FAST 特征提取算法比较
主要的特征检测方法有以下几种,在一般的图像处理库中(如OpenCV, VLFeat, Boofcv等)都会实现。
FAST ,Machine Learning for High-speed Corner Detection, SIFT,Distinctive Image Features from Scale-Invariant Keypoints,, invariant to image translation, scaling, and rotation, partially invariant to illumination changes and robust to local geometric distortionSURF,Speeded Up Robust Features,,受SIFT启发,比SIFT快,健壮ORB,ORB: an efficient alternative to SIFT or SURF,,基于FAST,比SIFT快两个数量级,可作为SIFT的替代BRISK,BRISK: Binary Robust Invariant Scalable KeypointsSTAR,Censure: Center surround extremas for realtime feature detection and matching,引用次数不高MSER,Robust Wide Baseline Stereo from Maximally Stable Extremal Regions,2002,斑点检测GFTT,Good Features to Track,1994,Determines strong corners on an imageHARRIS,Harris and M. Stephens (1988). “A combined corner and edge detector”,也是一种角点检测方法
这里主要关注SIFT,SURF,FAST,ORB的对比。
可以看到FAST提取了大量的特征点,在计算时间上,比SIFT SURF快两个数量级,ORB在FAST基础上得来的,特征点的质量比较高!
下面通过通过两张图片来看这几个算法匹配的效果,1639-1311-697表示图片1,2分别提取了1639,1311个keypoints,其中匹配的有697个。
接下来是eiffel-1.jpg,eiffel-13.jpg 俩图片通过不同算法进行匹配的结果示意图。
SIFT
SURF
ORB
FAST
需要注意的地方:
* 链接的时候加上pkg-configopencv--cflags --libs
可以加入所有opencv的库
* SIFT,SURF是nonfree的,使用的时候需要方法initModule_nonfree()
,需要头文件opencv2/nonfree/nonfree.hpp
* FAST只是检测角点,要结合其他extractor如ORB,SIFT.
参考:
1.opencv feature2d
2.Feature Detection and Description