首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ORB: an efficient alternative to SIFT or SURF

ORB: an efficient alternative to SIFT or SURF

本帖最后由 look_w 于 2017-11-4 12:50 编辑

介绍目前SIFT特征准确度高,但是计算复杂度也高。很多时候需要用到匹配、追踪什么的,使用SIFT就比较慢。本文作者提出了ORB(Oriented FAST and Rotation BRIEF)特征。ORB有个特点是这个特征没有申请专利,另外这种特征的好处是:
  • 给FAST检测子方向和快速计算;
  • 高效计算带有方向的BRIEF特征
关键点(keypoint 就是图片中比较重要的位置,比如角点)使用FAST检测子寻找。
描述子(descriptor 就是对关键点进行描述)这里使用的是BRIEF描述子。但是BRIEF没有方向,所以这里就给BRIEF一个方向。
FAST关键点FAST的基本方法可以写成:

1、计算1和9是否会大于阈值,如果大于阈值则可以进入下一个,否则就不是关键点。
2、计算1,9,5,13是不是大于阈值的个数超过3个,不是的话,就不是关键点。是的话进入下一步。
3、计算一个像素点,取周围距离为3的一个圆,然后这个像素点与周围的【1-16】的差值大于阈值的个数count,如果会大于阈值,则计算的count+1。如果count大于等于9,那么就作为候选项。
4、使用NMS,如果在3x3或5x5的邻域内,如果没有有比当前像素更大的score的点,那么就抑制这个点。
在ORB特征里,使用的是FAST-9,圆的半径是9(在这里也有人说FAST-9是半径为3,这个具体看了代码再说)
计算完这些以后,FAST特征没有对特征的正确度进行排序,所以这里使用了Harris角点进行计算排序。首先去较低的阈值获取超过N个关键点,然后再根据Harris角点的计算进行排序。与此同时,FAST没有产生多尺度的特征,所以使用在计算图片的尺度金字塔,在不同尺度计算FAST关键点。
之后需要计算FAST的方向了,在计算方向的时候,这里提出了一个叫做intensity centroid的东西。
具体计算方法就是:
  • 首先是计算moment,就是在某个领域内计算m,计算公式如下图:

  • 这里计算的就是强度中心。

  • 然后我们从中点O(也就是FAST的关键点)到C点就有了一个向量:
    OC




      计算FAST的方向就可以使用下面的公式计算咯。在ORB特征里面,它使用的领域就是一个圆。

作者在这里提到为了找到方向,他特地使用MAX和BIN的方法计算方向,但是他发现还是center centroid的方法最好。
rBRIEF描述子rBRIEF(rotation-aware BRIEF)描述子。
首先先来了解一下什么是BRIEF【6】、【7】、【8】、【9】、【10】、【11】。
描述子是对关键点进行一个描述,刚才我们已经通过了FAST特征找到了关键点的位置和方向。
下面是详细的步骤:
  • 为减少噪声干扰,先对图像进行高斯滤波(方差为2,高斯窗口为9x9)。
  • 以特征点为中心,取SxS的邻域大窗口。在大窗口中随机选取一对(两个)5x5的子窗口,比较子窗口内的像素和(可用积分图像完成),进行二进制赋值。(一般S=31)
  • 在大窗口中随机选取N对子窗口,重复步骤2的二进制赋值,形成一个二进制编码,这个编码就是对特征点的描述,即特征描述子。(一般N=256)
在随机选取特征点的时候,有几种随机选取的方法【6】。
在ORB特征中,选取的随机点是高斯分布的。长度n=256。在进行计算描述子的时候,采用的高斯核是5x5的31x31的区域内进行。
为了让BRIEF具有旋转不变性,这里使用了得当初寻找FAST的关键点的方向的作为BRIEF的方向,这样就可以得到:
  • 把关键点周围的要用来计算的坐标列成2xn的矩阵。

  • 计算通过旋转矩阵之后这些点的坐标。旋转矩阵就是[cos a  sin a; sin a -cos a]这个矩阵。

  • 这里就是计算旋转之后的坐标中取出点来计算BRIEF描述子。

所以从整个步骤中我们可以看到ORB特征还是比较简单的,复杂度也比较低,速度很快。有方向和尺度的信息,这是之前BRIEF没有的。
具体的这个特征的分析,比如后面PCA说为什么ORB更好呀,就得自己看论文咯,已经写得很清楚了。当然特征还有SIFT、SURF、AKAZE、HIST等等。之前CV课上都有做过东西,没有来得及总结,以后有空再把追踪、场景识别、图像拼接等等这些东西从原理到代码介绍一遍。
看完这些,再回到ORB-SLAM的计算特征的部分,再梳理一遍。
返回列表