VI Local Mapping 局部地图构建
这部分,我们描述了使用每个新关键帧 K i K_i Ki 的局部地图执行的步骤。
目的是确定更多的约束对关键帧的位姿和地图点云的位置进行优化。
A KeyFrame Insertion关键帧插入
首先我们更新共视图,为关键帧集 K i K_i Ki 增加一个新的节点,并利用其他关键帧更新从共享地图点云产生的边。我们更新生成树,利用带有最多公共点的关键帧链接关键帧集 K i K_i Ki 。然后计算关键帧的代表词袋,这将有助于数据关联,用于三角化新的点。
在共视图和生成树上添加节点和边,计算关键帧的词袋,用三角法生成新的地图点云;
B Recent Map Points Culling筛选三角化的地图点云
为了被保留在地图中,地图点云在创建后前三个帧期间必须通过限制性测试,以确保它们是可跟踪的,并且不会由于伪数据关联而被错误地三角化。一个点必须满足下面两个条件:
1) 跟踪必须在预测可见的25%以上的帧中找到特征点。
2) 如果从地图点云创建传递了多个关键帧,则必须至少从三个关键帧中观察到该关键帧。
一旦地图点云通过限制性测试,如果其在任何时候从少于三个关键帧中被观察到,其可能只能被移除。当关键帧被剔除和局部束调整丢弃多余观察时,这种情况会发生。这个策略使得我们的地图包含的异常值非常少。
C New Map Point Creation创建新的地图点云
新的地图点云是通过在共视图中从相关关键帧 K c K_c Kc 中三角化ORB特征点来创建的。对于在 K i K_i Ki 中每个未匹配的ORB,我们搜索在其他帧中未匹配的点的匹配。这些匹配在第 III-E 部分被解释,并丢弃那些不满足对极约束的匹配项。ORB对被三角化,去接收新的点,审查在两个相机之间的正深度、视差、重投影误差和尺度一致性。起初,一个地图点云从两个关键帧中被观察,但它可以在其他关键帧中匹配,因此它被投影到其余连接的关键帧中,并且搜索匹配点,如第 V-D 节中所详细描述的。
ORB特征点对三角化后,对其在相机坐标系中的深度信息、视差、重投影误差和尺度一致性进行审查,通过后则将其作为新点插入地图。将不满足对极约束的匹配点删除;
D Local Bundle Adjustment局部束调整,局部BA优化
这个局部束调整优化当前被处理的关键帧 K i K_i Ki,在共视图 K c K_c Kc 中与其相连的所有关键帧以及被这些关键帧观察到的所有地图点云。观察到这些点但是没有连接到当前被处理的关键帧的其他关键帧也被包含在优化中,但是保持不变。被标记为异常值的观察者在优化中间和末尾被丢弃。关于优化的细节见附录。
对当前关键帧,以及在共视图中与其相连的其他关键帧,以及这些关键帧观测到的地图点云进行优化;
E Local Keyframe Culling局部的关键帧选择
为了保持重构的紧凑性,局部地图试图检测冗余关键帧并删除它们。这是相当有用的,因为束调整的复杂度随着关键帧的数量增长而增加,而且由于关键帧数量不会无限增长在相同的环境中其可以一直存在,除非在场景中可视内容发生变化。我们丢弃了 K c K_c Kc中的所有关键帧,这些关键帧的90%的地图点在至少其他三个相同或更精细尺度的关键帧中可见。尺度条件确保地图点维护那些被用更精确方式测量的关键帧。这个策略受Tan的工作启发,在改变检测的处理方法后,关键帧被丢弃。
检测冗余关键帧并删除:如果关键帧中90%的点都可以被其他至少三个关键帧同时观测到,则认为是冗余的。