#每天一篇论文#235/365 DynamicFusion:非刚体场景实时重建与追踪

DynamicFusion: Reconstruction and Tracking of Non-rigid Scenes in Real-Time

project website: http://grail.cs.washington.edu/projects/dynamicfusion

摘要

我们提出了第一个能够实时重建非刚性变形场景的稠密slam系统,通过融合从消费级传感器捕获的rgbd扫描。我们的dynamicfusion方法重建场景几何体,同时估计密集的6d运动场,该运动场将估计的几何体扭曲成实时帧。与KinectFusion一样,我们的系统随着更多测量数据的融合而产生越来越多的去噪、详细和完整的重建,并实时显示更新的模型。由于不需要模板或其他先验场景模型,该方法适用于范围广泛的运动对象和场景。

贡献

1.体积模型到帧扭曲场参数的估计
2.通过估计的扭曲场将实时帧深度图融合到规范空间
3.调整扭曲场结构以捕获新添加的几何体

方法

引用https://blog.csdn.net/seamanj/article/details/78474275
3.1

Ntwarp={dgv,dgw,dgse3}tNwarpt={dgv,dgw,dgse3}t
dgvdgv表示该点canonical frame的位置
dgwdgw表示影响范围
dgse3dgse3该点在当前帧的形变

i=1…ni=1…n 其中nn是第0层node点数

公式(2)中TlwTlw从world转到当前帧的camera view

3.2算体素的psdf

对于每个体素中心xcxc(世界坐标, canonical space), 先转到当前帧的camera view中xtxt, (3)式第二部分

然后将该点xtxt投影当前帧的Image view里面ucuc, 然后索引出深度, 转回到camera view中. (3)式第一部分

第一部分为相机到surface, 第二部分为相机到体素中心的距离, 两者相减则为体素中心到surface的距离

3.3算WtWt,即算每帧相机的poseTlwTlw, 每点的形变TicTic
5)

3.3.1 用non-rigid ICP构造data term

注意ICP第一步是找匹配, 跟kinnect fusion不同(kinnect fusion找前后两帧Image view的匹配点, 然后算出世界坐标让他们一致), 它先根据TSDF提取出一个zero level set: Vc={Vc,Nc}Vc={Vc,Nc}, 然后用WtWt对其进行形变,(注意WtWt是我们要求的, 我们这里采用的初值然后逐步迭代, 跟KinnectFusion求Tzg,k一样,先定一个初值,然后代入公式再逐步优化Tg,kz一样,先定一个初值,然后代入公式再逐步优化), 此时形变后的坐标为当前帧的camera view, 然后再投影到image space里面, 这样就有一个image view 到canonical space的对应关系. 即每个像素uu对应一个形变后的canonical点的坐标vuvu 以及形变后的canonical的法向量nunu, 然后将vuvu投影回image view uu, 索引出深度,投影回camera view, vluvlu, 最后组成公式(7)

好了, 现在说说我自己对整个流程的理解

第一帧深度图来了之后, 算每个体素中心的tsdf, 根据tsdf的零切面可以提取出来canonical model的点云,然后我们更新整个体素的tsdf(好更新零切面), 由于场景物体是运动的(也就是体素是在扭曲), 所以要需要算体素的形变,由于体素数量太多, 我们将体素的形变embedded到node的形变, 我们先采样node,然后算node的形变,再用node的形变去插值体素的形变。

那么怎么采样node呢?就是用一堆半径为r的点去覆盖前面的canonical model的点云(canonical cloud)

那么算node的形变呢?对于新加进来的node, 我们把它的形变初始化为单位形变, 然后每帧算出新的形变, 前一帧的形变作为当前帧形变的初始值, 然后迭代去解。具体解法见3.3, 这里大致说下,假设前一帧node的形变已求得, 对于当前帧,我们先用前一帧每一个node的形变去形变canonical cloud, 然后渲染到当前视角,得到一张图片,其中有canonical cloud的像素区域我们称为可见区域,对于可见区域里的像素我们可以还原出形变后的canonical 3d cloud, 然后当前帧的深度图可以还原一个3d cloud, 然后用icp的方法,可以得到canonical cloud的形变, 由于cloud的形变又是由node的形变插值完成, 所以我们可以得到node的形变。

得到了node的形变我们就可以通过3.2回去更新我们的canonical cloud, 怎么更新呢?

先通过node的形变算出体素的形变, 然后结合当前的深度图更新体素的tsdf, 最后提取出更新后的canonical cloud. 如果有新的cloud没有被node覆盖到, 我们增加新的node去覆盖它。

实验

#每天一篇论文#235/365 DynamicFusion:非刚体场景实时重建与追踪_第1张图片

#每天一篇论文#235/365 DynamicFusion:非刚体场景实时重建与追踪_第2张图片

你可能感兴趣的:(每天一篇论文365)