KinectFusion 和 ElasticFusion 三维重建方法
付兴银
2016/8/23
实时三维重建 和 SLAM 对比
基于RGB-D实时三维重建
SLAM
直接法 ICP 特征匹配(GPU)
特征配准 直接法 ICP(CPU)
对点云融合去冗余操作
简单将点堆在一起
更关注重建的精度
更关注轨迹求解的精度
位姿/闭环约束 优化重建 MAP(通过优化轨
位姿/特征点约束用来优化相机轨迹
迹优化 Map 或者直接优化 Map)
KinectFusion 算法流程
评价:
首次实现基于RGB-D 实时
三维重建
a) 2D 深度图像转换成 3D 点云并求得每一点的法向量
b) ICP 迭代求当前帧相机位姿
c) 根据相机的位姿将点云数据融合到场景的三维模型中
d) 光线投影算法求当前视角下能够看到的场景表面
实时三维重建中的 ICP 算法
深度图像(双边滤波)+ 相机内参
点云 + 法向量
对点云分层抽样并且匹配按照 coarse-to-fine 的方式
输入: 当前点云、 参考点云、 参考点云法向量
for 循环迭代 n 次
for 每个像素点
单个线程处理
1. 对于每个像素点用投影算法计算匹配点(两帧位姿小)
2. 对于匹配点极小化点到平面的距离计算位姿
3. 将位姿结果作用于当前点云,然后进入 1
()uvipiqinT
实时三维重建中的 ICP 算法 GPU 实现 (PCL)
每个像素单个线程处理
计算匹配点
根据匹配点计算像素点的 contribution
单个线程处理的结果在 GPU 中做累加(Reduce)
累加结果传到 CPU 计算最终位姿
每个像素点用单个线程处理各自 Contribution
2argmin||optxxCxb
实时三维重建中的 ICP 算法 GPU 实现 (PCL)
单个像素点的contribution
每个 Block 中单个线程的
contribution 做累加
每个 Block 累加和存储到
GPU 显存
单个 Block 对每个 C 和 b
其中一个元素做累加
@张也东
012345670123010Value (shared mem)Step 1 Stride 8Step 2 Stride 4Step 3 Stride 2Step 4 Stride 1
根据相机的位姿将点云数据融合到全局模型中
三维的 TSDF 模型,将待重建的三维场景划分成网格
对于每一帧的深度图像做融合
TSDF 模型:网格中的数值代表离重建场景表面的距
离,网格中从正到负的穿越点代表重建的表面