FAST-ER是FAST算法原作者在2010年提出的,它在原来算法里提高特征点检测的重复度,重复意味着第一张图片内的检测的点,也可以在第二张图片上的相应位置被检测出来,重复度可以由如下式子定义:

这里的Nrepeated指第一张图片内的检测点有多少能在第二张被检测到,而Nuseful定义为有用的特征点数。这里计算的一组图像序列的总的重复度,所以Nrepeated和Nuseful是图像序列中所以图像对的和。

在衡量检测的特征点是否能在第二张图像上被检测到,这也是一个大问题,通常的方法先将第一张图像内的点进行变形,使其能匹配第二张,然后再将变换的特征点位置同第二张对应位置比较,看是否被再次检测到,这里也允许一定误差,一般会在3*3的窗口去寻找(也就是说大概只允许一个像素的误差)。

然后实际上,由于视点变化等形变较大因素造成的形变,很有可以使角点检测偏移到不同位置,所以这个邻近区域搜索,找到匹配的特征点是很难确定的,如果搜索范围大太,一方面容易把不匹配的点检测到,另一方面计算量也增大。而如果搜索范围太小,则容易把本来匹配点给忽视了,从面减少重复率。

由于一些形变较大因素造成的形变,很难通过简单且固定的模板将所以的角点检测出来,而原来的FAST算法其决策树的结构是固定的三层树,并不能最优的实现区分角点(实现最优的重复率)。FAST-ER就是针对这样的问题而提出的,其主要是通过模拟退火(也有通过最速下降法的)优化原先决策树的结构,从而提高重复率。

一、引入角点检测的不变性

原先一个像素点及其附近的点送往决策树进行比较时,只需要比较两个位置的点,如果这个点被检测出是角点,但在其区域发生一定旋转、变形或强度反转(白变黑,黑变白)之后,再次重新判定,很有可能被认为是非角点。

在这种情况下,为了使角点检测具有旋转、反射、强度倒转等不变性,最简单的办法就是将所以变化后的结果都计算,即不同的变换建立不同树,只要有一个树能检测出角点,即是角点。不过这样的话,计算量太大,为了减少计算复杂率,每次树被评估时,一般只需要应用16种变换:四个旋转方向变化(各相差90度),并结合反射(对左右对称及上下对称)同强度倒转,共16个变换操作。如果一个点能被6种变换中任一种的决策树视为角点,那么这个点就是角点。

由此以来我们建立了16棵对应不同变换的决策树。

二、决策树的结构优化

对于FAST算法来说,原来的三层决策树太过简单,不能达到最好得重复度,而重复度是关于决策树结构的非凸函数,这涉及到非凸函数的优化问题,这里许多方法,而FAST-ER则是通过模拟退火方法来优化决策树的。

(1)退火温度

首先考虑建立树的总成本如下:

这里的r定义为重复率,di定义为第i帧检测的角点数,而N定义为总共的帧数,s是决策树的大小(树共有多少个节点),ws,wn,wr指影响因子。注意,为了提高计算效率,重复率以一个固定的阈值t和每帧固定数量的特征点来计算。

因为每次迭代过程,我们都需要对原树进行随机调整(启发式随机寻找最优),这些调整可以通过波尔兹曼接受准则来实施,其在第I次迭代中接受调整概率为P:

这里的是接受标准之后的成本,而T是退火温度:

这里的Imax是最大的迭代次数。

(2)扩大的判定位置

通过随机调整决策树,从而找到最优的重复率,而这个调整涉及到两个方面,一个是树节点选择分类的x位置,另一个是整个树的结构。

每个树的叶子确定分类(如果为1,则是角点,而为0,则不是),而每个节点都有一个对应的判断位置x,FAST是圆环上的其中一点,而在引入退火方法,我们需要给这个位置引入一个相对于中心点的随机偏移,进一步扩大判断位置的选择范围。随机偏移如下定义(共有48个选择位置):

(3)决策树的调整

通过模拟退火的方式来随机调整树,首先选择树中的一个节点(不能是根结点),然后调整它(调整概率P,上面定义过了,随着迭代次数,其越来越趋于稳定),如果:

A)如果挑选的点是叶节点,那么其有相等的概率做如下:

Ø  用一个深度为1随机子树节点代替,将其下继续分成三个叶结点

Ø  翻转叶子的分类(由角点变为非角点,或相反),如果叶子的类被严格限制就不进行此操作(如s子树的叶节点被限制为非角点,因为已经有两个位置检测为同中心相似,这样的点肯定是非角点,可以保证在阈值t增加时,其角点数将通常会减少)

B)如果节点,那么其也有相等概率做如下操作:

Ø  将偏移位置用新的随机偏移位置[0,47]代替,并更新下面的叶结点,前面B)有说明。

Ø  将节点用随机叶节点代替(也要满足以上限制条件)

Ø  移除节点随机选择的分支,并用该节点下另一随机选择的分支拷贝到其位置,比如,b分支可以由s分支代替。

(4)迭代过程的终止

通过对决策树的这些随机调整,树最后很可能不是原来FAST的简单三层树了。树调整后,再对结果应用FAST-9,进一步确定角点,计算新的重复率,如果重复率比原来的重复率高,那么我们就将当前结果视为我们目前最优树,继续应用上面决策树调整,最终在达到一定程度重复率或迭代次数时,停止迭代过程。这个优化也可以通过不同的多个随机种子来运行。我们包含了这些调整可以让FAST-ER更容易地学习到相似的结构。

三、其作用和总结

因为每个迭代过程中,都需要对重新应用新的决策树进行检测,而且16个变换中每一个都需要对应一个候选树,所以这样的检测算法并不十分有效,因此,从效率上考虑,上述的算法一般用于产生训练数据,之后获得较为精确的角点检测结果,我们就可以通过原来的FAST算法来产生单个树。

参考文献:

Faster and Better : A Machine Learning Approach to Corner Detection  (提出FAST-ER的论文)

Machine Learning for High-Speed Corner Detection  (FAST的原文,上面的论文也是这个作者写的)

FAST角点检测方法详解  (本人关于FAST算法的博文)

图像局部特征(四)--FAST-ER角点检测子相关推荐

  1. 图像局部特征(二)--Harris角点检测子

     一.角点定义 有定义角点的几段话: 1.角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测.图像匹配.视频跟踪.三维建模和目标识别等领域 ...

  2. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  3. OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测

    Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...

  4. 图像局部特征(三)--FAST角点检测子

    Features From Accelerated Segment Test 1. FAST算法原理 博客中已经介绍了很多图像特征检测算子,我们可以用LoG或者DoG检测图像中的Blobs(斑点检测) ...

  5. OpenCV Harris 角点检测子

    目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视觉中,我们通常需要寻找两张 ...

  6. 【OpenCV-系列2】11 角点及角点检测

    文章目录 1 图像的特征(角点特征) 2 角点检测(旋转不变性) 2.1 Harris角点检测 2.1.1 思想 2.1.2 原理 2.1.3 代码实现 2.1.4 优缺点 2.2 Shi-Tomas ...

  7. 19-Harris角点检测

    角点检测顾名思义,就是对类似顶点的检测,与边缘有所区别 边缘可能在某一方向上变化不是特别明显,但角点在任何方向上变换都很明显 cv2.cornerHarris(img,blockSize,ksize, ...

  8. opencv harris 角点检测

    一.图像特征的分类 [OpenCV入门教程之十六]OpenCV角点检测之Harris角点检测_[浅墨的游戏编程Blog]毛星云(浅墨)的专栏-CSDN博客_基于轮廓曲线的角点检测 下面部分图像来自与B ...

  9. Harris 角点检测原理详解

    var html = document.getElementById("artContent").innerHTML; document.getElementById(" ...

最新文章

  1. Django博客系统(退出登录)
  2. 在Linux添加PYTHONPATH方法以及修改环境变量方法
  3. 推荐系统之基于邻域的算法-------协同过滤算法
  4. 【Android 高性能音频】AAudio 音频流 缓冲区 简介 ( AAudio 音频流内部缓冲区 | 缓冲区帧容量 | 缓冲区帧大小 | 音频数据读写缓冲区 )
  5. Matplotlib实例教程 | 统计DataFrame中文本长度分布(条形统计图)
  6. PMCAFF | 创业公司产品经理如何建立完善的产品开发体系?
  7. 基于正样本的表面缺陷检测
  8. AngularJS学习之旅—AngularJS Http(九)
  9. 词嵌入 网络嵌入_词嵌入简介
  10. xml转svg_C# Excel 转PDF/图片/HTML/TXT/XML/XPS/CSV/ODS/SVG/EMF
  11. Jsoup使用选择器语法来查找元素
  12. 提升windows 2000的启动速度
  13. Java的五子棋实现,java开发面试笔试题
  14. 使用GenyMotion模拟器+抓包工具SRSniffer分析网络请求
  15. 【Android安全】JEB技巧汇总
  16. JavaScript入门基础
  17. 计算机显示发送报告,Word文档打不开提示发送错误报告的解决方法
  18. Java一个简单的Employee类
  19. java一天一只顽猴想去从山脚_六年级上册语文一课一练(附答案)
  20. 搭建Ethereum以太坊测试网络Rinkeby节点

热门文章

  1. Android 判断wifi是2.4GHz还是5GHz
  2. Android.mk的一些FAQ
  3. android系统预制app/bin/.so文件及文件夹
  4. python之读取文本操作
  5. UE4之UMG用户界面
  6. python小明爬楼梯_爬楼梯(Python and C++解法)
  7. js截图插件_WordPress外贸网站插件装多了很卡很卡?别慌,试试这招
  8. pyspark 条件_删除pyspark中特定条件下的特定行
  9. 计算机金融专业课程方案,《计算机在金融业中的应用》教学实施方案
  10. vue大屏可视化布局