CGAL的三角曲面网格变形

CGAL的三角曲面网格变形_第1张图片

1、介绍

        此软件包提供了曲面网格变形算法,该算法可以在曲面网格的一些顶点的位置约束下计算曲面网格的新顶点位置,而不需要曲面网格本身以外的任何其他结构。

        此软件包实现了[6]中描述的算法以及另一种能量函数。该算法在位置约束下最小化非线性变形能量,以尽可能保持刚性。能量的最小化依赖于求解稀疏线性系统和找到最接近的旋转矩阵。

2、定义

        曲面网格变形系统由以下部分组成:

        三角表面网格(以下称为表面网格),一组定义要变形的区域的顶点(称为感兴趣区域,缩写为ROI),用户想要移动的ROI的顶点子集(称为控制顶点),每个控制顶点的目标位置(定义变形约束)。

        ROI中不是控制顶点的顶点称为无约束顶点。这些定义如图所示。

CGAL的三角曲面网格变形_第2张图片

        ROI具有绿色顶点(不受约束的顶点)和红色顶点(控制顶点)。(左)初始曲面网格;(右)为每个控制顶点定义目标位置,通过变形算法更新不受约束的顶点的坐标。

         在这个包中,实现了三个算法:        尽可能刚性(ARAP)方法[6];        轮辐和轮辋法[3];        平滑旋转增强尽可能刚性方法[4]。

        在给定边权重方案的情况下,两种方法都会迭代最小化能量函数,并在每一步生成不同的表面网格,直到达到收敛。

        轮辐和轮辋是包中提出的默认方法。它提供了无条件收敛,而ARAP方法需要边权重为正。然而,使用轮辐和轮辋方法得到的结果更依赖于变形表面的离散化。

        平滑旋转增强尽可能刚性方法向ARAP能量添加了一个弯曲项,该项对相邻元素之间的旋转差异进行惩罚。在当前的实现中,使用了一个环类型元素,而在一般情况下,可以使用三角形类型元素。

CGAL的三角曲面网格变形_第3张图片

         “尽可能刚性”与“轮辐和轮缘”变形方法之间的比较。在左侧描绘的带有尖峰的正方形的表面网格上,ROI由绿色顶点组成。控制顶点是红色的。我们将控制顶点沿法线平移到平面,并从同一视点观察“尽可能刚性”(中间)和“轮辐和轮缘”(右侧)方法产生的结果。后一种方法提供了无条件收敛,但不会产生对称结果。

CGAL的三角曲面网格变形_第4张图片

        5261个顶点的仙人掌模型(左)上“尽可能刚性”(中)和“尽可能增强的平滑旋转”(右)之间的比较。 

3、用户接口描述

        实现的变形方法依赖于求解稀疏线性系统。稀疏矩阵的定义取决于加权方案以及无约束和控制顶点。右侧项仅取决于控制顶点的目标位置。

        变形过程由类 Surface_mesh_deformation 处理,表面网格表示为半边数据结构,该结构必须是 HalfedgeGraph 概念的模型。

        类 Surface_mesh_deformation 为预处理(稀疏矩阵定义)和变形(右侧项定义)提供了两组函数。

3.1、预处理

        预处理包括计算上述稀疏矩阵的因式分解,以加速线性系统求解。它需要定义ROI。以下约定用于定义ROI:

        将插入控制顶点集的顶点插入ROI中;

        从ROI中删除的控制点不再被视为控制点;

        擦除的控制点不会从ROI中擦除。

        每次修改ROI时,必须调用预处理函数preprocess()。请注意,如果没有完成,则第一个变形步骤会自动调用此函数,并且与后续变形步骤相比,运行时间更长。

        如果分解成功,函数 Surface_mesh_deformation::preprocess() 将返回 true,否则返回 false。

        排名不足是失败的主要原因。典型的失败案例是:

        所有顶点都在ROI中,没有设置控制顶点

        用于填充稀疏矩阵(SurfaceMeshDeformationWeights模型)的加权方案包含太多零值,破坏了连接信息

        更多:加权方案的选择提供了一种调整控制顶点影响无约束顶点的方式的方法。默认值通常提供令人满意的结果,但是可以选择或设计其他加权方案以在特定情况下实验或改进结果。

        注意:ROI不必是曲面网格的图形的连接组件。但是,为了获得更好的性能,最好为每个连接的组件使用变形对象的单个实例。 

3.2、变形

        曲面网格的变形是由控制顶点的位移触发的。这是通过设置控制顶点的目标位置(直接或通过使用仿射变换应用于控制顶点或一系列控制顶点)来实现的。

        请注意,控制顶点的旋转或平移始终应用于其最后的目标位置集:它们是累积的。

        调用函数 Surface_mesh_deformation::deform() 时,表面网格会发生变形。优化迭代的次数取决于用户是选择固定数量的迭代还是基于能量变化的停止标准。

        调用变形函数后,输入曲面网格将被更新,控制顶点将处于其目标位置,无约束顶点将相应地移动。函数 Surface_mesh_deformation::deform() 可以连续多次调用,特别是在尚未达到收敛的情况下(否则它没有效果)。

        警告:可以在任何时候将顶点插入或删除到ROI和控制顶点集中。特别是,当Surface_mesh_deformation::preprocess()首次调用时,任何不再位于ROI内的顶点将被分配到其原始位置。原始位置可以通过调用Surface_mesh_deformation::overwrite_initial_geometry()进行更新(这也需要一个新的预处理步骤)。

3.3、尽可能刚性和轮辐和轮缘变形技术

        此软件包提供了三种变形技术。本节从用户的角度总结了变形技术、能量和加权方案部分中详细解释的内容。

        尽可能刚性的变形技术需要使用正加权方案来保证能量的正确最小化。使用默认余切加权方案时,这意味着输入表面网格必须是干净的。也就是说,对于表面网格中的所有边缘,与入射三角形中的边缘相对的角度之和小于π。如果不是这样,并且目标应用程序允许修改表面网格连接,一种解决方案(除其他外)是将有问题的边缘二等分(可能是递归的)。如图所示。

CGAL的三角曲面网格变形_第5张图片

        边缘的余切权。(左)边缘e的对角之和α+β大于π。e的余切权为负。(右)分割边缘e,使得每个子边缘e1和e2的对角之和小于π。相应的余切权为正。 

        如果必须保留网格连接,则即使权重为负,也可以保证轮辐和边缘变形技术始终正确地最小化能量。然而,该技术更多地依赖于变形表面的离散化。 

CGAL的三角曲面网格变形_第6张图片

        运行示例“使用整个曲面网格作为感兴趣区域”时的变形结果:deform_1.off和deform_2.off。 

CGAL的三角曲面网格变形_第7张图片

         运行示例“在一系列顶点上使用仿射变换”时的变形结果:deform_1.off和deform_2.off。

4、变形技术、能量和加权方案

        本节给出了理论背景,以使用户手册自成一体,同时解释了权重来自哪里。这使得该软件包的高级用户可以通过开发类 Surface_mesh_deformation 中使用的概念 SurfaceMeshDeformationWeights 的模型来调整加权方案。、

4.1、准备工作

拉普拉斯表示

        曲面网格中顶点的拉普拉斯表示是编码曲面网格中顶点局部邻域的一种方法。在这种表示中,顶点vi与一个3D向量相关联,该向量定义为

L(vi)=∑vj∈N(vi)wij(vi−vj),

        其中:N(vi)表示与vi相邻的顶点集;wij表示有向边vi vj的权重。

        权重的最简单选择是均匀方案,其中wij=1/|N(vi)|,对于每个相邻的顶点vj。在这种情况下,一个顶点的拉普拉斯表示是这个顶点与其相邻顶点的质心之间的向量()。

        在曲面网格变形方面,一个流行的选择是余切权重方案,该方案源自拉普拉斯算子的离散化:给定曲面网格的一个边,其相应的余切权重是该边相对角度的余切的平均值。它被证明产生的结果不会受到近似曲面曲面网格的影响。

CGAL的三角曲面网格变形_第8张图片

        具有均匀权重的vi的拉普拉斯表示:红色正方形顶点是与vi相邻的顶点的质心。拉普拉斯表示L(vi)表示为蓝色向量。 

        考虑具有n个顶点的曲面网格,可以将其拉普拉斯表示Δ定义为n×3矩阵:

LV=Δ,

        L是一个n×n稀疏矩阵,称为拉普拉斯矩阵。它的元素mij,i,j∈{1…n}定义如下:mii=∑vj∈N(vi)wij,如果 vj ∈N(vi),则 mij=−wij,否则为 0。

        V是一个n×3矩阵,由顶点的笛卡尔坐标组成

拉普拉斯变形

        本节是一个介绍,为接下来的两个小节提供背景,这两个小节描述了该软件包中实现的算法。一个仅依赖于下面描述的方法的系统会导致控制点附近的不平滑过渡。有关基于拉普拉斯的不同编辑技术的综述,。

        基于拉普拉斯的变形技术背后的主要思想是在变形约束下保持拉普拉斯表示。表面网格的拉普拉斯表示被视为离散化表面的代表形式,变形过程必须遵循变形约束,同时尽可能地保持拉普拉斯表示。

        将变形约束合并到变形系统中有不同的方法。该软件包支持硬约束,即变形后控制点的目标位置得以保留。

        给定一个具有ROI的曲面网格变形系统,该ROI由n个顶点和k个控制顶点组成,我们考虑以下线性系统

        其中:

        V 是一个 n×3 的矩阵,表示系统的不确定数,代表变形后的顶点坐标。该系统的构建方式是使 k 个控制顶点位于最后几行。

        Lf 表示未约束顶点的拉普拉斯矩阵。它是一个 (n−k)×n 的矩阵,如式 (2) 中定义,但要移除与控制顶点对应的行。

        Ic 是 k×k 的单位矩阵。

        Δf 表示未约束顶点的拉普拉斯表示,如式 (2) 中定义,但要移除与控制顶点对应的行。

        Vc 是一个 k×3 的矩阵,包含控制顶点的目标位置的笛卡尔坐标。

        式 (3) 的左侧矩阵是一个非对称的稀疏方阵。为了解决上述系统,需要使用适当的求解器(例如 LU 求解器)。请注意,解决此系统可保持限制在未约束顶面网格上的拉普拉斯表示,同时满足变形约束。

4.2、尽可能刚性变形

        给定具有n个顶点的曲面网格M{vi}i∈{1…n}和一些变形约束条件下,我们考虑以下能量函数:

        其中:Ri 是一个3×3旋转矩阵;

        wij表示权重;

        N(vi)的浓度表示与vi相邻的顶点集在MN(v′i) 公式;

        表示顶点N(vi)的新位置在给定变形后;

        通过在变形约束下最小化该能量函数来定义尽可能刚性的表面网格变形[6],即指定的位置v′i
对于每个顶点vi

        将一个顶点的单环邻域定义为它的相邻顶点集,这个能量函数背后的直观想法是允许每个顶点的单环邻域有一个单独的旋转,同时通过利用相邻顶点的单环邻域的重叠来防止剪切

CGAL的三角曲面网格变形_第9张图片

        顶点的单环邻域的重叠。四个顶点的单环邻域用不同的颜色绘制,相应的顶点也相应地着色。 

        方程式中每个顶点有两个未知数:新位置(v′k)和旋转矩阵(Ri如果每个顶点的能量贡献为正,则归结为最小化每个顶点vi的能量贡献.

        通过使用两步优化方法(也称为局部-全局方法)将每个这样的能量项最小化。

        在第一步中,顶点的位置被视为固定的,因此旋转矩阵是唯一的未知数。

        对于顶点vi,我们考虑协方差矩阵Si

CGAL的三角曲面网格变形_第10张图片

        已经证明最小化方程式中vi的能量贡献等效于最大化矩阵RiSi的迹。Ri是Si的极分解中的单位矩阵的转置。

        在第二步中,将旋转矩阵代入方程式(4)关于v′i的偏导数中。假设权重是对称的,将偏导数设置为零,得到以下方程:

 

 

        该方程的左侧对应于方程 (1) 的左侧,我们可以设置 Δ求解方程 (3) 中的线性系统
给出了无约束顶点的新位置。可以迭代地应用此两步优化多次以获得更好的结果。

        笔记:用方程式(3)左侧的无约束顶点的拉普拉斯矩阵构建的矩阵;仅取决于初始曲面网格结构和控制顶点。一旦设置了控制顶点,我们就可以使用直接求解器来分解方程(3)中的稀疏矩阵,并在优化过程的每次迭代中重复使用此因式分解。

        我们描述的原始算法中的假设:两个顶点之间的权重是对称的。为了在我们的实现中支持非对称权重,我们稍微修改了方程到

         每个顶点的能量贡献都是正的。如果两个顶点之间的权重总是正的,那么情况总是如此。然而,在使用余切加权方案(我们实现中的默认方案)时,如果与一条边相对的角度之和大于π
,其余切线权重为负。作为对质量差的网格的解决方法,我们通过将负权重设置为零来消除这些负权重。

        接下来描述了一种最小化另一个能量函数的方法,以避免后一个问题。

4.3、轮辐和轮辋变形

       论文提出的弹性能量函数额外考虑了与顶点相交的小面中的所有相对边。最小化的能量函数变为

        其中E(vi)由vi的关联边集组成vi 的(辐条)和链接中的一组边缘(轮圈)在曲面网格 M 中 。

CGAL的三角曲面网格变形_第11张图片

顶点vn和vm是与边vivj相对的顶点。 

        获得无约束顶点的新位置的方法类似于“尽可能刚性变形”中解释的两步优化方法。对于第一步,方程式被修改以考虑E(vi)中的边缘

CGAL的三角曲面网格变形_第12张图片

        对于第二步,将方程式(8)的偏导数设置为零,相对于vi,得到以下方程:

 

        其中 Rm和Rn是顶点vm的旋转矩阵;

        vn其中a和b是边vivj的相对顶点见上图;。注意,如果边缘垂直位于曲面网格的边界上,则wij
必须为 0 和 vm不存在。

        与尽可能刚性变形相比,这种方法的一个重要特性是,当使用余切权重时,每个顶点对全局能量的贡献保证为非负值。因此,即使使用负权重,使用所提出的迭代方法进行能量最小化也总是有保证的。然而,这种方法更依赖于变形表面的离散化

        该包的实现默认使用余切权重(包括负值)。

4.4、平滑旋转增强尽可能刚性(SR_ARAP)变形

        SR-ARAP使用1环元件,在方程式(4)中添加了一个弯曲元件

CGAL的三角曲面网格变形_第13张图片

        α=0.02是一个加权系数。

        A是表面面积,用于缩放不变性。

        只有局部步骤受到添加项的影响,最优旋转现在考虑了邻居的旋转。

5、其他

        余切权重是一种用于计算顶点间权重的方法,特别是在有限元分析、网格生成、曲面建模等领域中。该方法基于顶点间的角度差来分配权重,通常用于平滑和连续的表面表示。

        具体来说,对于任意两个顶点vi和vj,它们之间的余切权重可以定义为:

        wij = 1 / (1 + |cos(θij)|)

        其中,θij是顶点vi和vj之间的夹角。这个权重函数确保当两个顶点接近垂直时(即θij接近π/2),权重接近于0;而当两个顶点接近平行时(即θij接近0或π),权重接近于1。这样的权重分配方式能够较好地处理相邻顶点间的角度变化,使得生成的表面更加平滑和连续。

        在实践中,余切权重常用于构建拉普拉斯算子、处理网格质量、优化曲面重建等问题。这种权重计算方法简单、有效,并且在许多应用中都取得了良好的效果。

        网格顶点的拉普拉斯表示是一种用于描述网格顶点位置的方法,它基于拉普拉斯算子来计算网格顶点的坐标。在网格处理中,拉普拉斯表示通常用于顶点位置的编码、传输和重构等操作。

        对于一个具有N个顶点的网格,假设每个顶点的坐标为(xi, yi, zi),其中i = 1, 2, ..., N。拉普拉斯坐标Li表示第i个顶点的坐标与其相邻顶点坐标的差的加权平均。具体计算过程如下:

  1. 对于每个顶点Vi,找到其一环邻域内的所有顶点,记为Nj(Vi),其中j表示邻域顶点的索引。
  2. 计算顶点Vi与其一环邻域内所有顶点的坐标差,即Δxij = xj - xi,Δyij = yj - yi,Δzij = zj - zi,其中i ≠ j。
  3. 对这些坐标差进行加权平均,得到顶点Vi的拉普拉斯坐标Li,即Li = Σ(wj * Δxij, wj * Δyij, wj * Δzij),其中wj表示权重,可以根据实际情况进行设置,例如可以根据顶点间的距离或角度等因素来确定。

        通过计算每个顶点的拉普拉斯坐标,可以得到整个网格的拉普拉斯表示。拉普拉斯表示可以用于网格的压缩、传输和编辑等操作。在网格重构时,可以通过求解稀疏线性方程组来得到形变后的网格顶点位置。

        拉普拉斯变形是一种处理图像或网格数据的方法,通过改变数据点的位置来达到平滑、去噪、优化等目的。在拉普拉斯变形中,通常使用拉普拉斯算子来计算数据点之间的梯度,并根据这些梯度来确定每个点的移动方向和距离。

        具体来说,对于一个二维平面上的图像或网格,拉普拉斯算子可以定义为:

        L = ∂²/∂x² + ∂²/∂y²

        其中,L是拉普拉斯算子,∂²/∂x²和∂²/∂y²分别表示在x和y方向上的二阶导数。在离散情况下,可以用差分代替导数来近似计算梯度。

        通过将拉普拉斯算子应用于图像或网格数据,可以检测到数据的局部变化和突变。在变形过程中,那些位于梯度较大(即变化较快)的区域的数据点会移动得较远,而那些位于梯度较小(即变化较慢)的区域的数据点会移动得较近。这种移动方式可以使得数据分布更加平滑、均匀或达到某种优化的效果。

        在应用拉普拉斯变形时,还需要注意控制变形的程度和方向,以避免过度变形或产生不期望的结果。此外,拉普拉斯变形通常与其他技术相结合使用,如滤波、插值、优化算法等,以实现更复杂的数据处理任务。

        下面是对这三种方法的简单介绍和比较:

        As-Rigid-As-Possible (ARAP) Deformation:

        ARAP算法是一种保持模型刚体特性的变形方法。它通过最小化模型上所有顶点的局部刚体变换能量来达到变形的效果。这种方法能够保持模型的形状和结构不变形,适用于需要保持模型刚体特性的场景,如机器人运动规划、动画制作等。

        Spokes-and-Rims Deformation:Spokes-and-Rims算法是一种基于几何特征的变形方法。它通过识别和分离模型的几何特征(如边缘、线条、面片等),并对这些特征进行独立的变形,从而达到整体的变形效果。这种方法能够保留模型的特征结构,适用于需要对模型进行细节调整和优化的场景,如建筑设计、景观设计等。

        Smoothed Rotation Enhanced As-Rigid-As-Possible (SR_ARAP) Deformation:
        SR_ARAP算法是对ARAP算法的改进,通过引入平滑旋转的概念,使得模型在变形过程中能够更加平滑地进行旋转。这种方法适用于需要同时保持模型刚体特性和平滑旋转的场景,如机械零件的装配模拟、机器人关节的运动模拟等。

        比较而言,ARAP算法注重保持模型的刚体特性,适用于需要保持形状和结构的场景;Spokes-and-Rims算法注重保留模型的特征结构,适用于需要对模型进行细节调整和优化的场景;而SR_ARAP算法则结合了ARAP算法和平滑旋转的概念,适用于需要同时保持模型刚体特性和平滑旋转的场景。

CGAL 5.6 - Triangulated Surface Mesh Deformation: User Manual

你可能感兴趣的:(CGAL,算法)