多边形网格处理(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=i∑ai,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,如果vi和vj有边相连ai,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,juj∑j=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=∂x2∂2f+∂y2∂2f
- 这里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=i∑ai,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/∂X∂u/∂Y]=2AT1[Yj−YkXk−XjYk−YiXi−XkYi−YjXj−Xi]⎝⎛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)⊥=[01−10]∇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} MT⎝⎛vivjvk⎠⎞−[01−10]MT⎝⎛uiujuk⎠⎞=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(α)=T∈F∑k=1∑3(β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/∂X∂u/∂Y∂v/∂X∂v/∂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=I−Id,度量“non-isometry”。但是 L \bold{L} L是个矩阵,最优化十分困难
MIPS
- 最小化 σ 1 / σ 2 \sigma_1/\sigma_2 σ1/σ2,实际上是Jacobian矩阵的2范数形式
- 由于2范数也不好优化,用F范数取代
Signal-specialized parameterization
小结
- 参数化方法有固定边界和自由边界两类
- 上述方法处理的对象都是圆盘拓扑同胚的,没有考虑更复杂的情况