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

介绍

目前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→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

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

ORB:FAST关键点和rBRIEF描述子相关推荐

  1. ORB特征和FAST关键点 笔记

    ORB特征和FAST 关键点 1. ORB特征 ORB特征由关键点和描述子两部分组成.它的关键点称为"Oriented FAST",是 一种改进的FAST角点,什么是FAST角点我 ...

  2. 详细解读ORBSLAM中的描述子提取过程

    一直都在基于ORBSLAM做一些相关的开发,只知道进来的图片会直接提取出BRIEF描述子,但是都没有详细地看过它具体的提取过程,今天仔细研究了一下代码和相关理论,弄清楚之后感觉神清气爽,部分内容查找有 ...

  3. 特征描述子提取公用接口

    OpenCV封装了一些特征描述子提取算法,使得用户能够解决该问题时候方便使用各种算法.这章用来计算的描述子提取被表达成一个高维空间的向量 vector.所有实现 vector 特征描述子子提取的部分继 ...

  4. SLAM--PL-SLAM中基于线特征的初始化方法(LSD算法,LBD描述子,计算R和t)

    SLAM中基于线特征的初始化方法 线特征的初始化 直线段检测算法---LSD:a Line Segment Detector 描述子---LBD:Line detection and descript ...

  5. 即将开源STD:用于3D位置识别的稳定三角形描述子

    文章:STD: Stable Triangle Descriptor for 3D place recognition 作者:Chongjian Yuan, Jiarong Lin , Zuhao Z ...

  6. 图像局部特征(十一)--ORB描述子

     Oriented FAST and Rotated BRIEF www.cnblogs.com/ronny 这篇文章我们将介绍一种新的具有局部不变性的特征 -- ORB特征,从它的名字中可以看出 ...

  7. ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子

    //这个是类ORBextractor的带参构造函数,并且使用初始化列表对该类中的这5个变量赋值 ORBextractor::ORBextractor(int _nfeatures, float _sc ...

  8. ZippyPoint: 一种基于学习的特征点提取+二进制描述子,速度提升5倍+,为移动平台提供一种ORB的替代方案...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Realcat 来源丨 计算机视觉SLAM 作者来自ETHZ Computer Vision实验 ...

  9. opencv中java的dmatch_关于OpenCV的那些事——ORB的brief描述子(256bit)的match心得

    用了ORB那么久,今天第一次将256bit的描述子打印出来,直观看到了match的汉明距离. 上代码:#include #include #include #include #include #inc ...

最新文章

  1. 关于JS中switch语句的判断条件!
  2. 你真的会写二分查找吗?
  3. 惠普打印机节能环保认证证书_学生在家学习 入门级喷墨打印机 300元-500元档
  4. RocketMQ消息存储、刷盘、负载均衡
  5. Linux 创建用户并限制其访问目录,设置密码为永不过期
  6. mysqluuid去除横岗
  7. 总结《Ray Tracing from the Ground Up》
  8. pre和code的区别
  9. Python3 函数参数
  10. Windows华丽变身MAC OS X
  11. 电子版白底寸照如何制作
  12. 开放式耳机新巅峰!南卡OE Pro兼备澎湃音质、舒适佩戴、创新设计
  13. 计算机的正确配置文件,显示器颜色配置文件在win10电脑中设置正确配置的方法...
  14. 禾穗HERS | 没人diss你,你就厉害了?
  15. Android快速入门教程1
  16. Mapbox使用详解
  17. Android Cursor的一些浅显见解
  18. 小孢子的神奇之旅-如何阅读MindSpore报错信息(1)
  19. [WPF实践之路] 目录导航
  20. iOS-地图真实坐标表示形式之间转换(double型,int型 互转)

热门文章

  1. jenkins持续集成与持续交付
  2. 【ChatGPT 中文版插件】无需注册体验 ChatGPT 的攻略
  3. leetcode576. 出界的路径数
  4. 离线安装docker,docker安装MySQL,Redis,ES,Kibana,mongoDB,RocketMQ
  5. 天才制造者:独行侠、科技巨头和AI|深度学习崛起十年
  6. 带双参数的双极S型函数
  7. 新连接?新商业 一场关于商业变革的活动正在进行
  8. 啃传奇服务器端的源码
  9. 第2次实验——算法基本功 与 综合思考
  10. java 消息签名_微信公众平台消息体签名及加解密实例(Java)