文章目录

  • 前言
  • 一、特征点检测
    • 二阶的拉普拉斯高斯边缘提取算法(LOG)
    • 尺度不变特征变换算法(SIFT)
    • 加速稳健特征算法(SURF)
    • Harris角点特征提取算子
    • 加速分割测试特征提取(FAST)
    • 特征点检测算子(ORB)
  • 二、特征匹配
    • 匹配策略
      • 蛮力匹配(Brute Force Matching)
      • 快速最近邻(FLANN)
      • 有效降低FP的两种策略
        • BFMatching-crossCheck
        • Nearest neighbor distance ratio (NN)/K-nearest-neighbor(KNN)
      • Evaluating Matching Performance
  • 对比总结

前言

特征点检测与匹配的作用是计算特征点个数达到要求的图像对,使得图像与图像间一直进行传递,从而形成一条轨迹,为SFM重构中的初始图像对以及R、T求解作铺垫。


一、特征点检测

在特征点检测中,我们主要检测其局部特征点,包括斑点和角点两类特征点。斑点是指图像中像素或者灰度值大的区域,角点是指图像中物体的拐角或者线条交叉的部分。其中斑点检测主要包括二阶的拉普拉斯高斯边缘提取算法(LOG),尺度不变特征变换算法(SIFT)、加速稳健特征算法(SURF)等。角点检测主要有Harris角点特征提取算子、加速分割测试特征提取(FAST)、特征点检测算子(ORB)等。

二阶的拉普拉斯高斯边缘提取算法(LOG)

1980年,Marr和Hildreth提出将Laplace算子与高斯低通滤波相结合,提出了LOG(Laplace and Guassian)算子。
步骤如下:

  1. 对图像先进行高斯滤波,然后再采用Laplace算子进行边缘检测。
  2. 保留一阶导数峰值的位置,从中寻找出Laplace过零点。
  3. 对过零点的精确位置进行插值估计。

其中LoG算子▽\bigtriangledown▽ 2 G就是对一个标准高斯函数(未归一化)进行二次偏微分:

根据δ\deltaδ的不同以及3δ\deltaδ原则可以建立不同的模板,其中,δ\deltaδ是一个尺度参数,在图像处理中引入尺度以及建立多尺度空间是一个重要的突破,δ\deltaδ越大,图像越模糊,滤除噪声效果最好,δ\deltaδ越小,效果相反。

尺度不变特征变换算法(SIFT)

建议参考:SIFT详细解析

加速稳健特征算法(SURF)

SURF(Speeded Up Robust Features,加速稳健特征)是一种稳健的图像识别和描述算法。它是SIFT的高效变种,也是提取尺度不变特征,算法步骤与SIFT算法大致相同,但采用的方法不一样,要比SIFT算法更高效。SURF使用Hessian矩阵的行列式值作特征点检测并用积分图加速运算;SURF的描述子基于2D离散小波变换响应并且有效地利用了积分图。
步骤如下:

  1. 尺度空间的极值检测:搜索所有尺度空间上的图像,通过Hessian来识别潜在的对尺度和选择不变的兴趣点。
  2. 特征点过滤并进行精确定位。
  3. 特征方向赋值:统计特征点图形领域内的Harr小波。即在60°扇形内,每次将60°扇形区域旋转0.2弧度进行统计,将值最大的那个扇形的方向作为该特征点的主方向。
  4. 特征点描述:沿着特征点主方向周围的领域内,取4×4个矩阵小区域,统计每个小区域的Harr特征,然后每个区域得到一个4维的特征向量。一个特征点共有64维的特征向量作为SURF特征的描述子。

Harris角点特征提取算子

Harris角点检测算子是于1988年由CHris Harris和Mike Stephens提出来的,是对Moravec算子的改进。其基本思想是:在图像中设计一个局部检测窗口,当该窗口沿各个方向做微小移动时,考察窗口的平均能量变化,当该能量变化超过设定的阈值时,就将窗口的中心像素点提取为角点。
其步骤为:

  1. 计算图像像素点在水平和垂直方向上的梯度,以及两者的乘积,得到M中4个元素的值.
  2. 对图像进行高斯滤波,得到新的M。
  3. 计算每个像素的Harris响应值R,
  4. 选取局部极值点。Harris方法认为,特征点是局部范围内的极大兴趣值对应的像素点。
  5. 设定阈值,选取一定量的角点。

加速分割测试特征提取(FAST)

Edward Rosten和Tom Drummond经过研究,于2006年在《Machine learning for high-speed corner detection》中提出了一种FAST特征点,并在2010年稍作修改后发表了《Features From Accelerated Segment Test》,简称FAST。由于不涉及尺度,梯度等,FAST检测器速度非常快。基本原理为通过一定邻域内像元的灰度值和中心点比较大小来判断是否为角点。

注意:FAST只是一种特征点检测算法,并不涉及特征点的特征描述。

其主要步骤为:

  1. 对固定半径圆上的像素进行分割测试,通过逻辑测试可以去除大量的非特征候选点。
  2. 基于分类的角点特征检测,利用ID3分类器根据16个特征判断候选点是否为角点特征,每个特征的状态为——1,0,1。
  3. 利用非极大值抑制进行角点特征的验证。

特征点检测算子(ORB)

Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Rary R.Bradski在2011年一篇名为“ORB: An Efficient Alternative to SIFT or SURF” 的文章中提出这个快速特征点提取和描述的算法。ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST算法发展而来,特征点描述是根据BRIEF(Binary Robust Independent Elementary Features)特征描述算法改进的。
其基本步骤为:

  1. 粗提取。(该步骤能够提取大量的特征点,但是有很大一部分的特征点的质量不高。
  2. 机器学习的方法筛选最优特征点。
  3. 非极大值抑制去除局部较密集特征点。
  4. 特征点的尺度不变性、(建立金字塔,来实现特征点的多尺度不变性)
  5. 特征点的旋转不变性。(通过矩来计算特征点以r为半径范围内的质心。特征点坐标到质心形成一个向量作为该特征点的方向。)

二、特征匹配

特征匹配主要是计算两幅图像中特征描述子的匹配关系。需要计算两个描述符之间的距离,这样他们的差异就被转换成一个单一的数字,我们可以用它作为一个简单的相似度量,如下图:

匹配策略

蛮力匹配(Brute Force Matching)

对于第一张图像中给定的关键点,它将获取第二张图像中的每个关键点并计算距离。距离最小的关键点将被视为一对、

快速最近邻(FLANN)

2014年,David Lowe和Marius Muja发布了"快速最近邻(fast library for approximate nearest neighbors(FLANN)")。FLANN训练了一种索引结构,用于遍历使用机器学习概念创建的潜在匹配候选对象。该库构建了非常有效的数据结构(KD树)来搜索匹配对,并避免了穷举法的穷举搜索。因此,速度更快,结果也非常好,但是仍然需要调试匹配参数。

BFMatching和FLANN都接受描述符距离阈值T,该距离阈值T用于将匹配项的数量限制为“好”,并在匹配不对应的情况下丢弃匹配项。相应的“好”对称为"正阳性(TP)",而错对称为"假阳性(FP)",为T选择合适的值的任务是允许尽可能多的TP匹配,而应尽可能避免FP匹配。尽管在大多数情况下都无法避免FP,但我们可以尽可能的降低FP次数。

有效降低FP的两种策略

BFMatching-crossCheck

只要不超过所选阈值T,即使第二图像中不存在关键点,蛮力匹配也将始终返回与关键点的匹配。这不可避免地导致许多错误的匹配。抵消这种情况的一种策略称为交叉检查匹配,它通过两个方向上应用匹配过程并仅保留那些在一个方向上的与在另一个方向上的最佳匹配相同的匹配来工作。交叉检查方法的步骤为:

  1. 对于源图像中的每个描述符,请在参考图像中找到一个或多个最佳匹配。
  2. 切换源图像和参考图像的顺序。
  3. 重复步骤1中源图像和参考图像之间的匹配过程。
  4. 选择其描述符在两个方向上最匹配的那些关键点。
    尽管交叉检查匹配会增加处理时间,但通常会消除大量的错误匹配,因此,当精度优于速度时,应始终执行交叉匹配。交叉匹配一般仅仅用于BFMatching。

Nearest neighbor distance ratio (NN)/K-nearest-neighbor(KNN)

减少FP数量的另一种非常有效的方法是为每个关键点计算最近邻距离比(nearest neighbor distance ratio)。

KNN与NN的区别在与NN每个特征点只保留一个最好的匹配,而KNN每个特征点保留k个最佳匹配,k一般为2。

主要思想是不要将阈值直接应用于SSD,相反,对于源图像中的每个关键点,两个最佳匹配位于参考图像中,并计算描述符距离之间的比率。然后,将阈值应用于比率,以筛选出模糊匹配。如下图所示:

Evaluating Matching Performance

真阳性率(True Positive Rate-TPR)是已经匹配的正确关键点和所有潜在匹配的总和之间的比值,包括那些被检测器/描述符错过的。它可用于量化实际发现了多少个可能的正确匹配。

假阳性率(False Positive Rate-FPR)是已经匹配的错误的匹配点和所有应该不被匹配的特征点之间的比值。它描述检测器/描述符选择错误的关键点的可能性。

Matcher Precision是正确匹配的关键点(TP)的数量除以所有匹配的数量,此度量也称为inlier ratio。

ROC曲线是一个图形化的图标,它显示了一个检测器/描述符如何很好地区分真假匹配,因为它的区分阈值是不同的。ROC可以直观地比较不同的检测器/描述符,并为每个检测器选择一个合适的鉴别阈值。

对比总结

算法 优点 缺点
SIFT 在处理发生尺度、旋转变化场景时有极大优势,且对光照、噪声具有很好的鲁棒性。 计算维度大、计算速度很慢。
SURE 较SIFT计算量小,耗时短,具有旋转不变性、尺度不变性,鲁棒性较好。 运算速度比较慢。
FAST 计算速度快。 容易受噪声因素干扰,鲁棒性差,不具有旋转不变性。
OBG 运算速度快,具有稳定的旋转不变性。 不具备尺度不变性。

在实际应用中,需要根据不同的需求选择不同的算法。

基于图像的三维重建——特征点检测与匹配(2)相关推荐

  1. 两个一样的图像相除会怎么样_【壮凌自动化分析】一种动力电池生产中基于图像运动模糊的速度检测方法...

    一种动力电池生产中基于图像运动模糊的速度检测方法 1.西南大学 电子信息工程学院,重庆 400715) 2.非线性电路与智能信息处理重庆市重点实验室,重庆 400715) 1.当前背景与成熟方法介绍 ...

  2. 基于图像的三维重建——基于空间patch扩散的方法(PMVS)

    1.PMVS:多视图匹配经典算法简介 导语:常见的稠密重建方法主要有三种:基于体素的方法.基于深度图融合的方法以及基于3D patch扩张的方法.第一种基于体素的方法仅适用于小场景,单个物体,遮挡较少 ...

  3. 基于图像的三维重建研究

    前言 三维重建,顾名思义就是对现实世界中的三维物体用计算机来进行模拟.目前主流的有两种手段:采用红外设备对物体进行测距.基于多张有关待测物体的二维图像进行三维重建.由于前者需要红外设备,成本比较昂贵且 ...

  4. 基于图像的口罩佩戴自动检测系统设计

    基于图像的口罩佩戴自动检测系统设计 一.前言 学校的一门综合设计,在此仅作学习记录,在此仅作学习记录!在此仅作学习记录!再不记录一下自己都忘掉了,同时希望看到的友友指出不足,共同进步,如果有的话吼吼吼 ...

  5. 图像特征点检测与匹配评价准则——量化

    欢迎转载,转载请注明出处,谢谢! 目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harris.SIFT.SURF.ORB等等,不同的特征点检测和匹配方法尤其独特的优势和不足:  ...

  6. 图像特征点检测与匹配评价——量化指标

    原文:http://blog.csdn.net/cgwang_1580/article/details/68944319 目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harri ...

  7. 基于图像的三维重建——捆绑调整(6)

    文章目录 前言 基础知识 重投影 重投影误差 最小化重投影误差 求解方法 最速下降法 算法介绍 算法流程 牛顿法 算法介绍 算法流程 Levenberg-Marquardt法 算法介绍 算法流程 增量 ...

  8. 系统性综述:特征点检测与匹配

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨梦寐mayshine@知乎(已授权) 来源丨https://zhuanlan.zhihu.com ...

  9. opencv学习笔记三十六:AKAZE特征点检测与匹配

    KAZE是日语音译过来的 , KAZE与SIFT.SURF最大的区别在于构造尺度空间,KAZE是利用非线性方式构造,得到的关键点也就更准确(尺度不变性 ): Hessian矩阵特征点检测 ,方向指定, ...

最新文章

  1. opencv 显示图片
  2. three.js之正投影摄像机与透视投影摄像机的区别
  3. Java 并发编程Semaphore的应用与源码解析
  4. 天天红单app下载安装_App内测好帮手,稳定内测分发就选择TF签名
  5. 笨办法学 Linux 4~7
  6. 特征做得好,模型没烦恼
  7. HTML5关于上传API的一些使用(上)
  8. ARCGIS知乎上的好文章
  9. 懵圈了,面试官问一个 TCP 连接可发多少个 HTTP 请求?
  10. 不懂开发的运维,未来该如何发展?
  11. 李广难封--有感于团队建设
  12. pentium500微型计算机,pentium g6950_pentium500微型计算机_pentium ivcpu时钟频率(2)
  13. Android 长按Menu键的监听
  14. 大数据实时处理学期总结
  15. 有限元-朗格朗日和欧拉描述的区别
  16. 【刷机】LG G2 能进入recovery但是不能进入新系统,can't open file ,G2刷TOT
  17. Dynamic Slicing for Deep Neural Networks
  18. 【免费毕设】JSP旅游网站建设设计与实现(源代码+论文)
  19. 国庆回家计划满满最后却摆烂这件事(解决?)
  20. Unity 游戏框架搭建 2019 (四十五) 独立的方法和独立的类

热门文章

  1. 怎么样脱颖而出,成为一个更优秀的人?
  2. 相机寻找最适合分辨率android,ARCore:获取相机的分辨率(ARCore : Get Camera's resolution)...
  3. 现在啥软件都有开源,BI 呢?干货推荐
  4. 临界比例度法 matlab程序,扩充临界比例度法整定参数及PID控制.doc
  5. 秘制牛肉团队博客目录
  6. 联想MIIX720二合一笔记本键盘维修(带键盘灯款)
  7. 联想Miix 5 Pro二合一笔记本如何装win7系统?
  8. 微信小程序:强大多流量主自带接口短视频去水印工具箱微信小程序
  9. Windows下使用GitHub Pages搭建hexo博客详细教程以及Next主题超全配置
  10. 出现The specified base path ““ contains a package but “catkin_make“ must be invoked...的解决方法