【CV学习7】FAST算法详解

一、简介

1.FAST算法产生原因

SIFT和SURF算法在进行特征点检测时需要建立尺度空间,基于局部图像的梯度直方图来计算描述子,整个算法的计算和数据存储复杂度比较高,不适用于处理实时性很强的图像。

2.FAST算法思想

若某像素与其周围领域内足够多的像素点相差较大,则该像素可能是角点

二、算法步骤

Step1: 确定候选角点

a.传统方法:

  1. 选择某个像素,其像素值为,以为圆心,半径为3,确定一个圆,圆上有16个像素,记为
  2. 确定一个阀值,记为
  3. 让圆上的n个连续的像素的像素值分别与的像素值做差,若这些差值的绝对值都比大或都比小,则像素为角点。现在我们令(经验数据)。接下来是实现这一步的具体步骤(前人经验所得)。
  4. 分别计算的像素值与的差,若差值的绝对值都比大或都比小,则进入下一步判断,否则点被直接pass掉
  5. 分别计算四个点像素值与的差值,若有个点的差值的绝对值都比大或都比小,则进入下一步判断,否则pass掉p点
  6. 对圆上16个像素点的像素值分别与做差,若有个像素点的差值的绝对值都比大或都比小,则p点为角点

    缺陷:

    1. 这种检测方法不能推广到连续亮点或者暗点个数的情况
      1. 这种检测方法对特征点的空间分布有隐含假设
      2. 这种检测方法得到的判断信息最后也被丢弃了
    2. 大量测试得到这样的结论:大量特征点都是相邻分布的
  7. 因此现在都通过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:非极大值抑制

在筛选出来的候选角点中有很多是紧挨在一起的,需要通过非极大值抑制来消除这种影响

  1. 为所有的候选角点计算一个打分函数:

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.

 

posted @ 2018-08-08 09:07  苟富贵  阅读(6161)  评论(0编辑  收藏  举报