【笔记】Polygon mesh processing读书笔记(5)

多边形网格处理(5)

5. 参数化(Parameterization)

5.1 通用目标

  • 计算一个目标的参数化意味着为其附着一个坐标系统。这个坐标系统有许多可能的应用,比如纹理映射、法向映射(normal mapping)、重网格(re-meshing)、建模与仿真
  • 所谓参数化,是指一个函数,把3D表面以一一对应的方式映射到2D域

5.2 三角网格的参数化

  • Triangulated surface(三角网格表面),由顶点、位置和三角表面定义——可以使用分段线性函数参数化——这个分段与三角形表面对应
  • 也就是说,对每一个顶点 ( x i , y i , z i ) (x_i,y_i,z_i) (xi,yi,zi),有对应的 ( u i , v i ) (u_i,v_i) (ui,vi)

给定参数空间 Ω \Omega Ω的一个点 ( u , v ) (u,v) (u,v),参数化 x \bold{x} x表示为
x ( u , v ) = α p i + β p j + γ p k \bold{x}(u,v) = \alpha \bold{p}_i+\beta \bold{p}_j + \gamma \bold{p}_k x(u,v)=αpi+βpj+γpk
其中, ( i , j , k ) (i,j,k) (i,j,k)表示了包含点 ( u , v ) (u,v) (u,v)的三角形 [ ( u i , v i ) , ( u j , v i ) , ( u k , v k ) ] [(u_i,v_i),(u_j,v_i),(u_k,v_k)] [(ui,vi),(uj,vi),(uk,vk)] ( α , β , γ ) (\alpha,\beta,\gamma) (α,β,γ)是重心坐标

  • 构建一个三角化表面的参数化,意味着找到每个顶点 i i i对应的坐标 ( u i , v i ) (u_i,v_i) (ui,vi)。进一步,这些坐标需要保证参数空间的图像没有自交——这意味着参数空间任意两个三角形的相交方式要么是有一条公共边,要么是一个公共顶点,要么是完全不相交

5.3 重心映射

  • 重心映射是最常见的三角化表面参数化的方法,基于Tutte的重心映射定理。

Tutte的重心映射定理

  • 给定一个与圆盘拓扑同胚的三角化表面,如果它的边界顶点分布在一个凸多边形上,且内部顶点可以其邻居凸组合,则 ( u , v ) (u,v) (u,v)坐标构成一个有效的参数化(无自交)

算法

假设顶点按照下列方式排序: { 1 , ⋯   , n i n t } \{1, \cdots, n_{int}\} {1,,nint}对应内部顶点, { n i n t + 1 , ⋯   , n } \{n_{int}+1, \cdots, n\} {nint+1,,n}对应边缘顶点,那么应该有:
∀ i ∈ { i , ⋯   , n i n t } : − a i , i ( u i v i ) = ∑ j ≠ i a i , j ( u j v i ) \forall i \in \{i, \cdots, n_{int}\}: \quad -a_{i,i}\begin{pmatrix}u_i\\v_i\end{pmatrix}=\sum_{j\neq i}a_{i,j}\begin{pmatrix}u_j\\v_i\end{pmatrix} i{i,,nint}:ai,i(uivi)=j=iai,j(ujvi)
其中系数 a i , j a_{i,j} ai,j满足
{ a i , j > 0 , 如 果 v i 和 v j 有 边 相 连 a i , i = − ∑ j ≠ i a i , j a i , j = 0 , 其 他 \begin{cases} a_{i,j} > 0, \quad 如果v_i和v_j有边相连\\ a_{i,i} = -\sum_{j \neq i}a_{i,j}\\ a_{i,j} = 0, \quad 其他 \end{cases} ai,j>0,vivjai,i=j=iai,jai,j=0,

  • Tutte的理论可以定义一系列有效的参数化,因此可以用来构造参数化
    • 首先,把表面的边界点固定在某个凸多边形上;
    • 然后,通过求解公式(2)可以找到内部点的uv坐标。
      • 具体做的时候,实际上 ( u i , v i ) (u_i,v_i) (ui,vi)未知, ( u j , v j ) (u_j,v_j) (uj,vj)部分已知(边界点已知)
      • 求解两个线性系统 A u = u ˉ \bold{Au}=\bold{\bar{u}} Au=uˉ A v = v ˉ \bold{Av}=\bold{\bar{v}} Av=vˉ
      • 等式左边的 u , v \bold{u},\bold{v} u,v包含所有内部顶点的坐标(这里 u u u v v v),等式右边 u ˉ , v ˉ \bold{\bar{u}},\bold{\bar{v}} uˉ,vˉ是所有边缘顶点坐标的加权

∀ i ∈ { 1 , ⋯   , n i n t } : { ∑ j = 1 n i n t a i , j u j = u i ˉ = − ∑ j = n i n t + 1 n a i , j u j ∑ j = 1 n i n t a i , j v j = v i ˉ = − ∑ j = n i n t + 1 n a i , j v j \forall i \in \{1,\cdots,n_{int}\}: \quad \begin{cases} \sum_{j=1}^{n_{int}}a_{i,j}u_j = \bar{u_i}=-\sum_{j=n_{int}+1}^{n}a_{i,j}u_j\\ \sum_{j=1}^{n_{int}}a_{i,j}v_j = \bar{v_i} = -\sum_{j=n_{int}+1}^{n}a_{i,j}v_j \end{cases} i{1,,nint}:{j=1nintai,juj=uiˉ=j=nint+1nai,jujj=1nintai,jvj=viˉ=j=nint+1nai,jvj

  • 公式(4)的进一步说明:

    • i ∈ { 1 , n i n t } i \in \{1,n_{int}\} i{1,nint},任意一个内部点 ( u i , v i ) (u_i,v_i) (ui,vi),它由它的邻居点的凸组合决定。其中左边是内部点的凸组合,右边是边界点的凸组合
    • 这个式子一共有 n i n t n_{int} nint个,组成一个线性方程组。其中 a i , j a_{i,j} ai,j未知。
  • 有许多求解式(4)的方法。对大型网格,有sparse iterative and sparse direct methods,对小型网格,有Gauss-Seidel求解器。实际中,这种方法是迭代地把所有顶点移到它们邻居的重心;

  • 这种迭代当 ( u , v ) (u,v) (u,v)的更新小于给定阈值时停止;或迭代指定轮次后停止。

A \bold{A} A矩阵具有一个性质,确保Gauss-Seidel迭代能够收敛

  • 一种可能的选择是设 a i , j = 1 a_{i,j}=1 ai,j=1,若 i , j i,j i,j之间有边; a i , i = − ∣ N i ∣ a_{i,i}=-|\mathcal{N}_i| ai,i=Ni,表示顶点 i i i的1-邻域个数的相反数。这种选择没有考虑几何(边的长度、三角形的角度等),可能引入失真
  • 通过选择不同的权重 a i , j a_{i,j} ai,j,可以最小化失真

离散拉普拉斯

  • Laplacian是多变量函数二阶偏导的泛化。在平面2D上,拉普拉斯算子表示为 Δ f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \Delta f = \frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2} Δf=x22f+y22f
  • 这里Laplacian度量某个函数的规律性(regularity)。例如对线性函数来说,Laplacian为0,表示梯度没有变换,也就是平滑。因此, u , v u,v u,v的Laplacian可以用来保证参数坐标的平滑
  • Laplacian拓展到曲线上就是Laplace-Beltrami算子。对某个顶点 x ( u i , v i ) \bold{x}(u_i,v_i) x(ui,vi),有一种离散拉普拉斯:

a i , j = 1 2 A i ( cot ⁡ α i , j + cot ⁡ β i , j ) a i , i = − ∑ j ≠ i a i , j a_{i,j}=\frac{1}{2A_i}(\cot \alpha_{i,j}+\cot \beta_{i,j})\\ a_{i,i}=-\sum_{j \neq i} a_{i,j} ai,j=2Ai1(cotαi,j+cotβi,j)ai,i=j=iai,j

  • 这种形式的Laplacian可以表示为一个矩阵,其中非0元素表示了网格的连通性,并且满足 a i , i = − ∑ j ≠ i a i , j a_{i,i}=-\sum_{j \neq i}a_{i,j} ai,i=j=iai,j。这个正好可以用来当做上面参数化中的权重系数 a i , j a_{i,j} ai,j [Eck1995]
  • 注意,公式(5)在网格存在钝角的时候可能为负,这就不满足Tutte的定理了。咋弄呢?一种方法是把原始网格在细分一下 [Rivara1984];另一种法子就是换一种权重的定义 [Floater2003],把对角的余切和变成半角的正切。这种方式也叫平均值权重。这种方法能保证Tutte定理的正性。
  • 但是还有一个问题,就是Tutte定理要求边界点落在某个凸多边形上。然而有些网格固定边界点本身就很难:比如,有些网格很难找到一种“自然”的边界划分方式;有些表面,表面不一定是凸的。

小结

Tutte定理的参数化能够确保参数化网格无自交。但是Tutte定理的执行需要很强的前提条件。

5.4 保角映射(Conformal mapping)

  • 各项异的椭圆在参数化方法中扮演中心角色。对保角映射来说,所关注的是各项异的椭圆的一个特殊类,也就是圆。也就是说,在网格空间,两个梯度向量 x u \bold{x}_u xu x v \bold{x}_v xv是正交且等长的。

  • 保角性意味着Jacobian变换矩阵 J \bold{J} J只包含旋转和缩放(也就是相似变换,similarity transform)。所以,保角性其实就是相似变换。

  • 怎么计算保角参数化呢?

三角形的梯度

  • 观察三角形,建立局部坐标系,有

在这里插入图片描述

  • 说明: X \bold{X} X很容易理解, Y \bold{Y} Y就是把 X \bold{X} X旋转90度;或者可以先算法向(平面内两个向量的叉积),然后再做一次叉积
  • 假设有一个函数能够把三角形局部坐标系下的点 ( X , Y ) (X,Y) (X,Y)映射到参数空间的点 ( u , v ) (u,v) (u,v),那这个函数的梯度怎么求?

∇ u = [ ∂ u / ∂ X ∂ u / ∂ Y ] = 1 2 A T [ Y j − Y k Y k − Y i Y i − Y j X k − X j X i − X k X j − X i ] ( u i u j u k ) \nabla u=\begin{bmatrix}\partial u/\partial X \\ \partial u / \partial Y\end{bmatrix}=\frac{1}{2A_T}\begin{bmatrix}Y_j-Y_k & Y_k-Y_i & Y_i-Y_j\\ X_k-X_j & X_i-X_k & X_j-X_i\end{bmatrix}\begin{pmatrix}u_i\\u_j\\u_k\end{pmatrix} u=[u/Xu/Y]=2AT1[YjYkXkXjYkYiXiXkYiYjXjXi]uiujuk

  • 说明:这个只对坐标 u u u求偏导,等式右边前面是一个常量,后面是包含这个点的三个顶点的 u u u坐标分量;
  • 根据保角映射的拟也是保角映射,有 ∇ v = n × ∇ u \nabla v = \bold{n} \times \nabla u v=n×u

最小二乘保角映射(LSCM)

  • LSCM方法简单地表达表面到参数空间映射函数的保角性条件
  • 设表面三角形,和它的局部正交基,在这种情况下有

∇ v = ( ∇ u ) ⊥ = [ 0 − 1 1 0 ] ∇ u \nabla v = (\nabla u)^{\bot} = \begin{bmatrix}0 & -1\\ 1 & 0\end{bmatrix}\nabla u v=(u)=[0110]u

  • 对分段线性保角映射,满足

M T ( v i v j v k ) − [ 0 − 1 1 0 ] M T ( u i u j u k ) = 0 \bold{M}_T\begin{pmatrix}v_i\\v_j\\v_k\end{pmatrix}-\begin{bmatrix}0&-1\\1&0\end{bmatrix}\bold{M}_T\begin{pmatrix}u_i\\u_j\\u_k\end{pmatrix}=\bold{0} MTvivjvk[0110]MTuiujuk=0

  • 当表面可展开(developable)时,上式成立;其余情形,通过最小化能量函数 E L S C M E_{LSCM} ELSCM
  • E L S C M E_{LSCM} ELSCM与平移和旋转无关,因此最小解不唯一。因此,实际处理时要固定至少两个顶点来减少优化的自由度

保角映射的几何方法(ABF)

  • Angle-based flattening (ABF)
  • 观察到:参数空间是一个二维triangulation,唯一地由所有三角形拐角的角度决定
  • 找到 ( u i , v i ) (u_i,v_i) (ui,vi)坐标——与角度有关——使得下式能量最小化:

E A B F ( α ) = ∑ T ∈ F ∑ k = 1 3 ( α k T − β k T β k T ) 2 E_{ABF}(\bold{\alpha})=\sum_{T\in \mathcal{F}}\sum_{k=1}^3 (\frac{\alpha_{k}^T-\beta_k^T}{\beta_k^T})^2 EABF(α)=TFk=13(βkTαkTβkT)2

α k T \alpha_k^T αkT是2D未知角度; β k T \beta_k^T βkT是3D mesh上的角度,也是逼近的目标

  • 这里需要使求得的2D角度是一个有效的三角化:
    • α 1 T + α 2 T + α 3 T = π \alpha_1^T+\alpha_2^T+\alpha_3^T=\pi α1T+α2T+α3T=π
    • 对每个内点,one-ring内角和为 2 π 2\pi 2π
    • 为确保重建的三角形能合上,一个顶点相关的所有边的边长和角度有要求
    • 这几个条件可以作为Lagrangian加到能量函数里

5.5 基于失真(扭曲)分析的方法

  • 考察第一基本型 I \bold{I} I
    • 如果 σ 1 = σ 2 \sigma_1=\sigma_2 σ1=σ2,是保角的
    • 如果 σ 1 σ 2 = 1 \sigma_1\sigma_2=1 σ1σ2=1,是保面积的
    • 如果 σ 1 = σ 2 = 1 \sigma_1=\sigma_2=1 σ1=σ2=1,是等距的,也就是全等变换
  • 只有可展曲面可以做到等距参数化。这种表面的告诉曲率处处为0

分段线性表面的度量性质

  • 对前面提到的从三角形局部坐标系 ( X , Y ) (X,Y) (X,Y)到参数空间 ( u , v ) (u,v) (u,v)的映射函数,其梯度形式是一个Jacobian:

J T = [ ∂ u / ∂ X ∂ v / ∂ X ∂ u / ∂ Y ∂ v / ∂ Y ] = [ u X , u Y ] \bold{J}_T=\begin{bmatrix}\partial u/\partial X & \partial v / \partial X\\ \partial u/\partial Y & \partial v/ \partial Y \end{bmatrix}=[\bold{u}_X,\bold{u}_Y] JT=[u/Xu/Yv/Xv/Y]=[uX,uY]

  • 说明:这个Jacobian对每个三角形 T T T都是恒定的

  • 通过Jacobian可以计算出第一基本型 I T = J T T J \bold{I}_T=\bold{J}_T^T\bold{J} IT=JTTJ

  • 由第一基本型可以求出 σ 1 , σ 2 \sigma_1,\sigma_2 σ1,σ2

若干基于失真分析的参数化方法

Green-Lagrange Deformation Tensor
  • L = I − I d \bold{L}=\bold{I}-\bold{Id} L=IId,度量“non-isometry”。但是 L \bold{L} L是个矩阵,最优化十分困难
MIPS
  • 最小化 σ 1 / σ 2 \sigma_1/\sigma_2 σ1/σ2,实际上是Jacobian矩阵的2范数形式
  • 由于2范数也不好优化,用F范数取代
Signal-specialized parameterization

小结

  • 参数化方法有固定边界和自由边界两类
  • 上述方法处理的对象都是圆盘拓扑同胚的,没有考虑更复杂的情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值