KinectFusion: Real-Time Dense Surface Mapping and Tracking论文阅读笔记

        该文提出一种基于深度图的可以在大场景情景下以30Hz帧率进行实时稠密重建的方法。Tracking使用frame-to-model ICP进行位姿估计,Mapping使用了TSDF进行模型表示。

 Surface reconstruction update:根据估计出的位姿,将新生成的surface集成到场景模型中。

Surface prediction:将场景模型的SDF投射到当前估计位姿表示的帧中,以得到稠密的表面预测。

Sensor pose estimation:在predicted surface和当前深度测量间使用多尺度ICP进行配准。基于GPU的实现可以以帧率进行配准。

3.1 Preliminaries

 T_{g,k}=\begin{bmatrix} R_{g,k} & t_{g,k}\\ 0^{T}&1 \end{bmatrix} :刚体变换矩阵,从相机坐标系转换到全局坐标系

p_{k}:在时刻k获取到相机坐标系下的点

p_{g}:全局坐标系下的点

K:相机内参矩阵

p\in R^{3}=(x,y,z),q\in R^{2}=(x/z,y/z)^{T}

q=\pi (p),透视投影函数

\dot{u}:=(u^{T}|1)^{T},点代表矩阵齐次表达式

3.2 Surface Measurement

原始深度图像R_{k}提供了矫正的深度测量R_{k}(u),其中u=(\mu, \nu )^{T}为图像像素。

深度图像到3D点的转换公式为:p_{k}=R_{k}(u)k^{-1}\dot{u}

运用双边滤波得到降噪的深度图D_{k},双边滤波提高了normal map的质量和tracking中的数据关联性。

 通过将深度图反投影到3D空间中,得到vertex map V_{k},V_{k}(u)=D_{k}(u)K^{-1}\dot{u}

 通过vertex map求Normal map:

其中,v[x]=x/\left \| x \right \|_{2},用来归一化向量。

vertex掩码:I(u)>0M_{k}(u)\rightarrow 1,否则M_{k}(u)\rightarrow 0

构建L=3的图像金字塔,金字塔底层是双边滤波后的深度图像,D^{l+1}D^{l}分辨率的二分之一,通过块平均进行下采样。只有方差在3\sigma_{r}以内才能取平均值,以确保不会把边缘部分给平滑掉。 然后通过上面的公式求V^{l\in\left [ 1\cdots L \right ]},N^{l\in\left [ 1\cdots L \right ]},通过变换矩阵和旋转矩阵将相机坐标系下的图转换到全局坐标系下:

 3.3 Mapping as Surface Reconstruction

 S_{k}(p):表示从第k帧融合的TSDF,p为世界坐标系下的点。

TSDF以固定分辨率离散化存储在显存中,每个TSDF内存储两个值:当前的TSDF值F_{k}(p)和权重W_{k}(p)

稠密的表面测量对表面重建提供了两个约束条件:假设真实值存在于测量值的\pm \mu范围内,\lambda =\left \| K^{-1}\dot{u} \right \|_{2}是沿着像素射线方向的缩放量,r是沿着像素射线方向的距离值,则:

1、r<(\lambda R_{k}(u)-\mu)表示的是自由空间;

2、r>(\lambda R_{k}(u)+\mu)表示的是遮挡的空间。

呢么只有\left | r-\lambda R_{k}(u) \right |\leq \mu是SDF需要表示的不确定空间。

F_{R_{k}}(p)=\Psi (\lambda ^{-1}\left \| T_{g,k} ^{-1}p\right \|_{2}-R_{k}(x))(论文里的式子应该是打错了),其中\lambda = \left \| K^{-1}\dot{x} \right \|_{2},x=\left \lfloor \pi (KT_{g,k}^{-1}p) \right \rfloor,\Psi (\eta )=\begin{cases} min(1,\frac{\eta}{\mu}sgn(\eta)) & \text{ if } \eta \geq -\mu \\ null & \text{ otherwise } \end{cases}

\left \lfloor \cdot \right \rfloor表示最近邻搜索,因为TSDF是离散表示,p点映射后需要去寻找最近邻的像素(不使用插值法,以免把边界平滑掉)。

权重W_{R_{k}}(p)cos(\theta )/R_{k}(x)成正比,其中\theta是关联像素的射线与法向量的夹角。

获得每帧的SDF的值后,我们把每帧融合在一起用最小二乘法表示的形式为:,其中F_{k}(p)W_{k}(p)可以增量式获得,

 ,s.t. 

 虽然Wk(p)提供了TSDF与表面测量不确定度成比例的权重,但作者发现,在实践中,简单地让WRk(p) = 1,得到一个简单的平均值,可以提供良好的结果。

 另外,使用对权重进行截断可以重建动态场景(盲猜动态物体会使权重增大,截断后使其接近于静态物体).

场景重建用的是原始深度图,而不是滤波过后的深度图,作者给出的解释是:滤波去除所需的高频结构和噪声,这将降低重建更精细结构的能力。

3.4 Surface Prediction from Ray Casting the TSDF

 表面预测将F_{k}=0的零水平集合用当前估计的位姿T_{g,k}渲染在虚拟相机坐标系中,表面预测以vertex map和normal map的形式存储,用于接下来的相机位姿估计中。

F_{k}(p)=0的点p对TSDF求导,其梯度正交于零水平集合,所以normal map可以用数值求导的方式计算:

ray casting加速:只在size<\mu的块内进行 marching,自由空间可以忽略。

近似三线性插值获取更高质量的零交叉点:若t和t+\Delta t分别在零交叉点的两侧,则获得的交点更准确。

3.5 Sensor Pose Estimation

使用基于frame-model的深度ICP进行匹配。

点面能量公式:,其中\hat{V}^{g}_{k-1},\hat{N}^{g}_{k-1}由上一帧位姿T_{g,k-1}预测得到:点集关联通过计算透视投影得到,用到了帧间变换

 \widetilde{T}^{z=0}_{g,k}初始化为上一帧的位姿T_{g,k-1},当z>0时,通过小角度增量变换得到,其中,6个自由度写成参数向量

对于的像素,将其对应的vertex转换到世界坐标系

vertex的增量变换:,其中

将上式带入能量公式,得目标函数:

 目标函数对参数向量X求导得到对称线性公式:,然后用Cholesky分解进行求解。

系统由粗到精进行数据关联和位姿估计,从最粗的level3开始,在vertex和normal图像金字塔levels[3,2,1]分别最多进行z_{max}=[4,5,10]次迭代,最终获得相机位姿

位姿变换更新可靠性和稳定性检测:1、对零空间进行检查,以确保线性系统具有充分的约束。(帧间运动增加会导致点面度量误差和投影数据关联的线性化假设被打破,或者当前的表面几何没有提供能约束6个自由度的点面对都会导致重建效果差和跟踪失败)。

2、对增量变换参数x的大小进行阈值检查,确保小角度假设没有被打破。

如果检查失败,则系统进入重定位模式。

重定位:当传感器跟踪失败,则用最新的位姿提供surface prediction,并与新来的深度帧进行配准,进行位姿优化,如果稳定性和有效性检测能通过,则跟踪和建图恢复正常。

4 实验

略。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值