3.1 通过两个相交曲线的重建
主要思想是在曲面曲线的交点附近逼近曲面来重建,微分曲面的基本性质,即所有经过某一点的曲面曲线的切线都位于该点与该曲面相切的平面上。理论上,曲面曲线交点处的平面可以用来粗略地近似一个曲面。在本方法中,使用有限数量的交点,并在这些交点及其邻域中的点上使用切面建立可靠的表面表示。
重构曲面隐式表示为向量场(vector field),其中表示到曲面上最近点的方向和距离,即
(1)
(2)
其中表示距离度量,向量场是在曲面附近的体积网格上的点 计算的,通常称为包络(envelope),包络包含到表面距离小于限定正值的网格点,如图 4 所示
图4 蓝色是包络线,其中包含了所有到曲面的距离比限定值小的网格点
为了计算曲面的隐式表示,我们从两条相交于点的曲面曲线的曲面曲线入手。下面假设曲 面可微,曲线可以通过弧线长度参数化。现在对某个网格点,到曲面最近点的切平面的法向量可以用在最靠近点的点和 的切向量和切向量的向量积来估计,即
(3)
(4)
图6
式 3 中计算得到的法向量是指向曲面上最近的点的。将向量和向量在法向量上的投影的平均值作为到 曲面的距离,即
(5)
向量场在点处的函数值为
(6)
图5 在规则网格上计算向量场的例子
a) 场的值用到表面最近点的方向和距离来表示,如式1定义;
b) 向量场的范数编码为灰度级,具有与表面相关的方向;
图5展示了一个向量场的例子,通过对向量场使用Marching Cubes算法提取出重建的曲面。Marching Cubes算法使用的标量场是通过计算的有符号范数获得的,该范数是一个标量场,其符号是通过计算和传感器方向之间的标量积得到的。图1显示了通过两条曲线重建曲面的例子。
图1
需要注意的是,只要两条曲线不是直线,重构曲面上就不存在平面区域,切平面用来近似曲面,但是每个平面只表示曲面上的一个点。
3.2 通过多条曲线的重建
将3.1中的双曲线重建方法扩展到多曲线的情况是很简单的,如图7所示,一个体素(voxel)可以位于两条以上的曲线附近,因此切平面必须使用所有曲线来估计。曲面的近似可以通过使用所有附近曲线的最近点的切线对法线进行最小二乘估计来获取,这个估计对应于一组切线的“最垂直”向量。
图7
更正式的说,设作为条从点(体素)经过某个限定距离的曲面曲线,设为它们各自的离最近的点处的切线,则得到曲面上的法线为向量可以使得下面的式7最小
(7)
求对的导数,令其为0,可以定义如下方程组
(8)
方程组的解是对应于的最小特征值的特征向量,同时也是切线组的协方差矩阵。到曲面的距离是在估计法线上的投影距离向量的平均值,即
(9)
其中是在曲线上到最近的点。最后,点场的值是
(10)
为了估计曲面某点处的切平面,至少需要两个不平行的切线来计算点处的矩阵,这是因为单个切线不能定义一个平面。这种情况可以通过分析矩阵的特征值来证实:如果两个特征值为0,则只有一个切线存在(或者两个及以上平行的切线),并且在该点估计的法向量也没有发挥作用。这意味着切平面不能用平行曲线来估计,从而使估计值对配准误差(曲线的相对位置)不是很敏感。
在无噪声和精确定位的曲线的交点处,所有的切线共面,因此一个特征值总是为0,并且切线张成一个平面。这是因为,在我们的例子中,曲面是在交点的领域中进行近似估计的,因此所有三个特征值通常都大于0。同样,如果通过有噪声数据来估计切线,这三个特征值可能会有相似的值,此时切线会张成一个立方体,切平面的估计是无效的,因此需要对这些特征值进行额外的验证。设是三个特征值且。。因为矩阵C是归一化的,特征值的和总是为1,即,所以可以采用固定阈值来测试特征值。实验验证,施加约束和可以验证估计的切平面。施加这些约束仅仅意味着用于计算的切线必须近似共面。
由于包络线的大小决定了在每个体素上有多少曲线会影响矩阵,因此它在重建过程中发挥重要的作用:如果选择的包络线相对于曲线的密度过小,则重建的表面会包含孔洞或者显示为一组位于交点附近的斑块。图8显示了使用过小的包络来重建表面的两个例子。
图8
(a) 使用未加权矩阵的重建 (b)使用式11定义的权重函数进行重建
图9中可以看到,增大包络的大小可以解决这个问题。
图9
然而,增加包络的大小也会增加算法的执行时间,因为场(field)需要计算庞大数量的点。更重要的是通过增加包络的大小,用于估计切线数量也会增加,同时到涉及对应切线的曲线的距离也会增加。结果会造成在重建曲面上的细节损失,因为切平面的最小二乘估计充当的是一个低通滤波器。考虑到这些限制,选择包络的大小变成了一种妥协。我们更希望可以通过更密集地采样曲面来解决数据稀疏的问题。因为我们的方法旨在进行交互式的建模,即在获取每条曲线后可以立刻得到重建的曲面,因此在获取距离数据时很容易发现和重采样低密度的区域。
单条曲线仅在位于其包络内的点处影响场(field),在包络以外其影响会降低为0。因此,从式10计算得到的场在包络边缘以及重建的曲面都是不连续的。图9显示了这样一个重建的曲面例子。这个问题的解决方案是用距离的连续函数对切线进行加权,这个函数在包络边缘降低为0,任何递减的单调函数都可以用于此处。在我们的实验中,下面的函数被证明有效
(11)
的值选择等于,这样确保的值在包络以外会降低为0。权值函数也会影响重构曲面的形状,因为它相当于一个低通滤波器,对更靠近的曲线给予更大的影响。图8中可以看到,在交点附近重建的曲面斑块的形状收到权重函数的影响,这是由于对矩阵C的特征值施加了约束。
为了减少可信度低的数据的影响,切线还可以用这样的方式来加权,通过考虑某些不确定度量,例如基于曲线的法线和入射测量射线之间的角度。在用和加权后,式8中定义的矩阵变成了
(12)
3.3 Incremental reconstruction(增量重建)
对于上面的重建方法,都是假设在重建之前已经收集到了所有的数据。如果重建必须在线进行,则每汇入一个单独测量的曲线,就需要增量更新一次场。然而,曲面法线的最小二乘估计,以及向量场,都不能增量计算。另一方面,在每个体素上计算的矩阵是作为求和得到的,因此可以增量更新。设是体素p的矩阵,式12可以写作
(13)
其中。在重建过程中,矩阵与每个体素有关,并在通过求和得到每条曲线后更新。矩阵只取决于曲线并且使用在曲线上最接近点的点点处的切线来计算。除了矩阵,距离向量的和也保持在每个体素。场的值,在式9和10中有定义,只有在使用Marching Cubes算法对曲面进行重建之前或是配准期间被计算。
3.4 定义距离并计算向量场
目前位置,这些曲线被认为是连续的且无噪声。但在实际中,测量得到的曲线表示为线段的集合,并且受噪声影响。除了重建表面的质量外,噪声的水平对算法的功能(表面重建的过程)并没有显著的影响。噪声最重要的影响是在配准过程中,尤其是在匹配步骤。在图15.a所示,噪声水平高的点往往会吸引大量的对应点,这减慢了配准的过程同时使其不那么准确。为了避免这个问题,我们对式3中的距离d采用了一个新的定义来代替欧式距离。
图15 噪声对配准中匹配步骤的影响
a) 利用欧式距离和噪声曲线(或曲面)匹配,由于本例中有噪声的点最接近,所以它吸引了大多数点;b) 使用式21定义的距离和未滤波法线(箭头表示)进行匹配;c) 滤波法线方向的匹配,匹配点更均匀地分布在。
为了提高匹配的鲁棒性,必须对朝线段上最近的点的方向进行校正,同时考虑两个重要的约束条件:1)距离场必须是连续的;2)测量的3D点的位置不应该改变。这个问题的解决方案是在线段上过滤和插入切线,并使用过滤的切线来定义距离。为了清楚起见,距离的计算首先在2D中进行阐述,曲线包含在一个平面中。
曲线被认为是测量点的线性插值,表示为一组线段,其中。除了端点之外,各测量点处的切线可以计算如下
(14)
切线被滤波器(尺寸为)过滤得到:
(15)
这里本文的实验,选择的是一个简单的低通滤波器
(16)
某点和曲线之间的距离是相对于最近的线段计算得到的,即
(17)
其中表示距离度量。因此,给出一点到一线段的距离就足够了。离线段最近的所有点的集合称为与生成线段相关联的基本单元。为了进行曲面建模,只需要在测量曲线相对较小距离内计算场,从而将单元的大小限制为比更小的点的集合,即在包络中。如果是欧式距离,那么基本单元对应于Voronoi图中的一组线段的单元。
引入新的距离定义需要将线段参数化:
(18)
在两个端点处的切线在线段上插值为:
(19)
线段上每一点的法向量定义为垂直于切线的向量,也可以插值:
(20)
图10 计算插值法线方向上的距离。点与线段之间的距离定义为点与点之间的距离,点的法向量经过点。距离d是通过找到包含点的等距线段(每个点与的距离相等的线段)来计算的
最后,点与线段之间的距离定义为点与点之间的距离,点的法向量经过点,如图10所示。更正式的有:
(21)
这样就有
(22)
根据上述定义,要得到点与线段之间距离的封闭形式解,我们注意到,如果距离为,则该点位于端点为和的线段上,如图10所示。此线段是等距线段,其点均位于与生成线段距离d处。这个距离等于三角形区域的面积为0的距离,即和的叉乘为0。这就有了下面的等式:
(23)
简化形式为:
(24)
方程23是由三个二次方程组成的,只有一个未知的。在确保所选的参数不会消失后,这些方程中的任何一个都可以用来计算。所选方程最多可以有两个实根。如果没有实根,则点位于单元之外。如果只有一个实根,则该点位于单元内并且距离有效。如果有两个实根,感兴趣的根是绝对值小的那个。第二个根和基本单元的自交现象有关(参见图11,14),在本节稍后会对此解释。此时,只要指出另一个根大于单元内允许的最大距离就足够了。根的有效性也可以通过测试点是否包含在线段中来验证(见图11)。
图11 式23中实根的说明。尽管两个根和满足式23,但是只有绝对值较小的根表示有效距离。另一个根大于单元内允许的最大距离。点包含在线段,但不在中。
将上述扩展到3D的情况是直接的。在包含和和的平面上投影切线和法线就足够了,如图12所示。投影的切线和,以及投影的法线和,然后在方程19-23中使用,而不是用和。
图12 计算非平面曲线在插值法线方向上的距离。在计算距离之前,将切线和投影到包含,和的平面上。然后将投影和代替和用于式19-23
选择距离的定义,就可以描述基本单元的形状。要做到这一点,注意到在线段两端的投影法向量和将单元限制在平面上(见图10和12)。投影在包含线段的所有平面上的法向量位于与两个切线垂直的两个平面上(图12中红色部分)。因此,单元由这两个平面和规定的最大距离来限制划分。一般来说,基本单元呈圆柱形。图13显示了一个基本单元的示例。
图13 线段的基本单元的例子,单元由两个垂直于线段端点的切线和的平面划分,划分单元的圆柱形表面的大小取决于最大规定距离(包络尺寸)
式23定义的距离计算需要平面上的投影法向量。在实际中投影法向量是通过注意它们包含在平面以及垂直于切线和的限定平面区域来计算得到的。因此,两个法向量为:
(25)
其中是平面上的法线。
图14 基本单元的自相交
a) 由于噪声的原因,法线和在包络内相遇,使得与线段相关的单元的一部分(阴影区域)内的距离无效;b) 过滤切线(以及法线)使交点出现在包络之外,从而使距离对包络内的所有点都有效;c) 三维空间中自相交单元的包络
噪声数据和未充分过滤的切线会导致基本单元自相交以及与邻近单元相交;如图14的a和c。这些区域的距离没有被定义,因此不会被计算。有两种方法可以避免这个问题。第一个方法是增加切线的过滤级别,从而使交点出现在包络之外,如图14的b所示。在极端情况下,切线是平行的,单元永远不会自相交。第二个方法是删除所有不在限制平面右侧的体素。假设切线的方向如图12所示,当满足下面两个条件时,点属于线段所关联的单元格的有效区域:
(26)
因为切线是垂直于限定平面的。
式21仅在线段的基本单元内是有效的。在计算某些点到曲线的距离之前,必须找出点p属于哪个单元格。这是一项繁琐的任务,可以通过反转这个过程来避免,而不是单独找到所有落在每个单元内的体素。这样做,场计算的复杂性和线段(测量点)的数量将成线性关系。
因此,计算单元的场可以简化为简单的两个步骤。
首先,计算单元的边界框。边界框的两个定义角分别是中的最小值和最大值。然后,对于位于边界框内的所有网格点,验证它们是否位于两个限定平面之间,如式26所示。如果是这样,则计算距离并且接受这个小于最大允许距离的距离。
在存在噪声的情况下,选择式21定义的距离对匹配的影响如图15的b和c所示。过滤这些切线,同时也过滤这些法线,改变了指向最近点的方向,从而匹配了方向。因此,匹配点在曲线和重建曲面上分布地更加均匀。重要的是要注意,只有曲线上的切线被过滤时,测量的3D数据才保持不变。
计算场的步骤在下面的伪代码中更详细的说明。假设法线和切线是在场计算之前计算的。
Data:曲线组和在每个点处的切线
初始化在所有体素处的矩阵为0;
For i=1:曲线的数量
For j=1:(曲线i上点的个数)
计算线段的限制框
For 所有在限制框内的体素
If 是和有关的基本单元(式26)
Then
计算投影法线和(式25)
计算和线段之间的距离(式23)
计算参数,使得式22满足
计算在最近点处的切线(式19)
用体素更新矩阵(式13)
用更新距离向量之和(式9)
End
End
End
End
3.5 使用向量场进行配准
和距离图像不同,表面曲线不能一次配准一对。两条曲线之间的交点数量取决于曲线的形状,通常不足以计算对齐曲线所需的刚性变换。在某些情况下,例如在配准表面轮廓时,这种方法只会使曲线重叠。此外,就曲线数量而言,同时配准所有曲线的复杂度为,并且由于重建对象需要大量的曲线,因此很快就会受到限制。避免这些问题的一种有效的方法是将曲线配准到重建模型中。由于向量场包含匹配所需的所有有用信息,所以计算复杂度和曲线的数量保持线性关系。
图16 使用最接近的体素中心来匹配点。最近的点是由式29求得。
一旦为合理数量的曲线计算了向量场,配准一个曲线就变得很简单:对于曲线上的控制点,重构表面上对应的点将作为点到最近的体素的向量场值。
(27)
最接近的体素计算为
(28)
这里的是体素大小(见图16)。显然,体素的大小引入了一个误差,这个误差可以通过在体素处进行线性插值场的值来减小,即
(29)
图16说明了这一改正措施。请注意,由于它是线性插值,最近的点通常不会精确地位于表面上。但是,正如下一节演示的,误差很小。
曲线可以被配准到一个完整或部分的重建模型,从而提供了同步和增量两种配准策略。对同步配准来说,首先从所有可用的曲线中重建模型,也就是说,向量场是用所有曲线计算的。然后,每条曲线都会被配准到这个模型中,一次一条。最后,重新计算向量场,重复整个过程,知道没有进一步的改进。对增量配准来说,初始模型是由相对较少的曲线创建的。然后,首先对下一条曲线配准,将其整合到模型中。
如前所述,通过更新位于至少一条曲线的包络内的每个体素的矩阵(见式12)来更新场。尽管该场是通过矩阵间接表示的,但在下面的伪代码中,我们将其称为向量场f。下面的伪代码描述了这两种策略: