ORB: an efficient alternative to SIFT or SURF

来源:互联网 发布:ubuntu 界面 编辑:程序博客网 时间:2024/04/30 15:07

  • 介绍
  • FAST关键点
  • rBRIEF描述子

转载请注明出处:http://blog.csdn.net/c602273091/article/details/56008370

介绍

目前SIFT特征准确度高,但是计算复杂度也高。很多时候需要用到匹配、追踪什么的,使用SIFT就比较慢。本文作者提出了ORB(Oriented FAST and Rotation BRIEF)特征。ORB有个特点是这个特征没有申请专利,另外这种特征的好处是:

  1. 给FAST检测子方向和快速计算;
  2. 高效计算带有方向的BRIEF特征

关键点(keypoint 就是图片中比较重要的位置,比如角点)使用FAST检测子寻找。

描述子(descriptor 就是对关键点进行描述)这里使用的是BRIEF描述子。但是BRIEF没有方向,所以这里就给BRIEF一个方向。

FAST关键点

FAST的基本方法可以写成:
这里写图片描述

图中是计算半径为3的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特征找到了关键点的位置和方向。

下面是详细的步骤:

  1. 为减少噪声干扰,先对图像进行高斯滤波(方差为2,高斯窗口为9x9)。
  2. 以特征点为中心,取SxS的邻域大窗口。在大窗口中随机选取一对(两个)5x5的子窗口,比较子窗口内的像素和(可用积分图像完成),进行二进制赋值。(一般S=31)
    这里写图片描述
  3. 在大窗口中随机选取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的计算特征的部分,再梳理一遍。

参考链接:

FAST Corner:

【1】 http://blog.csdn.net/hujingshuang/article/details/46898007#reply

【2】 http://blog.csdn.net/went2011/article/details/8020943

【3】 http://blog.csdn.net/candycat1992/article/details/22285979

【4】 http://blog.csdn.net/yang_xian521/article/details/7411438

【5】 http://www.tuicool.com/articles/e6Bv2q

Brief:

【6】 http://www.mamicode.com/info-detail-922469.html

【7】 http://blog.csdn.net/lhanchao/article/details/52612954

【8】 http://blog.csdn.net/eternity1118_/article/details/51182354

【9】 http://blog.csdn.net/eternity1118_/article/details/51351514

【10】 http://blog.csdn.net/lhanchao/article/details/52612954

【11】 http://wenku.baidu.com/link?url=vq8-lKMiQa90mlz4dk6CvN0IegknJmlvJfHeFYpSbjqGs06e-WopvHgq9pgreJkIfon7N4KfIIH16NQt0cuzdpwAkxLwjKxs9YVEwxnVmqC

1 0
原创粉丝点击