SIFT,SURF,ORB,FAST 特征提取算法比较

SIFT,SURF,ORB,FAST 特征提取算法比较


主要的特征检测方法有以下几种,在一般的图像处理库中(如OpenCV, VLFeat, Boofcv等)都会实现。

这里主要关注SIFT,SURF,FAST,ORB的对比。

Image NO SIFT SURF ORB FAST
0 2414 4126 500 11978
1 4295 8129 500 16763
2 3404 4784 500 16191
3 1639 2802 500 7166
4 1510 1484 497 29562
5 10572 8309 500 720
6 191 187 295 16125
7 3352 4706 500 567
8 165 403 374 26701
9 4899 7523 500 12780
10 1979 4212 500 10676
11 3599 3294 500 663
12 163 168 287 7923
13 1884 2413 500 11681
14 2509 5055 500 18097
15 9177 4773 500 7224
16 3332 3217 500 20502
17 5446 6611 500 16553
18 4592 6033 500 706
19 266 509 459 9613
20 2087 2786 500 7459
21 2582 3651 500 12147
22 2509 4237 500 14890
23 1236 4545 500 6473
24 1311 2606 500 4293
25 237 387 500 657
26 968 1418 488 6609
Time Cost 21.52 17.4 0.97 0.25

可以看到FAST提取了大量的特征点,在计算时间上,比SIFT SURF快两个数量级,ORB在FAST基础上得来的,特征点的质量比较高!

下面通过通过两张图片来看这几个算法匹配的效果,1639-1311-697表示图片1,2分别提取了1639,1311个keypoints,其中匹配的有697个。

Image pair SIFT SURF ORB FAST(SURF)
eiffel-1.jpg,eiffel-13.jpg 1639-1311-697 2802-2606-1243 500-500-251 1196-1105-586

接下来是eiffel-1.jpg,eiffel-13.jpg 俩图片通过不同算法进行匹配的结果示意图。 
SIFT 
这里写图片描述 
SURF 
这里写图片描述 
ORB 
这里写图片描述 
FAST 
这里写图片描述

需要注意的地方: 
* 链接的时候加上pkg-config opencv --cflags --libs可以加入所有opencv的库 
* SIFT,SURF是nonfree的,使用的时候需要方法initModule_nonfree(),需要头文件opencv2/nonfree/nonfree.hpp 
* FAST只是检测角点,要结合其他extractor如ORB,SIFT.

参考: 
1.opencv feature2d 
2.Feature Detection and Description

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页