视觉slam-----第五篇 ORB特征
特征点
为了估计相机的运动,我们需要从图像中选取比较有代表性的点。这些点在相机视角发生少量变化后会保持不变,所以我们会在各个图像中找到相同的点。然后,在这些点的基础上,讨论相机位姿估计问题,以及这些点的定位问题。在经典 SLAM 模型中,把它们称为路标。而在视觉 SLAM 中,路标则是指图像特征(Features)。
特征是图像信息的另一种数字表达形式,在视觉里程计中,我们希望特征点在相机运动之后保持稳定。
常用的一些特征点算法,如著名的 SIFT, SURF,ORB等等,这些特征点能够拥有如下的性质:
- 可重复性(Repeatability):相同的“区域”可以在不同的图像中被找到。
- 可区别性(Distinctiveness):不同的“区域”有不同的表达。
- 高效率(Efficiency):同一图像中,特征点的数量应远小于像素的数量。
- 本地性(Locality):特征仅与一小片图像区域相关。
特征点由关键点(Key-point)和描述子(Descriptor)两部分组成。
关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。
描述子通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息。描述子是按照“外观相似的特征应该有相似的描述子”的原则设计的。
因此,只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是同样的特征点。
在slam中,由于ORB算法非常的快速,远大于SIFT和ORB算法,这里只介绍ORB特征。
ORB 特征
ORB 特征亦由关键点和描述子两部分组成。它的关键点称为“Oriented FAST”,是一种改进的 FAST 角点,它的描述子称为 BRIEF(Binary Robust Independent Elementary Features)。因此,提取 ORB 特征分为两个步骤:
- FAST 角点提取:找出图像中的” 角点”。相较于原版的 FAST, ORB 中计算了特征点的主方向,为后续的 BRIEF 描述子增加了旋转不变特性。
- BRIEF 描述子:对前一步提取出特征点的周围图像区域进行描述。
Oriented FAST角点检测
FAST 是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与它邻域的像素差别较大(过亮或过暗), 那它更可能是角点。过程如下:
- 在图像中选取像素 ,假设它的亮度为 。
- 设置一个阈值 (比如的 20%)。
- 以像素 为中心, 选取半径为 3 的圆上的 16 个像素点。
- 假如选取的圆上,有连续的 个点的亮度大于 或小于 ,那么像素 可以被认为是特征点 ( 通常取 12,即为 FAST-12。其它常用的 N 取值为 9 和 11,他们分别被称为 FAST-9,FAST-11)。
- 循环以上四步,对每一个像素执行相同的操作。
在 ORB 中,对原始的 FAST 算法进行了改进。我们可以指定最终要提取的角点数量,对原始 FAST 角点分别计算 Harris 响应值,然后选取前 个具有最大响应值的角点,作为最终的角点集合。
其次,FAST 角点不具有方向信息。而且,由于它固定取半径为 3 的圆,存在尺度问题:远处看着像是角点的地方,接近后看可能就不是角点了。针对 FAST 角点不具有方向性和尺度的弱点,ORB 添加了尺度和旋转的描述。尺度不变性由构建图像金字塔(金字塔是指对图像进行不同层次的降采样,以获得不同分辨率的图像),并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现的。
质心是指以图像块灰度值作为权重的中心。其具体操作步骤如下 :
- 在一个小的图像块 中,定义图像块的矩为:
- 通过矩可以找到图像块的质心:
- 连接图像块的几何中心 与质心 ,得到一个方向向量 ,于是特征点的方向可以定义为:
通过以上方法,FAST 角点便具有了尺度与旋转的描述,大大提升了它们在不同图像之间表述的鲁棒性。所以在 ORB 中,把这种改进后的 FAST 称为 Oriented FAST。
BRIEF 描述子
BRIEF 是一种二进制描述子,它的描述向量由许多个 0 和 1 组成,这里的 0 和 1 编码了关键点附近两个像素(比如说 和)的大小关系:如果 p 比 q 大,则取 1,反之就取 0。如果我们取了 128 个这样的 p, q,最后就得到 128 维由 0,1 组成的向量。
和的选取在作者原始的论文中给出了若干种挑选方法,大体上都是按照某种概率分布,随机地挑选 p 和 q 的位置,BRIEF 使用了随机选点的比较,速度非常快,而且由于使用了二进制表达,存储起来也十分方便,适用于实时的图像匹配。
原始的 BRIEF 描述子不具有旋转不变性的,因此在图像发生旋转时容易丢失。而 ORB 在 FAST 特征点提取阶段计算了关键点的方向,所以可以利用方向信息,计算了旋转之后的“Steer BRIEF”特征,使 ORB 的描述子具有较好的旋转不变性。
特征匹配
由于考虑到了旋转和缩放,使得 ORB 在平移、旋转、缩放的变换下仍有良好的表现。同时,FAST 和 BRIEF 的组合也非常的高效,使得 ORB 特征在实时 SLAM 中非常受欢迎。
那么,该如何对两幅图像中的特征进行匹配呢?考虑两个时刻的图像,如果在图像 中提取到特征点 ,在图像 中提取到特征点 ,如何寻找这两个集合元素的对应关系呢?
暴力匹配(Brute-Force Matcher):即对每一个特征点 ,与所有的 测量描述子的距离,然后排序,取最近的一个作为匹配点。描述子距离表示了两个特征之间的相似程度,不过在实际运用中还可以取不同的距离度量范数。对于浮点类型的描述子,使用欧氏距离进行度量即可。而对于二进制的描述子(比如 BRIEF 这样的),我们往往使用汉明距离(Hamming distance)做为度量——两个二进制串之间的汉明距离,指的是它们不同位数的个数。
快速近似最近邻(FLANN):比较难,一般只考虑直接调用相关函数。
——————————————————————————————————————
《视觉slam十四讲》读书笔记