DynamicFusion所做的工作:基于体素流场,将每帧场景状态变换到固定的(fixed, canonical)frame。
主要贡献:由刚体场景(KinectFusion)发展得到的,保留体素帧融合(volumetric scan fusion)最优特性的一个非刚体变换和融合的方法。
次要贡献:有效表达了体素warp,并实时计算。
Overview
算法有3个核心组成部分:
- 估算体素model-to-frame的warp场参数
- 利用计算得到的warp场,将实时深度图融合到canonical空间
- 调整warp场的结构去获取新的几何
稠密非刚体warp场
使用体素warp场表示动态场景运动,每一个点都对应一个6D的变换,每一个canonical点,将点从canonical空间变换到实时非刚体形变参考帧。如:
对偶四元数内插
由于直接进行稠密计算不现实,计算量太大,warp场计算使用对偶四元数内插(DQB)方式进行,warp函数定义为:
其中将对偶四元数转换为变换矩阵,
为单位对偶四元数,为点的最近邻变换node,定义了决定每个node影响半径的权重。也就是点的变换通过最近邻node对应变换的单位对偶四元数加权和再归一化,得到对应的单位对偶四元数之后专为变换矩阵。
warp场状态表示
时刻的warp场状态由个形变node 表示。对于每个node 而言,为canonical帧中坐标,为半径基权重(radial basis weight),控制warp场内插权重,
为node对应的变换。
对于整个warp场而言,可以分离出由于相机运动等原因造成的公共刚体变换。最后完整的warp场函数为
稠密的非刚体曲面融合
在得到model-to-frame的warp场之后,就要更新canonical模型几何了。
TSDF表示
在canonical空间中重建由采样表示。在体素域中,每个体素对应一个采样点。元组,为该店所有投影值的加权平均,为相关权重和。
TSDF融合
对于给定的实时深度图,将每个体素中心warp到实时帧中,,然后通过直接将warp之后的(体素)中心投影到该深度帧中进行曲面融合操作。
其中为体素中心投影对应的像素,通过这种投影将体素和深度图像素对应起来。在实时帧坐标系下,计算使用深度图得到的轴坐标和warp后对应体素中心的轴坐标的差值。
然后就该更新了,
将离散的体素转变到连续的域中,截断距离,
最后这个这个似乎不应该是,而应该是,因为后者才是表示3维坐标的量。
估计warp场状态
前面说了的数据结构与如何在曲面融合中使用,但是还没有说如何计算得到,现在开始计算这个东西。
方法是使用给出的深度图和对应的重建,通过能量函数最小化估计当前变换的值:
其中数据项为稠密的model-to-frame的ICP,正则项惩罚不平滑的运动场,保证由边集连接的变换node之间的ARAP(as-rigid-as-possible)形变。
数据项
目标是估计非刚体变换参数,每个点对应的和公共变换,warp canonical体素到实时帧中。
mesh由点-法线对存储在canonical帧中:,将该mesh用非刚性变换得到实时warp后的点-法线对,warp后的与对应的实时深度数据之间构造数据项。
在model几何和实时帧之间初始的数据对应估计,通过将渲染到使用rasterizing渲染流程的由canonical帧顶点坐标shade的实时帧中(关于rasterizing请参考该链接)。将得到在实时帧中可见的canonical帧的几何:。
作为非刚体优化的先验,当给定一帧新的数据时,首先使用KinectFusion的稠密ICP方法得到公共变换因子。然后在当前可见的canonical几何对应的当前帧像素区域中,构造每个点model-to-frame的point-plane误差为数据项
其中 为Tukey惩罚函数,
第一个公式计算当前深度图像素对应点的坐标,第二到第四公式计算由canonical帧中warp后的点和法线,第五个公式寻找对应关系。
正则项
数据项计算当前可见的形变,但是还有一个关键问题是当前不可见部分的形变也要估计,因此加入了正则项。
基于形变图模型定义正则项,如果node 和 之间存在边则增加一个ARAP正则项到全局能量中最小化
为Huber惩罚函数,定义了正则化的图拓扑,为边的权重。
扩大warp场
原有的warp场node无法覆盖新增的数据时,需要扩大warp场。包括增量式更新形变图node 并重新计算新的分层边拓扑。
当 时,被认为不支持的顶点(vertex)。对于不支持的顶点使用下采样寻找新的node(详细描述看论文)。
给到新增的node之后,需要重新计算边。构造一个层数的正则图node分层,层node简单设为。计算层的正则node,通过在warp场node 上,基于半径搜索的下采样到增加的decimation半径 。再次通过DQB使用当前更新的计算初始node变换。反复如此到指定层数。新的边集开始于的到位于的,finer层中每个node增加的边都连到coarser层中的近邻。