LOCAL MAPPING
这部分我们将介绍对于每一个新的关键帧执行局部建图的步骤.
A. KeyFrame Insertion
首先,我们更新共视图,为添加一个新节点,并更新来自于共享地图点与其他关键帧产生的边。然后,我们将更新与
共享大多数共同点的关键帧相关联的生成树。然后我们计算关键帧的词袋表示,这将有助数据关联三角测量新点。
B. Recent Map Points Culling
地图点为了保留在地图中,必须在创建后的前三个关键帧期间通过限制性测试。这将确保他们是可追踪的,并且不会由于假数据关联,错误的三角化。一个点必须满足这两个条件:
- 跟踪必须在超过25%的预测可见的帧中找到该点。
- 如果从地图点创建中传递了多个关键帧,则必须从至少三个关键帧中观察它。
一旦一个地图点通过了测试,它将会被删除,如果在任何时候从少于三个关键帧观察到它。当剔除关键帧并且局部BA丢弃异常值观察时,可能会发生这种情况。 这个策略使我们的地图包含极少数异常值。
C. New Map Point Creation
通过在共视图中对连接的关键帧进行三角测量来创建新的地图点。对于
中每个未匹配的ORB,我们在其他关键帧中搜索其他未匹配点并与之匹配。 这种匹配按照第III-E节中的说明完成,并丢弃那些不符合对极约束的匹配。ORB对被三角化,并且为了接受新点,检查两个相机中的正深度,视差,重投影误差和尺度一致性。最初从两个关键帧中观察到一个地图点,但它可以在其他关键帧中进行匹配,因此将其投影到其余连接的关键帧中,并按照第V-D节中的详细说明搜索对应关系。
D. Local Bundle Adjustment
局部BA优化当前正在处理的关键帧,在共视图
中连接到它的所有关键帧,以及这些关键帧看到的所有地图点。所有其他能看到那些点却不能连接到当前帧都包含在优化中。但仍保持不变。标记为异常值的观察值在优化的中间和结束时被丢弃。
E. Local Keyframe Culling
为了维持紧凑的重建,局部地图试着检测并删除冗余的关键帧。由于BA的复杂度随着关键帧的增加而增加,这变得很有用。而且因为它可以在相同的环境中实现终身操作,因此关键帧的数量不会无限增长,除非场景中的可视内容发生变化。我们丢弃了中那些90%的地图点至少在其他三个关键帧中以相同或更精细的比例被看到关键帧。比例尺度条件确保地图点维持关键帧,从中可以最精确地测量它们。 这项策略的灵感来自Tan等人的工作,其中关键帧在检测到变化的过程后被丢弃。