参考:
https://zhuanlan.zhihu.com/p/35894630
目标
实时输入RGBD视频流(用Kinect扫描仪获得)
实时获得重建3D场景。(用TSDF形式表达,可通过marching cube生成mesh)
一些参数
相机内参:相机坐标系中一点到像素平面的转换方程
位姿估计pose estimation:相机坐标系到师姐坐标系的转换矩阵
流程
始终在更新全局的:
点云,法向 (是为了求相机位姿)
相机位姿(是为了求TSDF)
TSDF (终极目标,3D场景的表达形式)
Measurement (单帧求点云和法向)
输入:一帧Kinect的RGBD图像,(相机内参已知)
输出:vertex map(也就是点云图)V、normal map(法向量图)N
方法:根据相机内参一番运算
Pose Estimation (新帧的ICP点云配准位姿估计)
输入:之前的点云图V及位姿估计T,当前帧的点云图V
输出:(用ICP算法进行配准)二者的变换矩阵
方法:ICP(Iterative Closest Point)是根据前后两帧图像中匹配好的特征点在相机坐标系下的三维坐标,求解相机帧间运动的一种算法。
具体来说,点云刚性配准中,有对应点关系和转换矩阵。
首先初始化,假设对应点就是最邻近点,求一个最优的转换矩阵。
用此转换矩阵转换后得到新的点集。
重复上面的步骤,直到误差小于目标。
Update Reconstruction (融合多帧TSDF)
这里将本帧的TSDF融合到之前的全局TSDF中,得到最新的全局TSDF。
有必要介绍如何求单帧的TSDF,所以下面也放上了。
每个体素有一个TSDF值(F)和一个权重(W),F和W合起来存放在S中。
单帧TSDF的计算:
输入:voxel网格划分,深度图D,参数mu(假设传感器的深度信息存在mu的不确定度)
输出:每个voxel的TSDF值S。
TSDF值:
到表面的距离,加上符号(前正后负),加上截断(绝对值大于mu的全部设为mu)
多帧TSDF的融合:
目的:将本帧的TSDF融合到之前的全局TSDF中,得到最新的全局TSDF
输入:以前多帧融合后的TSDF和权重,当前帧的TSDF和权重
输出:当前帧融合到之前的之后,的TSDF(F)和权重(W)。
融合方法:加权平均耳
Surface Prediction (求融合后的点云V和N)
用ray casting方法
输入:TSDF值F,权重W和位姿估计T,
输出:物体表面的点云和法向V,N
就是沿摄像机观察的方向,从每个像素发出射线,直到遇到TSDF从正变负的那个voxel的边界,就加入vertex map中。