TSDF | HyperPlane

TSDF

B. Curless and M. Levoy, “A volumetric method for building complex models from range images,” 1996, pp. 303–312.

一个将align后的range image融合的方法,使用累积权重的符号距离函数。
文中算法性质:

  • 不确定性的表示,误差分布是不对称的,其主方向为视线方向
  • 使用所有的range数据
  • 增量式和有序的独立更新
  • 时间和空间有效性
  • 鲁棒性
  • 没有拓扑形式的限制
  • 重建中填满空间的能力

体素融合

算法使用了一个连续隐函数D(x)D(\mathbf{x}),通过采样表示。这个函数是每个点沿着视线方向到最近的range曲面距离的加权和。

融合规则

通过将从range图像1,,n1, \dots, n中获取的符号距离函数d1(x),d2(x),,dn(x)d_1(\mathbf{x}), d_2(\mathbf{x}), \dots, d_n(\mathbf{x})和权重函数w1(x),w2(x),,wn(x)w_1(\mathbf{x}), w_2(\mathbf{x}), \dots, w_n(\mathbf{x})结合来构造这个函数。该方法的结合规则对每个体素给出一个累积符号距离函数D(x)D(\mathbf{x})和一个累计权重W(x)W(\mathbf{x})。在离散的体素栅格上表示这些函数并且检测出一个D(x)=0D(\mathbf{x}) =0的等值面。对于不同的range scanning技术,权重的选择是不同的。比如光线三角扫描器(optical triangulation scanners),权重取决于每一个顶点(vertex)法线和视线方向的点积,当视线和切平面夹角越小的时候不确定度越高。mesh边界上的数据具有更高的不确定性,需要更小的权重。结合规则为:

D(x)=wi(x)di(x)wi(x)W(x)=wi(x)\begin{aligned} D(\mathbf{x}) &= \frac{\sum w_i(\mathbf{x}) d_i(\mathbf{x})}{\sum w_i(\mathbf{x})} \\ W(\mathbf{x}) &= \sum w_i(\mathbf{\mathbf{x}}) \end{aligned}

其中di(x)d_i(\mathbf{x})wi(x)w_i(\mathbf{x})分别是从range image中得到的符号距离函数和权重函数。为了写成增量式计算:

Di+1(x)=Wi(x)Di(x)+wi+1(x)di+1(x)Wi(x)+wi+1(x)Wi+1(x)=Wi(x)+wi+1(x)\begin{aligned} D_{i+1}(\mathbf{x}) &= \frac{W_i(\mathbf{x}) D_i(\mathbf{x}) + w_{i+1}(\mathbf{x}) d_{i+1}(\mathbf{x})}{W_i(\mathbf{x}) + w_{i+1}(\mathbf{x})} \\ W_{i+1}(\mathbf{x}) &= W_i(\mathbf{x}) + w_{i+1}(\mathbf{x}) \end{aligned}

其中Di(x)D_i(\mathbf{x})Wi(x)W_i(\mathbf{x})是融合第ii帧range image后的累积符号距离函数和权重函数。

截断距离

原则上,距离函数和权重函数都可以无限延长。但是为了保护目标对面的曲面不受影响,该方法减少曲面背后的权重函数。此时需要考虑在哪里减少权重函数。需要保持在曲面背后足够远以保证所有的数据(distance ramp)对零交界面有所贡献,同时也应该足够窄以保证曲面的其它地方不受影响。为了满足这个需求,该方法在距离等于测量的最大不确定间隔的一半时将权重骤减/截断。同样的,曲面前面也不需要扩展太远。
在二维和三维空间中,range测量对应带着权重函数的曲线和曲面,同时signed distance ramps有和传感器不确定性主方向相同的方向。实际上,该方法使用一个固定的点表示符号距离函数,其边界在DminD_{min}DmaxD_{max}之间DminD_{min}DmaxD_{max}必须一个为负数,一个为正数。

算法流程

首先将所有体素权重设为00,因此新的数据可以覆写初始栅格值。然后通过从采样格(sampled lattice)的最近邻构造三角形来网格化range image。通过丢弃长度超过阈值的边来保证网格化没有横跨不连续的地方。必须对以上提及的每一个顶点计算一个对应的权重。一旦range image转换为了每个顶点带权重的三角mesh,就可以开始更新体素栅格了。
符号距离贡献通过从传感器投射一条射线穿过曲面周围的每一个体素,然后在三角网格mesh上与曲面相交来计算(每个点到曲面的距离)。权重通过相交的三角形顶点权重的线性内插得到。

空洞填补

以上内容描述的算法被设计重建曲面的客观部分,不可见部分将显示为空洞。
算法的关键是将volume中所有的点分为三个状态:不可见、空或者近曲面。曲面前面的部分被看作空D(x)=Dmin,W(x)=0D(\mathbf{x})=D_{min},W(\mathbf{x})=0,近曲面区域包含00等值面Dmin<D(x)<Dmax,W(x)>0D_{min}0,曲面后面的部分看作不可见D(x)=Dmax,W(x)=0D(\mathbf{x})=D_{max},W(\mathbf{x})=0。得到这些分类并生成一个空洞填补器是前部分算法的直接扩展:

  1. 将所有的体素空间初始化为不可见状态
  2. 用前面部分的办法更新近曲面的体素,每个体素都有对应(连续的)符号距离函数和权重函数
  3. 沿着视线从观测到的曲面看回去,对应的体素都被标记为空。这个过程被称为空间雕刻。
  4. 进行符号距离函数的00等值面检测,同时在被看作空的区域和被看作不可见区域之间提取曲面

实际上,通过使用函数和储存在体素格中的权重场来表示不可见和空的状态。空洞填补的曲面不是观测曲面的表示,但是由观测曲面推导来的。事后使用滤波器对人工得到的这些空洞填补区域进行模糊处理。空间雕刻技术非常有用,但是该算法仅仅从可见曲面往回雕刻。