ORB-SLAM2 从理论到代码实现(十六):ORB 关键点提取和描述子
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关键点提取和描述子 - 知乎