目标

在本章中,

  • 我们将了解FAST算法的基础知识。

  • 我们将使用OpenCV功能对FAST算法进行探索。

理论

我们看到了几个特征检测器,其中很多真的很棒。但是,从实时应用程序的角度来看,它们不够快。最好的例子是计算资源有限的SLAM(同时定位和制图)移动机器人

作为对此的解决方案,Edward Rosten和Tom Drummond在2006年的论文“用于高速拐角检测的机器学习”中提出了FAST(加速分段测试的特征)算法(后来在2010年对其进行了修订)。该算法的基本内容如下。有关更多详细信息,请参阅原始论文(所有图像均取自原始论文)。

使用FAST进行特征检测

1.选择图像中是否要识别为兴趣点的像素p,使其强度为

2.选择适当的阈值t

3.考虑被测像素周围有16个像素的圆圈。(见下图)

4.现在,如果圆中存在一组(共16个像素)n个连续的像素,它们均比亮,或者比都暗,则像素p是一个角。(在上图中显示为白色虚线)。n被选为12。

5.建议使用高速测试以排除大量的非角区域。此测试仅检查1、9、5和13处的四个像素(如果第一个1和9太亮或太暗,则对其进行测试。如果是,则检查5和13)。如果p是一个角,则其中至少三个必须全部比亮或比暗。如果以上两种情况都不是,则p不能为角。然后,可以通过检查圆中的所有像素,将完整的分段测试标准应用于通过的候选项。该检测器本身具有很高的性能,但有几个缺点:

  • 它不会拒绝n <12的候选对象。

  • 像素的选择不是最佳的,因为其效率取决于问题的顺序和角落外观的分布。

  • 高速测试的结果被丢弃了。

  • 彼此相邻地检测到多个特征。

机器学习的方法解决了前三点。使用非最大抑制来解决最后一个问题。

让机器学习一个角检测器

1.选择一组图像进行训练(最好从目标应用程序域中进行训练)

2.在每个图像中运行FAST算法以查找特征点。

3.对于每个特征点,将其周围的16个像素存储为矢量。对所有图像执行此操作以获得特征向量P。

4.这16个像素中的每个像素(例如xx)可以具有以下三种状态之一:

5.取决于这些状态,特征矢量P被细分为3个子集,, , 。

6.定义一个新的布尔变量,如果p是一个角,则为true,否则为false。

7.使用ID3算法(决策树分类器)使用变量查查询每个子集,以获取有关真实类的知识。它选择x,该x通过的熵测得的有关候选像素是否为角的信息最多。

8.递归地将其应用于所有子集,直到其熵为零为止。

9.这样创建的决策树用于其他图像的快速检测。

非最大抑制

在相邻位置检测多个兴趣点是另一个问题。通过使用非极大抑制来解决。

1.计算所有检测到的特征点的得分函数V。V是p与16个周围像素值之间的绝对差之和。

2.考虑两个相邻的关键点并计算它们的V值。

3.丢弃较低V值的那个。

总结

它比其他现有的拐角检测器快几倍。

但是它对高水平的噪声并不鲁棒。它取决于阈值。

OpenCV中的高速拐角检测器

它被称为OpenCV中的任何其他特征检测器。
如果需要,您可以指定阈值,是否要应用非极大抑制,要使用的邻域等。
对于邻域,定义了三个标志,分别为cv.FAST_FEATURE_DETECTOR_TYPE_5_8cv.FAST_FEATURE_DETECTOR_TYPE_7_12cv.FAST_FEATURE_DETECTOR_TYPE_9_16
以下是有关如何检测和绘制FAST特征点的简单代码。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('simple.jpg',0)
# 用默认值初始化FAST对象
fast = cv.FastFeatureDetector_create()
# 寻找并绘制关键点
kp = fast.detect(img,None)
img2 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
# 打印所有默认参数
print( "Threshold: {}".format(fast.getThreshold()) )
print( "nonmaxSuppression:{}".format(fast.getNonmaxSuppression()) )
print( "neighborhood: {}".format(fast.getType()) )
print( "Total Keypoints with nonmaxSuppression: {}".format(len(kp)) )
cv.imwrite('fast_true.png',img2)
# 关闭非极大抑制
fast.setNonmaxSuppression(0)
kp = fast.detect(img,None)
print( "Total Keypoints without nonmaxSuppression: {}".format(len(kp)) )
img3 = cv.drawKeypoints(img, kp, None, color=(255,0,0))
cv.imwrite('fast_false.png',img3)

查看结果。第一张图片显示了带有nonmaxSuppression的FAST,第二张图片显示了没有nonmaxSuppression的FAST:

附加资源

1.Edward Rosten and Tom Drummond, “Machine learning for high speed corner detection” in 9th European Conference on Computer Vision, vol. 1, 2006, pp. 430–443.

2.Edward Rosten, Reid Porter, and Tom Drummond, "Faster and better: a machine learning approach to corner detection" in IEEE Trans. Pattern Analysis and Machine Intelligence, 2010, vol 32, pp. 105-119.

☆☆☆为方便大家查阅,小编已将OpenCV-Python专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“文章”,如图:

或点击下方“阅读原文”,进入OpenCV-Python专栏,即可查看系列文章。

不断更新资源

获取更多精彩

长按二维码扫码关注

OpenCV系列之用于角点检测的FAST算法 | 四十一相关推荐

  1. 用于角点检测的FAST算法

    使用FAST进行特征检测 1.选择图像中是否要识别为兴趣点的像素ppp,使其强度为IpI_pIp​ 2.选择适当的阈值ttt 3.考虑被测像素周围有16个像素的圆圈.(见下图) 4.现在,如果圆中存在 ...

  2. OpenCV —— 角点检测之 Harris 角点检测、Shi-Tomasi 角点检测、FAST 角点检测

    角点检测 Harris 角点检测 实现原理 OpenCV 函数 优化 Shi-Tomasi 角点检测 实现原理 OpenCV 函数 FAST 角点检测 实现原理 OpenCV 函数 优化 在图像处理和 ...

  3. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8763369.html 参考文献----------OpenCV-Python-Toturial ...

  4. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  5. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)

    Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...

  6. 【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化. ...

  7. OpenCV 图像特征提取——Harris角点检测

    OpenCV 图像特征提取 Harris 角点检测 文章目录 1.什么是角点 2.如何区分角点.边界和平面 3.角点公式推导 4.OpenCV相关函数 5.角点检测程序实现 最后 1.什么是角点    ...

  8. OpenCV系列之哈里斯角检测 | 三十七

    目标 在本章中, 我们将了解"Harris Corner Detection"背后的概念. 我们将看到以下函数:cv.cornerHarris(),cv.cornerSubPix( ...

  9. Opencv java模板匹配-角点检测(11)

    函数 在opencv中有模板匹配的方法, Imgproc.matchTemplate(src, template, result, Imgproc.TM_CCOEFF); 这个方法输入的参数分别是: ...

最新文章

  1. 彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
  2. 为何BERT在 NLP 中的表现如此抢眼?
  3. TestBird烧烤趴,几维安全专属报名通道
  4. 项目中遇到的几件有趣事
  5. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境...
  6. (九) shiro采用AES加密和解密
  7. 交换机三种端口模式Access、Hybrid和Trunk的理解
  8. C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考...
  9. Android之URI简介
  10. java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)
  11. 广州交警发布路考秘籍 科目三扣分点近80项
  12. android学习笔记---32_文件断点上传器,解决多用户并发,以及自定义协议,注意协议中的漏洞
  13. Qt实现判断鼠标左右键信号
  14. atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria
  15. 刘晓燕核心词汇趣讲笔记-第十七课
  16. 日语开发java自我介绍,优秀日语自我介绍范文
  17. 如何用计算机模拟光的传播,菲涅尔计算全息干涉图的制作与模拟再现.doc
  18. matlab单元刚度矩阵整合成整刚,空间四面体单元刚度矩阵的Matlab向量化集成.pdf...
  19. TortoiseSVN文件夹没有绿色对号(√)的解决方案
  20. 第十八届全国大学生智能车竞赛竞速比赛规则(讨论版)

热门文章

  1. 2013年度学习计划,放在博客里面时时的警告自己要坚持。
  2. 模型中的featuremap增强模块
  3. 2019 CCPC Final K - Russian Dolls on the Christmas Tree
  4. 世界之窗浏览器 2.0 Final (2.0.4.9)
  5. html5的video播放器上禁止下载和禁止右键下载实现。
  6. 如何使用PDF编辑器将多个PDF合并成一个?
  7. 使用Java解决远程文件下载解决方案
  8. 在VMware上安装win虚拟机
  9. 转一个比较牛的JS Hook实现,基于Function prototype,能够勾住和释放任何函数
  10. keka 1.2.7 中文版 macOS 压缩文件管理器