本文转自:http://blog.csdn.net/GH_HOME/article/details/51501588
本文解决以下问题
- FAST算法的基本原理
- FAST 算法在OpenCV中的调用
一. FAST算法的基本原理
1. FAST算法的动机
大部分特征检测算法的效果较好,但是达不到实时,因此提出FAST
(Features from Accelerated Segment Test)
2. FAST算法的基本原理
- 在图像中任选一点p, 假定其像素(亮度)值为 IpIp
- 以3为半径画圆,覆盖p点周围的16个像素,如下图所示
- 设定阈值t,如果这周围的16个像素中有连续的n个像素的像素值都小于 Ip−tIp−t 或者有连续的n个像素都大于
Ip+tIp+t, 那么这个点就被判断为角点。 在OpenCV的实现中n取值为12(16个像素周长的 3/4). - 一种更加快的改进是: 首先检测p点周围的四个点,即1, 5, 9, 12四个点中是否有三个点满足超过Ip+tIp+t, 如果不满足,则直接跳过,如果满足,则继续使用前面的算法,全部判断16个点中是否有12个满足条件。
以上算法的缺点:很可能大部分检测出来的点彼此之间相邻,我们要去除一部分这样的点。为了解决这一问题,我们采用了最大值抑制的算法
假设P,Q两个点相邻,计算两个点与其周围的16个像素点之间的差分和V,去除V值较小的点。
2. FAST 算法总结
- 在速度上要比其他算法速度快很多
- 受图像噪声以及设定的阈值影响很大
- FAST不产生多尺度特征而且FAST特征点没有方向信息,这样就会失去旋转不变性。
FAST openCV调用
这里的threshold就是我们前文中提到的t
vector<KeyPoint> keyPoints;
FAST(image, keyPoints, 40);
- 1
- 2
这里默认开启了非最大值抑制,同时开启的检测type是16-9模式