DynamicFusion介绍
2015年的CVPR会议上,华盛顿大学的Richard A. Newcombe等人的团队展示了DynamicFusion技术(其论文为DynamicFusion: Reconstruction and Tracking of Non-rigid Scenes in Real-Time ,链接为DF,也可以通过百度很方便的找到这篇论文;如果需要论文原文可以私信我)。
其构件了一个可以实时重建 非刚性变形 动态场景 的系统。并且随着新的数据融合进模型当中,模型得到降噪、细节更加精细。查看视频请点击。
DynamicFusion核心问题及思路
传统的SLAM系统,要么将场景限定为静态场景;要么只能离线进行动态场景的重建。针对这样的不足,文章提出了核心的问题:How can wo generalise KinectFusion to reconstruct and track dynamic, non-rigid scenes in real-time? 即实时重建动态场景。
DynamicFusion系统的核心是:建立一个关键帧(canonical frame)下的模型,之后场景发生的变化都可以通过几何变换对应到这个模型上;每一次新读取了深度图都通过几何变换之后再融合到模型当中,这里变换的过程相当于取消了场景的变换;就这样场景逐渐的变得真实丰满。
其系统两部分构成:重建的三维场景(reconstructed scene geometry),记为V、体翘曲场(a dense volumetric 6D warp(motion) field),记为W。重建的三维场景V使用TSDF模型表示,类似于KinectFusion中的模型表示方法。体翘曲场W可以简单的理解为:记录了V中点与深度图像D中点想换转换的矩阵,D中数据经过W的变换之后才能融合到V中。
每一帧深度图读取进入系统之后,需要进行的流程如下:
1、估算W;(Estimation of the volumetric model-to-frame warp field parameters )
2、根据W,将D融合到V中;(Fusion of the live frame depth map into the canonical space via the estimated warp field )
3、扩展W。(Adaptation of the warp-field structure to capture newly added geometry )
体翘曲场(warp field)W、模型V中点变换到当前帧D中
warp field W
在时刻t,W是有n个变形点(deformation node)构成:。对于每一个点:dgv是其在三维模型V中的位置;dgse3为其相关联的变换矩阵;dgw为基于径向的比重(拓展体翘曲场的时候讲到)。
点:V->D
对于模型V中的一个点,其怎么通过W变换到D中对于的位置呢?定义一个矩阵,其表示点从V到D的变换矩阵。其计算公式为:
其中,vc即为,vt为变换到D中的坐标,第二个公式为计算法向量的情况。
矩阵的计算,需要先计算中间矩阵,计算则需要用到体翘曲场W,其计算公式为:
其中,N(xc)表示在W中距离点最近的k最点,qkc为这些点的对偶四元数,wk为各个点的权重;DQB为dual-quaternion blending(对偶四元数融合),将这最近的k个点的对偶四元数进行插值融合,也就是对其旋转和平移进行了插值,对偶四元数融合的知识可以在论文Dual-Quaternions From Classical Mechanics to Computer Graphics and Beyond(Ben Kenwright, www.xbdev.net, bkenwright@xbdev.net)中查看。SE3(.)表示将四元数转化成为变换矩阵。
注:对偶四元数可以同时表示空间的旋转和平移。
计算公式为:
其中,Tlw为相机的变换矩阵。
经过以上的变换,就可以将模型V中的一个点变换到当前帧D中了。
根据W将深度图D融合到模型V中
DynamicFusion中模型V也是使用TSDF模型表示的。TSDF模型将需要表示的空间划分成网格,一般为256*256*256个或者512*512*512个。每一个小格子成为体素(voxel),其中存放了两个数值:加权平均的距离v(x),表示这个体素到三维场景表面的距离;权重和w(x),代表当前这个距离v(x)的权重。其中v(x)为0的地方即为场景表面,但是很难直接出现v(x)为0的体素,一般通过插值得到。
TSDF模型的更新是一个体素一个体素进行的,以一个体素的更新为例。为该体素的中心,将其转化到当前帧D中:
其中:xt为在D中的位置。再计算Projective signed distance:
其中:K为相机的固有转化矩阵(即内参)(经cv_walking评论提醒得以修改);将点xt将映射到深度图中;进而左乘K的逆矩阵,得到了通过深度图得到的在D中的坐标;再与通过W得到的坐标进行比较。之后的操作为:
其中:dc(.)表示将离散的点转化到对应的TSDF中的体素。
下图为场景发生非刚性变形、发生遮挡时的情况,这一块理解还不是很透彻。
估算体翘曲场(warp field)W
123
拓展体翘曲场(warp field)W
123