参考:

  1. https://zhuanlan.zhihu.com/p/91479558
  2. https://zhuanlan.zhihu.com/p/36382429
  3. https://zhuanlan.zhihu.com/p/61738607
  4. https://blog.csdn.net/frozenspring/article/details/78146076

    文章目录

    • 为什么要引入ORB
    • 什么是ORB
      • FAST
      • Oriented FAST
      • BRIEF描述子
        • Hamming距离
      • 改进的BRIEF

为什么要引入ORB

在ORB之前,有SIFT、SURF,虽然具有良好的旋转不变性、光照不变性等,但这两个检测方法需要的时间实在是有些长,尤其是SIFT。下图是ORB文献里提到的每种方法检测一帧图像(640*480)所用的时间:

可以看出来,ORB在速度上的确是快很多。

什么是ORB

ORB全称是Oriented FAST and Rotated BRIEF,是目前最快速稳定的特征点检测和提取算法,许多图像拼接和目标追踪技术都是利用ORB特征进行实现。


ORB=Oriented FAST + Rotated BRIEF

FAST

全称:Features From Accelerated Segment Test
主要特点就是速度快。

Rosten等人将FAST角点定义为:若某像素点与其周围邻域内足够多的像素点处于不同的区域,则该像素点可能为角点。


Step1 确定候选角点

  1. 选择要判断的像素 p p p,其像素值为 I p I_p Ip​。以 p p p 为圆心,半径为3,能得到离散化的Bresenham圆,这个圆的边界上有16个像素,分别记为 p 1 , p 2 . . . p 16 p_1,p_2...p_{16} p1​,p2​...p16​。
  2. 设定一个阈值 t t t,例如 I p I_p Ip​的20%。
  3. 让圆上的像素点的像素值与中心点 p p p做差,如果有连续 n个点的像素值都大于 I p + t I_p+t Ip​+t或小于 I p − t I_p-t Ip​−t,那就把这个中心点作为一个候选角点。根据经验,一般取n=12,即为FAST-12,有时候也会取9或11,分别被称为FAST-9、FAST-11。
    (看文献的时候好像是取的FAST-9???)

补充:
在特征检测过程中,一幅图像中绝大多数点都不是特征点,在确定候选角点的过程中,如果每个点都要进行周围16个像素点的计算比较,未免太浪费时间了。于是提出了一种高效的测试来快速排除一大部分非角点的像素:该方法仅检查第1、5、9、13号(即上下左右四个点)的像素值,首先检测1和9,如果满足条件,再检测5和13。这样做的原因是如果p是一个角点,超过四分之三圆的部分应该满足判断条件,所以当1、5、9、13中至少有三个点都大于 I p + t I_p+t Ip​+t或小于 I p − t I_p-t Ip​−t才有可能是一个角点,然后才继续对其他像素点进行判断,否则直接剔除。

上面的算法效率实际上是很高的,但是有点一些缺点:

  1. 当我们设置n<12时就不能使用快速算法来过滤非角点的点;
  2. 检测出来的角点不是最优的,这是因为它的效率取决于问题的排序与角点的分布;
  3. 对于角点分析的结果被丢弃了;
  4. 多个特征点容易挤在一起。

Step2 非极大值抑制

经过第一步的检测,得到了很多候选特征点,但有个问题是:这些特征点很可能是“挤”在一起的,所以需要对这些点再次进行筛选。可以采用非极大值抑制的方法解决这个问题。

  1. 为每一个检测到的特征点计算它的响应值 V V V,即为点 p p p 和它周围16个像素点的绝对偏差的和;
  2. 比较相邻特征点(例如设定一个阈值半径,比较两点的距离)的响应值;
  3. 剔除响应值较小的特征点,即把非最大的角点抑制掉。

到这FAST特征点检测的步骤介绍完了…

FAST缺点:
缺少尺度不变性和旋转不变性


Oriented FAST

FAST角点本身不具有方向,但是在特征点匹配的时候是需要的,所以在ORB中,对FAST做了改进,改进后的称为Oriented FAST,具有尺度和旋转的描述。

旋转不变性 ----- 灰度质心法
灰度质心法假设角点的灰度和质心存在偏移,这个向量能够计算出一个方向。

  1. 以像素 p p p 为中心,设定一个图像块,计算图像块的矩
  2. 通过矩可以计算得到图像块的质心C
  3. 连接图像块的几何中心 p p p 和质心C,得到一个方向向量 OC(假设OC上有个箭头,表示向量),这就是特征点p的方向。
    θ=atan2( m 01 , m 10 m_{01},m_{10} m01​,m10​)

    从上图可以看出来,灰度质心法(IC)在人工旋转噪声影响下,与直方图算法和MAX算法相比,具有最好的恢复主方向的性能。

尺度不变性 ----- 构造图像金字塔

  1. 对图像做不同尺度的高斯滤波;
  2. 对图像做降采样(隔点采样)
  3. 对金字塔的每一层都提取FAST特征点
  4. n幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。

BRIEF描述子

全称:Binary Robust Independent Elementary Features

2010年提出的,是对已有特征点进行描述的一种二进制描述子,摒弃了利用区域灰度直方图描述特征点的传统方法,采用二进制、位异或运算,大大加快了特征描述符建立的速度,同时也降低了特征匹配的时间。

  1. 为减少噪声影响,需要先对图像进行滤波;
  2. 以特征点为中心,在特征点周围选择一个Patch;
  3. 在这个Patch内通过一种选定的方法来挑选出来 n d n_d nd​(一般为256)个点对。 对于每一个点对 ( p , q ) (p,q) (p,q),我们来比较这两个点的亮度值,如果 I ( p ) > I ( q ) I(p)>I(q) I(p)>I(q)则这个点对生成了二值串中一个的值为1,如果 I ( p ) < I ( q ) I(p)<I(q) I(p)<I(q),则对应在二值串中的值为-1,否则为0。
  4. 所有 n d n_d nd​个点对,都进行比较之间,我们就生成了一个 n d n_d nd​ 长的二进制串。

这个特征可以由 n d n_d nd​位二进制测试向量表示,BRIEF描述子

这里面,最关键的就是随机特征点对的选取:

设我们在特征点的邻域块大小为 S × S S×S S×S内选择 n d n_d nd​个点对 ( p , q ) (p,q) (p,q),Calonder的实验中测试了5种采样方法:

1)在图像块内平均采样, ( − S 2 , S 2 ) (-\frac{S}{2},\frac{S}{2}) (−2S​,2S​);

2) p p p 和 q q q 都符合 ( 0 , 1 25 S 2 ) (0,\frac{1}{25}S^2) (0,251​S2)的高斯分布,准则采样服从各向同性的同一高斯分布;

3) p p p 符合( ( 0 , 1 25 S 2 ) (0,\frac{1}{25}S^2) (0,251​S2)的高斯分布,而 q q q 符合 ( x i , 1 100 S 2 ) (x_i,\frac{1}{100}S^2) (xi​,1001​S2)的高斯分布,采样分两步进行:首先在原点处为 p p p 进行高斯采样,然后在中心为 p p p 处为 q q q 进行高斯采样;

4) p , q p,q p,q 在空间量化极坐标下的离散位置处进行随机采样;

5)把 p p p 固定为 ( 0 , 0 ) (0,0) (0,0), q q q 空间量化极坐标下的离散位置处进行随机采样;

这5种方法生成的256对(OpenCV中用32个字节存储这256对)随机点如下(一条线段的两个端点是一对):

经过上面的步骤,我们就可以为每个特征点表示为一个256bit的二进制编码。

Hamming距离

描述子主要就是为了进行特征匹配,那BRIEF描述子是怎么实现匹配的呢-----Hamming 距离

汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。

  1. 两个特征编码对应bit位上相同元素的个数小于128的,一定不是配对的。
  2. 一幅图上特征点与另一幅图上特征编码对应bit位上相同元素的个数最多的特征点配成一对。

其实就是按位求异或的过程。(相同为0,不同为1)

BRIEF的耗时非常短,在相同情形下计算512个特征点的描述子时,SURF耗时335ms,BRIEF仅8.18ms;匹配SURF描述子需28.3ms,BRIEF仅需2.19ms。在要求不太高的情形下,BRIEF描述子更容易做到实时。

但是对于BRIEF来说,描述子里不包含旋转属性,所以一旦匹配图片有稍微大点的旋转角度,按照Hamming算法,匹配度将会大幅下降。

改进的BRIEF

Steered BRIEF — 旋转不变性改进
在使用oFast算法计算出的特征点中包括了特征点的方向角度。假设原始的BRIEF算法在特征点SxS(一般S取31)邻域内选取n对点集。经过旋转角度θ旋转,得到新的点对,在新的点集位置上比较点对的大小形成二进制串的描述符。这里需要注意的是,在使用oFast算法是在不同的尺度上提取的特征点。因此,在使用BRIEF特征描述时,要将图像转换到相应的尺度图像上,然后在尺度图像上的特征点处取SxS邻域,然后选择点对并旋转,得到二进制串描述符。

  1. ORB算法进一步增强描述子的抗噪能力,采用积分图像来进行平滑;
  2. 在特征点的31x31邻域内,产生随机点对,并以随机点为中心,取5x5的子窗口。
  3. 比较两个随机点的子窗口内25个像素的大小进行编码(而不仅仅是两个随机点了)

ORB算法采用关键点的主方向来旋转BEIEF描述子

最后,rBRIEF-改进特征点描述子的相关性

使用steeredBRIEF方法得到的特征描述子具有旋转不变性,但是却在另外一个性质上不如原始的BRIEF算法。是什么性质呢,是描述符的可区分性,或者说是相关性。这个性质对特征匹配的好坏影响非常大。描述子是特征点性质的描述。描述子表达了特征点不同于其他特征点的区别。我们计算的描述子要尽量的表达特征点的独特性。如果不同特征点的描述子的可区分性比较差,匹配时不容易找到对应的匹配点,引起误匹配。

ORB论文中,作者用不同的方法对100k个特征点计算二进制描述符,对这些描述符进行统计,如下表所示:

特征描述子的均值分布。X轴代表距离均值0.5的距离;y轴是相应均值下的特征点数量统计

我们先不看rBRIEF的分布。对BRIEF和steeredBRIEF两种算法的比较可知,BRIEF算法落在0上的特征点数较多,因此BRIEF算法计算的描述符的均值在0.5左右,每个描述符的方差较大,可区分性较强。而steeredBRIEF失去了这个特性。

至于为什么均值在0.5左右,方差较大,可区分性较强的原因,这里大概分析一下。这里的描述子是二进制串,里面的数值不是0就是1,如果二进制串的均值在0.5左右的话,那么这个串有大约相同数目的0和1,那么方差就较大了。用统计的观点来分析二进制串的区分性,如果两个二进制串的均值都比0.5大很多,那么说明这两个二进制串中都有较多的1时,在这两个串的相同位置同时出现1的概率就会很高。那么这两个特征点的描述子就有很大的相似性。这就增大了描述符之间的相关性,减小之案件的可区分性。

下面我们介绍解决上面这个问题的方法:rBRIEF。

原始的BRIEF算法有5种去点对的方法,原文作者使用了方法2。为了解决描述子的可区分性和相关性的问题,ORB论文中没有使用5种方法中的任意一种,而是使用统计学习的方法来重新选择点对集合。

首先,建立300k个特征点测试集。

备注:
对于测试集中的每个点,预处理参考第一个步骤。考虑其31x31邻域。这里不同于原始BRIEF算法的地方是,这里在对图像进行高斯平滑之后,使用邻域中的某个点的5x5邻域灰度平均值来代替某个点对的值,进而比较点对的大小。这样特征值更加具备抗噪性。另外可以使用积分图像加快求取5x5邻域灰度平均值的速度。
其次,特征点选取

从上面可知,在31 x 31的邻域内共有(31-5+1)x(31-5+1)=729个这样的子窗口,那么取点对的方法共有M=205590种,我们就要在这M种方法中选取256种取法,选择的原则是这256种取法之间的相关性最小。怎么选取呢?

  • 在300k特征点的每个31x31邻域内按M种方法取点对,比较点对大小,形成一个300k x M的二进制矩阵Q。矩阵的每一列代表300k个点按某种取法得到的二进制数。
  • 对Q矩阵的每一列求取平均值,按照平均值到0.5的距离大小重新对Q矩阵的列向量排序,形成矩阵T。
  • 将T的第一列向量放到R中
  • 取T的下一列向量和R中的所有列向量计算相关性,如果相关系数小于设定的阈值,则将T中的该列向量移至R中。
  • 按照第四步的方式不断进行操作,直到R中的向量数量为256。

通过这种方法就选取了这256种取点对的方法。这个算法是对均值靠近0.5的不相关测试进行贪婪搜索,结果称为rBRIEF。rBRIEF在方差和相关性上与旋转BRIEF相比有明显进步(如图4)。PCA的特征值较高,它们的下降速度要快得多。


图解:三个特征向量超过100k个关键点的PCA分解的特征值分布:BRIEF,旋转BRIEF,和rBRIEF。

BRIEF描述子的点对是随机生成的,一个自然的疑问是不同的随机序列带来的效果是否一致?显然答案是否定的。

现在看不懂,回头再看:
为了找出更优的描述量,我们从大数据集中提取了300k个特征点,对每个特征点使用M个不同的随机点对序列组成不同的向量,并合成一个300k×M300k×M的矩阵,矩阵每一列代表使用点对ppippi取得的二进制数。将这些列向量按照他们的variance从大到小排列。然后使用贪心算法去掉相关度过高的列向量,取得最优的256个向量对应的点对位置。通过这些位置得到的描述量称为rBRIEF描述量。这是所谓的全局最优点对序列。ORB特征即采用了这个描述子。

至此,ORB的优化就结束了。我们尝试总结一下:

  • FAST是用来寻找特征点的。ORB在FAST基础上通过金字塔、质心标定解决了尺度不变和旋转不变。即oFAST
  • BRIEF是用来构造描述子的。ORB在BRIEF基础上通过引入oFAST的旋转角度和机器学习(???)解决了旋转特性和特征点难以区分的问题。即rBRIEF.

特征检测---ORB相关推荐

  1. 【opencv学习】图像特征检测

    import cv2 import numpy as np import matplotlib.pyplot as plt# 什么是特征? # 当你看到芒果图像时,如何识别它是芒果? # 通过分析颜色 ...

  2. OpenCV特征检测,角检测,特征点检测,特征匹配,对象查找

    特征检测 图像的特征是指图像中具有独特性和易于识别性的区域,角.边缘等都属于有意义的特征. 8.1角检测 角是两条边的交点,也可称为角点或拐角,它是图像中各个方向上强度变化最大的区域. OpenCV的 ...

  3. 【OpenCV-Python】28.OpenCV的特征检测——特征点检测

    28.OpenCV的特征检测--特征点检测 文章目录 前言 一.FAST特征检测 二.SIFT特征检测 三.ORB特征检测 四.OpenCV-Python资源下载 总结 前言   特征点是图像中具有唯 ...

  4. 图像配准,特征点提取与匹配

    图像配准 本文为原创文章,转载请注明出处** 目录 一.图像配准概述 二.图像匹配算法 SIFT SURF ORB 暴力匹配 FLANN 深度学习(superpoint) 三.各算法对比 四.图像配准 ...

  5. 十.OpenCv 特征点检测和匹配

    特征点检测和匹配 1. 特征检测的基本概念 特征检测是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征检测的结果是把图像上的点分为不同的子集 ...

  6. Opencv2.4.9源码分析——Stitching(一)

    相机镜头所呈现出的景物要比人类的视觉系统所看到的景物要狭小得多,因此一幅图像不可能捕获到我们所看到的整个景物.全景图像拼接给出了这个问题的解决办法,它是把图像间重叠部分拿出来拼接起来,从而得到一幅更大 ...

  7. 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 什么叫特征检测?就是检测图像中目标的特征呗,所谓 ...

  8. OpenCV 尺度不变特征检测:SIFT、SURF、BRISK、ORB

    这个学期在上数字图像处理这门课.这门课没有考试,只有大作业,要求使用labwindows和NI Vision进行开发.我选的题目是全景图像的合成(图像拼接),其中要使用到一些特征点检测和匹配的算法.本 ...

  9. SLAM中的 ORB特征检测与匹配(理论篇)

    <SLAM十四讲>视觉里程计第一部分的实践便是ORB特征检测 下面来讲讲ORB的理论: ORB算法分为两部分,第一部分是特征提取算法即FAST算法,第二部分是特征描述子BRIEF,BRIE ...

最新文章

  1. python csv模块心得
  2. ArcGIS API for Silverlight 入门学习笔记(三):基础地图实例
  3. OCR识别-python版(一)
  4. 【Python 】单引号和双引号有什么区别?
  5. python学习笔记——文件
  6. Eclipse卸载插件SpringSoource-tool-suite
  7. 网易java笔试题_网易笔试题详细解答(Java)
  8. Redis 3.2.x版本 redis.conf 的配置文件参数详解
  9. Linux忘记root密码重置密码方法
  10. 技术美术知识学习4200:SSAO算法
  11. 如何给一个App起名字?
  12. Ubuntu20.04英文系统无法安装中文智能拼音输入法
  13. mysql jena rdf_Jena 操作 RDF 文件
  14. Hbase Schema设计与数据模型操作
  15. 怎么修复松下相机死机断电MDT文件为MOV或MP4视频
  16. STM32F103RCT6
  17. 软件卸载清理工具IObit Uninstaller Pro 中文版的下载、安装与注册激活教程
  18. 大数据基石——Hadoop与MapReduce
  19. sketch首款主题管理插件-主题大师
  20. 软件和 IT 服务成美国收入最高行业;黑客组织 OurMine 宣称攻陷维基解密网站

热门文章

  1. 程序员如果都懂SpringWebFlux框架的话,也不用天天CRUD了
  2. 安徽大学计算机专业毕业论文格式,安徽大学本科生毕业论文撰写标准示范.doc...
  3. 大连东软信息学院Linux模拟题 答案,大连东软信息学院Linux系统编程期末考试试题...
  4. OA办公系统:将企业拉出管理泥潭
  5. 【论文阅读】边缘服务器网络(抵御DDos攻击)平衡请求负载
  6. 什么是爬虫|Python爬虫的原理是什么
  7. vivo的android版本功能介绍,vivoX30发布,全新版本OS,新功能应用分享登场
  8. 算法复杂度分析(3600字)
  9. 复习笔记之——ROS(robot operating system)
  10. 我的记事本 第一讲:文件的打开与关闭