BundleFusion 解析
Updated at December 7, 12.
Method overview
BundleFusion 和之前所有的帧匹配(keyframe,每个 chunk 的第一帧),匹配采用 sift 描述子,这种方式和 SLAM 中一般通过邻近的帧计算 pose 不一样。
为了减少优化时优化的变量个数,采用 local-to-global 的位子优化策略。local 范围内,将全部帧按照划分成等大小的 chunk,先在 chunk 内做 pose 优化。然后在 global 范围内,所有的 chunk 的 pose 放在一起优化。这种 local-to-global 的方式,可以减少优化的变量个数,加速优化过程。
在建图部分,采用 voxel hashing 算法,不同的是,BundleFusion 中每个 chunk 的 pose 一直在做改变,pose 的改变需要映射到全局的 TSDF 模型中。方法是,挑选出 pose 改变量最大的 chunks(10 个),按照将帧融合到 TSDF 时的 pose,做 de-integration,将之前融合进 TSDF 模型中的数据,从 TSDF 模型中减掉。然后,按照优化之后的 pose,将 chunk 的数据 re-integrate 到 TSDF 模型中。
算法流程图:
Global Pose Alignment
对于新获取的帧,和之前的帧累计到一个 chunk 时(每 11 帧组成一个 chunk),先在 chunk 内匹配,做 local 优化,优化后,用 chunk 内的第一帧表示 chunk,chunk 内的所有帧的特征组合在一起,表示该 chunk 内特征,然后新的 chunk 和之前所有的 chunk 匹配,做 pose 优化,SIFT 特征提取和匹配都在 GPU 上做,计算一帧 SIFT 关键点和提取关键点描述子占用 4-5ms,匹配一次耗时大概 0.05 ms,特征匹配不可避免会有错误的匹配,作者设计了严格的筛选机制。
Correspondence Filter
Key point correspondence filter
对于帧 f i 和 f j ,f i 中 3D 点集 P</