zoukankan      html  css  js  c++  java
  • 【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.

  • 相关阅读:
    面象对象设计原则之四:接口隔离原则(The Interface Segregation Principle,ISP)
    面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)
    面象对象设计原则之二:开放封闭原则(Open-Closed Principle, OCP)
    面象对象设计原则之一:单一职责原则(Single Responsibility Principle, SRP)
    asp.net core 2.0中的配置(1)---Configuration
    UML类图与类的关系详解
    Javascript中的闭包和C#中的闭包
    Delphi考虑sql注入 QuotedStr
    delphi 窗体的创建和释放
    Delphi ADOQuery连接数据库的查询、插入、删除、修改
  • 原文地址:https://www.cnblogs.com/gfgwxw/p/9440785.html
Copyright © 2011-2022 走看看