【CV学习7】FAST算法详解
一、简介
1.FAST算法产生原因
SIFT和SURF算法在进行特征点检测时需要建立尺度空间,基于局部图像的梯度直方图来计算描述子,整个算法的计算和数据存储复杂度比较高,不适用于处理实时性很强的图像。
2.FAST算法思想
若某像素与其周围领域内足够多的像素点相差较大,则该像素可能是角点
二、算法步骤
Step1: 确定候选角点
a.传统方法:
- 选择某个像素,其像素值为,以为圆心,半径为3,确定一个圆,圆上有16个像素,记为。
- 确定一个阀值,记为
- 让圆上的n个连续的像素的像素值分别与的像素值做差,若这些差值的绝对值都比大或都比小,则像素为角点。现在我们令(经验数据)。接下来是实现这一步的具体步骤(前人经验所得)。
- 分别计算与的像素值与的差,若差值的绝对值都比大或都比小,则进入下一步判断,否则点被直接pass掉
- 分别计算,,,四个点像素值与的差值,若有个点的差值的绝对值都比大或都比小,则进入下一步判断,否则pass掉p点
-
对圆上16个像素点的像素值分别与做差,若有个像素点的差值的绝对值都比大或都比小,则p点为角点
缺陷:
-
这种检测方法不能推广到连续亮点或者暗点个数的情况
- 这种检测方法对特征点的空间分布有隐含假设
- 这种检测方法得到的判断信息最后也被丢弃了
- 大量测试得到这样的结论:大量特征点都是相邻分布的
-
- 因此现在都通过ID3算法构建决策树来判断围绕待测目标点的Bresenham圆环上是否有n个连续的亮点或者暗点,进而判断该目标点是否是特征点。(ID3算法讲解参考https://www.cnblogs.com/gfgwxw/p/9439482.html)
b.基于机器学习方法的FAST算法
1.确定一组训练图像
2.使用FAST算法对每幅图像做角点检测
3.在向量中存储每幅图像的每个焦点周围16个像素值
4.对于图像中所有像素都重复如上操作
5.对于圆环上的16个点()安如下规则分为三类
是状态(兴趣点是p,圆环上的点x)
是像素x的值
t是阀值
6.根据状态,可以划分为三个子向量,,
6.确定一个布尔变量,当为角点时为True,当p不是角点是为False
7.使用ID3决策树,按照的真假对的三个子向量进行训练
8.ID3算法的的运行原则依据熵值最小(信息最多)以检测出像素点的位置
其中是每个区域的角点个数
是每个区域的非角点个数
9.停止条件为上述划分的每一个等级熵值均为零
10.训练结束后得到一个确定的决策树,以后可对类似场景使用这个决策树来检测角点
Step2:非极大值抑制
在筛选出来的候选角点中有很多是紧挨在一起的,需要通过非极大值抑制来消除这种影响
- 为所有的候选角点计算一个打分函数:
2.比较相邻候选角点的值,把V值较小的候选角点PASS掉
至此,FAST算法结束
三、参考及致谢
1.https://zhuanlan.zhihu.com/c_154380889
2.刘晓光《基于FPGA的FAST图像特征点的检测与匹配算法的研究》
3. Bremner D, Demaine E, Erickson J, et al. Output-sensitive algorithms for computing nearest-neighbour decision boundaries[J]. Discrete & Computational Geometry, 2005, 33(4): 593-604.