ORB-SLAM2第一节---地图初始化

单目初始化

1.前提条件(640*480)

  • 参与初始化的两帧各自的特征点数目都需要大于100.
  • 两帧特征点成功匹配的数目需要大于或等于100.
  • 两帧特征点三角化成功的三维点数目需要大于50.

2.针对条件三 流程如下

  1. 记录当前帧和参考帧(第一帧)之间的特征匹配关系。
  2. 在特征匹配点对中随机选择8对匹配点作为一组。
  3. 对这8对点分别计算基础矩阵F和单应矩阵H,并得到得分。
  4. 计算得分比例,根据判断选择基础矩阵还是单应矩阵求位姿和三角化。

3. 求单应矩阵--平面

  1. 对特征匹配点坐标进行归一化。
  2. 开始迭代,每次选择8对点计算单应矩阵。
  3. 根据当次计算的单应矩阵的重投影误差对结果进行评分。
  4. 重复2、3步,以得分最高的单应矩阵作为最优的单应矩阵。

3.1坐标归一化 

目的:防止坐标值量级差别较大。

好处:能够提高运算结果的精度;利用归一化处理后的图像坐标,对尺度缩放和原点的选择不敏感。

归一化操作步骤如下:

1.计算每个特征点坐标分别在两个坐标轴方向上的均值meanX,meanY

2.求出平均到每个点上,其坐标偏离均值meanX、meanY的程度,记为meanDevX,meanDevY,并将其倒数作为一个尺度缩放因子sX,sY。

3.用均值和尺度缩放因子对坐标进行归一化

4.用矩阵表示上述变换关系,得到归一化矩阵T

归一化代码如下:

3.2求解单应矩阵

单应矩阵H的自由度是8,一对特征点可以提供两个约束方程,所以只需要4对点提供8个约束方程就可以求解了。

为什么自由度是8?因为Ah=0,矩阵H共有9个元素,去掉一个自由度,就是8个自由度。

ORB-SLAM2第一节---地图初始化_第1张图片

 对矩阵A进行SVD分解

ORB-SLAM2第一节---地图初始化_第2张图片

 代码:

3.3检验单应矩阵并评分

通过单应矩阵对已经判断为内点的特征点进行双向投影,计算加权重投影误差,最终选择误差最小的单应矩阵作为最优解。

特征点对之间双向投影,累计所有特征点对中的内点误差,误差越大评分越低。

4.求基础矩阵F--非平面

  1. 对特征匹配点坐标进行归一化
  2. 选择8个点对来计算基础矩阵。
  3. 根据当次计算的基础矩阵的重投影误差对结果进行评分。
  4. 重复2、3步,以得分最高的基础矩阵作为最优的基础矩阵。

4.1使用八点法求解基础矩阵 

 基础矩阵共有9个元素,其中尺度等价性去掉1个自由度,基础矩阵秩为2,再去掉1个自由度,所以自由度应该为7

ORB-SLAM2第一节---地图初始化_第3张图片

SVD求解基础矩阵

你可能感兴趣的:(算法,机器人)