ORB-SLAM2系列第二章——ORB 特征点提取

文章目录

  • 前言
  • 一、关键点和描述子
    • 1.FAST关键点:
    • 2.FAST 描述子:
  • 二、 灰度质心法
    • 1.什么是灰度质心法?
    • 2.在一个圆内计算灰度质心
  • 三、 特征点角度计算
    • 1.steer brief
    • 2.IC_Angle 计算技巧
  • 四、金字塔的计算
  • 五、特征点数量的分配计算
  • 六、使用四叉树均匀分布特征点
  • 七、高斯处理
    • 1.高斯模糊
    • 2.高斯模糊常用的高斯模板
  • 八、特征点去畸变
  • 九、近点和远点


前言

欢迎浏览我的SLAM专栏,一起加油淦穿SLAM!


一、关键点和描述子

1.FAST关键点:

ORB-SLAM2系列第二章——ORB 特征点提取_第1张图片

2.FAST 描述子:

论文:BRIEF: Binary Robust Independent Elementary Features
BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来
作为描述子。为了保持踩点固定,工程上采用特殊设计的固定的pattern来做

二、 灰度质心法

原始的FAST关键点没有方向信息,这样当图像发生旋转后,brief描述子也会发生变化,使得特征点对旋
转不鲁棒
解决方法:orientated FAST
使用灰度质心法计算特征点的方向,

1.什么是灰度质心法?

下面重点说一下如何计算灰度质心。

  1. 我们定义该区域图像的矩为:
    在这里插入图片描述
    式中, 取0或者1; , 表示在像素坐标 处图像的灰度值; 表示图像的矩。 在半径为 的圆形图像区域,沿两个坐标轴 方向的图像矩分别为:
    ORB-SLAM2系列第二章——ORB 特征点提取_第2张图片
    圆形区域内所有像素的灰度值总和为:
    ORB-SLAM2系列第二章——ORB 特征点提取_第3张图片
  2. 图像的质心为:
    在这里插入图片描述
  3. 然后关键点的“主方向”就可以表示为从圆形图像形心 指向质心 的方向向量 ,于是关键 点的旋转角度记为
    在这里插入图片描述

以上是灰度质心法求关键点旋转角度的原理。

2.在一个圆内计算灰度质心

下图P为几何中心,Q为灰度质心
ORB-SLAM2系列第二章——ORB 特征点提取_第4张图片
ORB-SLAM2系列第二章——ORB 特征点提取_第5张图片
下面求圆内的坐标范围
umax:1/4圆的每一行的u轴坐标边界(下图中橙色线段FG)

vmax = cvFloor(HALF_PATCH_SIZE * sqrt(2.f) / 2 + 1);
vmin = cvCeil(HALF_PATCH_SIZE * sqrt(2.f) / 2);
// 对应从D到B的红色弧线,umax坐标从D到C
for (v = 0; v <= vmax; ++v)
umax[v] = cvRound(sqrt(hp2 - v * v));
// 对应从B到E的蓝色弧线,umax坐标从C到A
for (v = HALF_PATCH_SIZE, v0 = 0; v >= vmin; --v)
{
while (umax[v0] == umax[v0 + 1])
++v0;
umax[v] = v0;
++v0;
}

ORB-SLAM2系列第二章——ORB 特征点提取_第6张图片
参考:
https://blog.csdn.net/liu502617169/article/details/89423494
https://www.cnblogs.com/wall-e2/p/8057448.html


三、 特征点角度计算

ORB-SLAM2系列第二章——ORB 特征点提取_第7张图片

1.steer brief

点v 绕 原点旋转θ 角,得到点v’,假设 v点的坐标是(x, y) ,那么可以推导得到 v’点的坐标(x’, y’)
ORB-SLAM2系列第二章——ORB 特征点提取_第8张图片
参考:
https://www.cnblogs.com/zhoug2020/p/7842808.html

2.IC_Angle 计算技巧

在一个圆域中算出m10(x坐标)和m01(y坐标),计算步骤是先算出中间红线的m10,然后在平行于
x轴算出m10和m01,一次计算相当于图像中的同个颜色的两个line。
ORB-SLAM2系列第二章——ORB 特征点提取_第9张图片
为什么要重载小括号运算符 operator() ?
可以用于仿函数(一个可以实现函数功能的对象)
仿函数(functor)又称为函数对象(function object)是一个能行使函数功能的类。仿函数的语法几乎
和我们普通的函数调用一样,不过作为仿函数的类,都必须重载operator()运算符
1.仿函数可有拥有自己的数据成员和成员变量,这意味着这意味着仿函数拥有状态。这在一般函数中是
不可能的。
2.仿函数通常比一般函数有更好的速度。
ORB-SLAM2系列第二章——ORB 特征点提取_第10张图片
扩展阅读:
https://blog.csdn.net/jinzhu1911/article/details/101317367

四、金字塔的计算

图像金字塔对应函数为:ORBextractor::ComputePyramid

ORB-SLAM2系列第二章——ORB 特征点提取_第11张图片
ORB-SLAM2系列第二章——ORB 特征点提取_第12张图片

五、特征点数量的分配计算

图像金字塔层数越高,对应层数的图像分辨率越低,面积(高 宽)越小,所能提取到的特征点数量就
越少。所以分配策略就是根据图像的面积来定,将总特征点数目根据面积比例均摊到每层图像上。
我们假设需要提取的特征点数目为 ,金字塔总共有 层,第 0 层图像的宽为 ,高为 ,对应的面
积 ,图像金字塔缩放因子为 ,,在 ORB-SLAM2 中 。
那么整个金字塔总的图像面积是:
在这里插入图片描述
假设我们需要一千个特征点,我们需要把这一千个特征点分别分配到每一层上。

单位面积应该分配的特征点数量为:
ORB-SLAM2系列第二章——ORB 特征点提取_第13张图片

在ORB-SLAM2 的代码里,不是按照面积均摊的,而是按照面积的开方来均摊特征点的,也就是将上述
公式中的 换成 即可。
参考:https://zhuanlan.zhihu.com/p/61738607

六、使用四叉树均匀分布特征点

ORB特征提取策略对ORB-SLAM2性能的影响:ORB-SLAM2中的ORB特征提取方法相对于OpenCV中的
方法,提高了ORB-SLAM2的轨迹精度和鲁棒性。增加特征提取的均匀性可以提高系统精度,但是似乎会
降低特征提取的重复性。

对应函数 DistributeOctTree:

  • 如果图片的宽度比较宽,就先把分成左右w/h份。一般的640×480的图像开始的时候只有一个 node。
  • 如果node里面的点数>1,把每个node分成四个node,如果node里面的特征点为空,就不要了, 删掉。
  • 新分的node的点数>1,就再分裂成4个node。如此,一直分裂。
  • 终止条件为:node的总数量> [公式] ,或者无法再进行分裂。
  • 然后从每个node里面选择一个质量最好的FAST点

参见:https://zhuanlan.zhihu.com/p/57235987

ExtractorNode::DivideNode
ORB-SLAM2系列第二章——ORB 特征点提取_第14张图片
节点分裂顺序:后加的先分裂
ORB-SLAM2系列第二章——ORB 特征点提取_第15张图片

七、高斯处理

1.高斯模糊

ORB-SLAM2系列第二章——ORB 特征点提取_第16张图片
高斯公式:
在这里插入图片描述

2.高斯模糊常用的高斯模板

中间权重最大:
ORB-SLAM2系列第二章——ORB 特征点提取_第17张图片

八、特征点去畸变

ORB-SLAM2系列第二章——ORB 特征点提取_第18张图片

ORB-SLAM2系列第二章——ORB 特征点提取_第19张图片
ORB-SLAM2系列第二章——ORB 特征点提取_第20张图片
去畸变效果:
ORB-SLAM2系列第二章——ORB 特征点提取_第21张图片

九、近点和远点

在双目或RGB-D模式下,特征点对应的深度值小于40倍的双目/RGB-D基线称之为近点,否则称之为远点。
近点特征点对三角化得到的三维点坐标比较准确,可以提供旋转、平移、尺度信息。
远点特征点仅能够提供相对准确的旋转信息,无法提供比较准确的尺度和平移信息。只有当多个视角下多次观测到的远点我们才会考虑三角
化。

ORB-SLAM2系列第二章——ORB 特征点提取_第22张图片

你可能感兴趣的:(slam,硬件架构,slam,orb-slam3,orb-slam2)