1. 什么是特征点?
特征点由关键点和描述子组成,关键点是该特征点在图像中的位置,有些还包括方向、大小等信息,描述子是用来描述该关键点周围像素的一种描述方法,外观相似的关键点应该具有相似的描述子,想要判断两个不同位置的关键点是否相似,可以通过计算他们之间描述子的距离来确定。
2. ORB特征点的关键点和描述子
ORB的关键点是在 FAST (Features from Accelerated Segments Test) 关键点基础上进行了改进,主要是增加了特征点的主方向,称之为Oriented FAST。描述子是在 BRIEF (Binary Robust Independent Elementary Features) 描述子基础上加入了上述方向信息,称之为Rotated BRIEF。
3. FAST关键点
一种检测角点(在图像中,角点比平坦区域和边缘有辨识度)的方法,FAST确定关键点的速度非常快。FAST的思想是:如果一个像素和它周围的像素灰度差别较大(超过设定的阈值),并且达到一定的数目,那么这个像素很可能就是角点。具体检测过程如下:
4.FAST 描述子
BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。为了保持踩点固定,工程上采用特殊设计的固定的pattern来做
5.图像金字塔保证特征点的尺度不变性
图像中检测角点存在远看是角点,近看不是角点的问题,因此采用金字塔的方式。金字塔底层是原始图像,每往上一层,就对图像做一个固定倍率的缩放,得到不同分辨率的图像。在提取ORB特征点的时候,在每一个金字塔层级上进行特征提取,这样不管相机拍摄距离物体是远还是近,都可以在某个层级提取到真正的角点。在对不同图像特征点进行特征匹配时,就可以匹配不同图像里不同层级的金字塔上提取的特征点,实现尺度不变性。
5. ORB特征点的旋转不变性
先计算关键点的“主方向”,然后统一将像素旋转到“主方向”,使得描述子不受相机旋转的影响。
6. 主方向的计算
主方向是指以该点为圆心,在指定半径内做圆,圆内的像素点的灰度值作为质量,计算出该圆质心。圆心指向质心的向量即为主方向。
主方向为
7. BRIEF描述子
一种二进制编码的描述子,以关键点为中心,取固定大小的窗口,在窗口内随机选取一对点 (x0, y0), (x1, y1),如果 (x0, y0) 的灰度值大于等于 (x1, y1),则记为0,小于则记为1。这样如果选取256对点,则可以得到一个256维的二进制描述子。比较两张图象的关键点是否为一点,比较描述子的汉明距离即可。
8. 具有旋转不变性的描述子
在算出主方向后,在计算描述子之前用这个角度旋转图片。把关键点周围一定区域内的像素点旋转到主方向与x轴重合的位置。
原本应该取 (x, y) 位置的像素,旋转之后应该取的像素位置变为:
通过三角函数计算可以得到旋转后新的像素点的坐标为:
ORB-SLAM2里采用了一种固定的选点模板,一共选了256对点。这个模板保证了描述子具有较高的辨识度。在每个关键点都用这个模板确定每一维描述子。
9. 代码实现时的加速方法
在ORB-SLAM2代码实现中,使用了技巧加速主方向的计算:
参考文献
ORB-SLAM2系列第二章——ORB 特征点提取_running snail szj的博客-CSDN博客_orb特征点提取
【ORB-SLAM2】(一)ORB关键点提取和描述子 - 知乎