《ORB: an efficient alternative to SIFT or SURF》是Rublee等人在2011年的ICCV上发表的一篇有关于特征点提取和匹配的论文,这篇论文介绍的方法跳出了SIFT和SURF算法的专利框架,同时以极快的运行速度赢得了众多青睐。下面我简单介绍一下ORB算法的流程。

ORB算法的主要贡献如下:

(1)为FAST算法提取的特征点加上了一个特征点方向;

(2)使用带方向的BRIEF算法高效的对特征点描述符进行计算;

(3)分析了BRIEF算法得到的特征点描述符的方差和关联性;

(4)介绍了一种基于学习的去特征点关联性的BRIEF算法,优化了特征点求得的最近邻点。

下面我按照论文的结构对ORB算法进行介绍。

1、oFAST: FAST Keypoint Orientation

1.1 FAST Detector

ORB算法使用的是FAST算法提取的特征点(FAST算法的详细介绍会在以后的博文中提出),在作者的实验中使用的FAST-9的算法,得到了很好的结果。

由于边缘位置对FAST算法得到的特征点有很大的影响,因此作者使用了Harris 角点检测方法对于得到的特征点进行排序,取前N个较好的角点作为特征点。

FAST算法是一种非常快的提取特征点的方法,但是对于这里来说,有两点不足:

(1)提取到的特征点没有方向;

(2)提取到的特征点不满足尺度变化。

针对特征点不满足尺度变化,作者像SIFT算法中那样,建立尺度图像金字塔,通过在不同尺度下的图像中提取特征点以达到满足尺度变化的效果。

针对提取到的特征点没有方向的问题,作者采用了Rosin提出的一种称为“intensity centroid”的方法确定了特征点的方向。

那么,就来看一下确定特征点方向的方法。

1.2 Orientation by Intensity Centroid

这种方法的主要思想就是,首先把特征点的邻域范围看成一个patch,然后求取这个patch的质心,最后把该质心与特征点进行连线,求出该直线与横坐标轴的夹角,即为该特征点的方向。

那么,怎么求取这个邻域的质心呢?

论文中提到Rosin定义了如下公式: mpq=∑x,yxpyqI(x,y) 然后质心定义为: C=(m10m00,m01m00) 然后求取向量 OC 的方向,同时如果把 x,y 的范围保持在 [?r,r] 之间( r 为该特征点邻域的半径),以特征点为坐标原点,则得到的方向角为 θ=atan2(m01,m10)

作者在论文中提到,这种算法比BIN和MAX这两种求取特征点方向的方法都要好。

2、rBRIEF: Rotation-Aware Brief

2.1 Efficient Rotation of the BRIEF Operator Brief overview of BRIEF

下面我们队BRIEF算法进行一个简单的回顾:

BRIEF算法提取得到的特征点描述符是一个二进制的字符串,建设当前的一个特征点的邻域空间patch,设为 p ,那么对该面片 p 定义的一个二进制测试 τ(p;x,y):={1:p(x)<p(y)2:p(x)≥p(y)}< nobr="">其中 p(x) 表示的是在点 x 处的图像灰度值,那么这样我们就可以得到一个 n 位的二进制串 fn(p):=∑1≤i≤n2i?1τ(p;xi,yi) 对于 x和y 的坐标分布在本文中使用的是以特征点为中心的高斯分布,这种分布情况在Brief的论文原文中被证明是最好的。同样,本文中选择的 n=256 。

考虑到图像中有噪声的干扰,在实际的求取特征点描述符的过程中,需要对图像进行平滑操作。论文中使用的方法是,在对比操作 τ 进行的时候,不是对比的一个点,而是对比的在 31?31 的patch中的若干个 5?5 的子窗口。

上面就是BRIEF算法的一个简单回顾,BRIEF算法形成的描述符对于旋转操作非常敏感,当旋转的角度增大时,利用BRIEF算法的描述符进行匹配的结果极大的降低。如下图所示:

图中x轴表示的是旋转的角度,y轴表示匹配结果中正确匹配所占的百分比。可以看出,随着旋转角度的增大,BRIEF算法的匹配效果迅速的降低,旋转角度在45度以上时,正确率几乎为0。那么这就引出了我们接下来要介绍的Steered BRIEF算法。

Steered BRIEF算法介绍

想要让BRIEF算法具有旋转不变性,那么我们需要使特征点的邻域旋转一个角度,该角度就是我们上面求得的特征点的方向角 θ 。但是这样整体旋转一个邻域的开销是比较大的,一个更加高效的做法就是旋转我们前面得到的那些邻域中的匹配点 xi、yi 。

设生成特征点描述符的 n 个测试点对为 (xi,yi) ,定义一个 2×n 的矩阵 S=(x1,y1,......,xn,yn) 利用角度 θ 形成的旋转矩阵为 Rθ ,那么旋转后匹配点的坐标为 Sθ=RθS 这样,在求取特征点描述符的时候,就使用 Sθ 中的像素点即可。

2.2 Variance and Correlation

作者提到,BRIEF的一个比较好的特性是,对于所有的特征点上的每一位(bit)上的值的平均值都非常接近0.5(这里的平均值比较难理解,举个例子,比如说 n 个特征点中的所有的第 i 位的平均值),同时平均值的分布的方差较大。这样很显然有一个好处,就是方差越大说明数据的差异性越大,也就是说更能很好的区分不同的点。下图为作者取100k个特征点中的256位中各位的平均值分布,其中横坐标为平均值与0.5的差值,纵坐标是位的个数:

可以看出BRIEF的所有特征点各个位上的平均值分布为以0.5为均值,方差很大的一个高斯分布。

同样看上面这个图,我们发现steered BRIEF算法的结果中,所有特征点在各个位上的平均的分布则比较平均,这是因为进行旋转角度 θ 以后,均值就漂移到更加均衡的模式。

作者同时对BRIEF、Steered BRIEF和rBRIEF(后面会讲到)提取的100k个特征点的描述符进行PCA提取主成份,根据得到的特征值进行分析,如下图所示:

可以看出BRIEF和Steered BRIEF中前几个特征值比较大,那么基本上所有的信息都集中在这这面的若干维中,而Steered BRIEF算法得到的特征值比BRIEF的特征值小很多,因此Steered BRIEF得到的描述符的方差分布小,也就意味的区分能力比较差。

我们从另一个角度也可以证实这一点,如下图所示,实线表示的是匹配成功的点的距离的分布,虚线表示的是匹配失败的点的距离的分布,横坐标是距离,纵坐标是频率:

可以看出相比BRIEF和rBRIEF,steered BRIEF得到的匹配结果中,匹配失败的点的距离分布的平均值推左(论文中的push left,其实就是平均值偏小)了,这也就造成了成功和失败的点的距离中有更多的交集。同时也就意味着匹配结果的不理想。

2.3 Learning Good Binary Features

为了弥补Steered BRIEF算法造成的方差变小的缺陷,同时降低各个特征点的邻域内的匹配点对的相关性,作者使用了一种学习的方法来从邻域的所有可能的匹配点对中选出一个表现较好的子集用来生成特征点描述符。

作者首先从PASCAL 2006的图像库中提取了300k个特征点作为训练集,然后从每个特征点的 31×31 大小的邻域中穷举出所有可能的 5×5 的匹配子窗口。假设 wp 为总邻域的边长, wt 作为子窗口的边长,那么再这个邻域中一共有 N=(wp?wt)2 个子窗口存在,从其中任意挑选2个子窗口,则有 (N2) 种可能的选择,然后去掉其中重叠的子窗口的匹配可能,对于作者的实验中,总共有205590种可能的匹配子窗口。

然后算法运行如下:

(1)对于每个特征点的邻域中所有可能的子窗口进行匹配,则得到205590个匹配结果,这作为一行,由于一共有300k个特征点,因此能够形成一个 300000×205590 的矩阵;

(2)对于这个矩阵,求各列的平均值,并按照离0.5的大小从小到大进行排序,并记录每列是由哪一对位置 x和y 的比较构成的,每队看做一个元素,构成向量 T ;

(3)贪婪搜索:

*(a)取出距离0.5最近的两个位置放到 R ,并在 T 中删除;

(b)在去除 T 中距离0.5最近的两个位置,判断该位置与 R 中已经存在的关联性是否达到阈值,如果达到则抛弃当前的位置,如果没有达到则把它加入到 R 中;

(c)反复执行(a)、(b)中的操作,直到 R 中有256对,如果执行一遍没有达到256,那么提高(b)中的阈值,再次进行此操作,直到选出256对为止。*

利用这样搜索出来的256对位置生成特征点描述符的方法就是我们前面提到的rBRIEF。

至此我们讲的oFAST + rBRIEF即为ORB算法。

FAST算法简单介绍

FAST算法是ECCV 2006上发表的Machine learning for high-speed corner detection上提出的,从论文名字中就可以看出,这是一种检测特征点的方法。

具体内容如下:

判别特征点 p 是否是一个特征点,可以通过判断以该点为中心画圆,该圆过16个像素点。设在圆周上的16个像素点中是否最少有 n 个连续的像素点满足都比 Ip+t 大,或者都比 Ip?t 小。(这里 Ip 指的点 p 的灰度值, t 是一个阈值)如果满足这样的要求,则判断 p 是一个特征点,否则 p 不是。在原论文中 n 的值一般设为12。

如下图所示:

由于在检测特征点时是需要对图像中所有的像素点进行检测,然而图像中的绝大多数点都不是特征点,如果对每个像素点都进行上述的检测过程,那显然会浪费许多时间,因此论文中采用了一种进行非特征点判别的方法。如上图中,对于每个点都检测第1、5、9、13号像素点,如果这4个点中至少有3个满足都比 Ip+t 大或者都比 Ip?t 小,则继续对该点进行16个邻域像素点都检测的方法,否则则判定该点是非特征点,直接剔除即可。

另外,对每个特征点设一个 bool 变量 Kp ,用来表示是否为角点, Kp=true 为角点。

阶段2对上面得到的特征点集进行训练,使用 ID3 算法建立一棵决策树,假设通过使用第 x 个像素点进行决策树的划分,那么对集合 P 得到的熵 K 是 H(P)=(c+cˉ)log2(c+cˉ)?clog2c?cˉlog2cˉ 其中 c 为角点的数目, cˉ 为非角点的数目。

由此得到的信息增益为 H(P)?H(Pd)?H(Ps)?H(Pb) 然后选择使信息增益最大位置进行分割,最终得到这棵决策树。以后再有类似的场景进行特征点检测时,则使用该决策树进行检测。

特征点匹配——ORB算法介绍相关推荐

  1. 特征点匹配——FREAK算法介绍

    FREAK算法是ICCV 2012上的一篇关于特征点检测与匹配的论文<FREAK: Fast Retina Keypoint>上提出的,从文章标题中可以看出来该算法的一个特点是快速,另外一 ...

  2. 二分图匹配Hopcroft-Carp算法介绍

    我们在做二分图匹配的时候,最喜欢选择的就是匈牙利算法,但是我们可以知道匈牙利算法的复杂度是O(n*e),那么如果对于一个点和边比较多的图,匈牙利算法很容易超时,所以我们采用Hopcroft-Carp算 ...

  3. [图像特征匹配]SIFT、SURF、ORB算法笔记以及代码实现

    SIFT.SURF.ORB算法学习笔记 文章目录 SIFT.SURF.ORB算法学习笔记 一. SIFT (1)构建尺度空间 (2)使用DOG近似LOG定位极值点(关键点) (3)计算关键点方向 (4 ...

  4. ORB算法——特征提取特征匹配

    特征提取 Abstract ORB(Oriented Fast and Rotated Brief),可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象. 其中,Fast ...

  5. 图像特征算法(三)——ORB算法简述及Python中ORB特征匹配实践

    计算机视觉专栏传送 上一篇:图像特征算法(二)--SURF算法简述及Python标记SURF特征检测实践 下一篇:持续创作中- 目录 计算机视觉专栏传送 一.ORB算法 1.算法简介 2.FAST寻找 ...

  6. 特征点检测和特征点匹配(ORB)

    前言 本文介绍了特征点检测的一些算法,然后基于OpenCV的ORB,实现了不同尺度和旋转的图像特征点匹配. 本文用到的代码存储在这里. 特征点是什么? 当我们人在对比两张图片时(例如上面的妙蛙种子), ...

  7. 【图像特征提取与匹配】ORB算法详述

    ORB算法 ORB(Oriented FAST and Rotated BRIEF)特征是目前看来非常具有代表性的实时图像特征.它改进了 FAST(Features from Accelerated ...

  8. java opencv orb_OpenCV提取ORB特征并匹配

    一.什么是特征? 图像的特征(Feature),是图像上最具代表性的一些点.所谓最具代表性,就是说这些点包含了图像表述的大部分信息.即使旋转.缩放,甚至调整图像的亮度,这些点仍然稳定地存在,不会丢失. ...

  9. opencv上gpu版surf特征点与orb特征点提取及匹配实例

    opencv上gpu版surf特征点与orb特征点提取及匹配实例 标签: gpu版surfgpu orbsurf和orbgpu surf及orbsurf orb gpu 2016-09-25 23:4 ...

最新文章

  1. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
  2. linux搭建SonarQube_Oracle
  3. 理解 JavaScript 闭包{转载}
  4. MyBatis插件开发:简单分页插件
  5. vector初始化与清空
  6. 互联网思维心得体会1500字_互联网思维心得分享
  7. 笔记本搜不到WiFi是什么原因
  8. pe和linux一起安装到移动硬盘,能否把winpe安装到移动硬盘上
  9. 用户输入一个字符串,请将字符串中的所有字母全部向后移动移动一位,最后一个字母放到字符串的开头,最后将新的字符串输出。
  10. chrome安装js插件
  11. win10下速腾聚创RS-Lidar-32配置教程
  12. FXS/FXO, BRI/PRI, IPPBX, IAD
  13. python大学生生活信息交互平台的设计与实现毕业设计源码031315
  14. 安全产品设计的重要性
  15. [转]操作系统Unix、Windows、Mac OS、Linux的故事
  16. SDUT 1478 琳琳选夫婿
  17. 欧几里德算法的个人理解
  18. Be Free - Belinda
  19. 删除网络共享连接凭据的两种方法
  20. 洛谷$P2570\ [ZJOI2010]$贪吃的老鼠 网络流+二分

热门文章

  1. 《大众创业做电商——淘宝与微店 开店 运营 推广 一册通》一一第2章 电子商务基础...
  2. 【数字化】解读数字化工厂顶层设计与规划
  3. QString和wchar_t相互转换
  4. 【C语言】控制台参数模板
  5. photoshop2020 选择“主题”后闪退的解决方法
  6. miui12怎么自定义开机动画_触碰想象,感受真实!一文看懂MIUI12,超40款机型适配...
  7. nuxt.js的ssr渲染
  8. 创意灵感灯泡手绘PPT模板
  9. 第五代 智能计算机和生物计算机
  10. pycrypto安装错误