keyframe2
这次偏向于选择观测点数少的帧,作为关键帧。因为BA的本质是,优化位姿,减小重投影误差。挑选出的关键帧会被优化多次,所以关键帧应该挑选出认为还没优化好的帧。
# 关键帧选择
遍历所有已经配准的帧,建立位姿副本。
- 遍历该帧所有的三维点,遍历三维点所有的track,track包含如果包含有关键帧,那么三维点被3个以上关键帧track到,那么这个点称为冗余三维点,如果冗余三维点小于200,那么称该帧为关键帧。
- 如果不是关键帧,那么该帧至少与一个关键帧相连。
- 如果还不是关键帧,找到前后两个最近的关键帧,计算两个关键帧之间有多少个共视三维点,少于阈值就是关键帧。
执行到这,说明该帧不是关键帧
# 额外补充
将循环匹配帧设为关键帧
根据共视关系选择参考帧:遍历每一帧所有三维点,遍历每个三维点的track,找到那个关键帧,这个关键帧观测该帧最多的三维点。那么就设这个关键帧为该帧的参考帧。
如果没有共视的关键帧,那么就前后找最近的关键帧作为参考帧。
# 优化普通帧
根据上述,普通帧都有一个关键帧作为它的参考帧,根据绑定关系,将关键帧的优化结果传递到普通帧。