随着相机的运动,我们计算的相机位姿,三角化得到的点云位置都是有误差的,即使我们使用局部的或全局的BA去优化仍然会存在累积误差。而消除误差最有效的办法是发现闭环,并根据闭环对所有结果进行优化。闭环是一个比BA更加强烈、更加准确的约束,所以如果能够检测到闭环,并对其优化,就可以让结果更加准确。
整个LoopClosing模块是在线程中完成,并在创建线程时调用LoopClosing::Run()函数让其运行。整个框架如下图所示:
一、Loop Candidates Detection
计算关键帧Ki和在Covisibility Graph中与其相邻的关键帧之间的词袋(BOW)之间的相似度。词袋作为对该关键帧的描述,将闭环检测转变为一个类似于模式识别的问题。当相机再次来到之前到过的场景时,就会因为看到相同的景物,而得到类似的词袋描述,从而检测到闭环。
获取闭环候选帧的过程:
其中通过分组可以将单独得分很高的误匹配无关关键帧剔除
为了进一步保证候选帧的准确性,还需要对候选帧做一致性检查。
閱讀更多 半杯茶的小酒杯 的文章