多边形网格处理(4)
4. Smoothing(平滑)
- 网格平滑(mesh smoothing)
- 从抽象的层面看,网格平滑是指设计和计算一个三角形的光滑函数 f : S → R d \bold{f}:\mathcal{S}\rightarrow \mathbb{R}^d f:S→Rd
- Mesh smoothing 是几何处理的基础工具
- 光滑函数可以使用,例如顶点位置、纹理坐标、或顶点偏移量来描述
- 可用于网格参数化、各向异性remeshing、空洞填补、变形等任务
- 网格平滑的两块内容:去噪和光顺
- 去噪的意思是从光滑函数 f \bold{f} f中去除高频噪声。大多数情形下, f \bold{f} f指的是顶点位置,通常会被高频噪声影响。去噪要求就是去除噪声(高频部分),同时保持整体形状(低频部分),需要拓展频率和低通滤波器在离散三角网格上的概念
- 光顺,不单是平滑函数 f \bold{f} f,还要获得尽可能平滑的表面块(as-smooth-as-possible surface patch),或尽可能平滑的形状变换(as-smooth-as-possible shape deformation)。as-smooth-as-possible 的意思就是某种光顺能量的最小化,比如考虑了曲率或高阶微分量的
4.1 频域分析工具在离散三角网格上的拓展
4.1.1 1D Fourier Transform
- 傅里叶变换把一个单变量函数从空域变换到频率域:
F ( ω ) = ∫ − ∞ ∞ f ( x ) e − 2 π i ω x d x F(\omega)=\int_{-\infty}^{\infty} f(x)e^{-2\pi i\omega x}dx F(ω)=∫−∞∞f(x)e−2πiωxdx
f ( x ) = ∫ − ∞ ∞ F ( ω ) e 2 π i ω x d ω f(x) = \int_{-\infty}^{\infty} F(\omega)e^{2\pi i \omega x}d\omega f(x)=∫−∞∞F(ω)e2πiωxdω
这些方程有一种直观的几何解释:
- 函数 f ( x ) f(x) f(x)可以看做是某个特定向量空间的元素,可以使用内积:
< f , g > = ∫ − ∞ ∞ f ( x ) g ( x ) ‾ d x <f,g>=\int_{-\infty}^{\infty}f(x)\overline{g(x)}dx <f,g>=∫−∞∞f(x)g(x)dx
- 复指数函数可以看做是频率为 ω \omega ω的复波,它们构成了频率相关的正交基
e ω ( x ) : = e 2 π i ω x = cos ( 2 π ω x ) − i sin ( 2 π ω x ) e_{\omega}(x):=e^{2\pi i\omega x}=\cos(2\pi\omega x)-i\sin(2\pi\omega x) eω(x):=e2πiωx=cos(2πωx)−isin(2πωx)
- 在这种情况下,傅里叶变换可以看做是换基,通过正交投影把向量 f f f投影到到基向量们 e ω e_{\omega} eω上:
f ( x ) = ∑ ω = − ∞ ∞ < f , e ω > e ω f(x)=\sum_{\omega=-\infty}^{\infty}<f,e_{\omega}>e_{\omega} f(x)=ω=−∞∑∞<f,eω>eω
尺度系数 < f , e ω > <f,e_{\omega}> <f,eω>就是 F ( ω ) F(\omega) F(ω),表示 f f f中包含了多少关于基函数 e ω e_{\omega} eω的成分,也就是信号 f ( x ) f(x) f(x)中关于频率 ω \omega ω的振幅是多少。因为 ω \omega ω是连续的,所以求和进一步变成积分,就是式(2)了
- 因为 F ( ω ) F(\omega) F(ω)所在坐标系直接反映了频率,因此简单的提出超过某个阈值的频率,就是理想低通滤波器,这与重建滤波后的函数等价:
f ~ ( x ) = ∫ − ω m a x ω m a x < f , e ω > e ω d ω \tilde{f}(x)=\int_{-\omega_{max}}^{\omega_{max}}<f,e_{\omega}>e_{\omega}d\omega f~(x)=∫−ωmaxωmax<f,eω>eωdω
4.1.2 流形谐波
现在把1D Fourier框架拓展到二维流形上。傅里叶变换不能直接转换到流形函数上。但可以观察到:
- 正弦和余弦函数,也就是复波 e ω e_{\omega} eω,是Laplace算子的特征方程:
Δ ( e 2 π i ω x ) = d 2 d x 2 e 2 π i ω x = − ( 2 π ω ) 2 e 2 π i ω x \Delta (e^{2\pi i\omega x})=\frac{d^2}{dx^2}e^{2\pi i\omega x} = -(2\pi \omega)^2 e^{2\pi i\omega x} Δ(e2πiωx)=dx2d2e2πiωx=−(2πω)2e2πiωx
一个方程 e i e_i ei是Laplacian的特征方程,若 Δ e i = λ i e i \Delta e_i = \lambda_i e_i Δei=λiei
- 由此可见,1D Fourier transform的基函数是Laplacian的特征方程。因此,很自然地选择Laplace-Beltrami算子的特征方程作为泛化的基函数。已知如何离散化Laplace-Beltrami,也就提供了在离散三角网格上泛化Fourier transform的可能
- 这个思路同样可用于其他双变量基函数:对2D矩形,Laplace-Beltrami算子的特征方程对应了离散余弦变换的基函数;对球面,对应了球谐波
- 因此,Laplace-Beltrami的特征方程扩展到了任意二维流形上,称做流形谐波(manifold harmonics)
对离散化的三角网格,将连续函数
f
(
x
)
f(\bold{x})
f(x)表示为网格顶点的采样值组成的向量
(
f
(
v
1
)
,
⋯
,
f
(
v
n
)
)
T
(f(v_1),\cdots,f(v_n))^T
(f(v1),⋯,f(vn))T,有
(
Δ
f
(
v
1
)
.
.
.
Δ
f
(
v
n
)
)
=
L
(
f
(
v
1
)
.
.
.
f
(
v
n
)
)
\begin{pmatrix} \Delta f(v_1)\\ ...\\ \Delta f(v_n)\\ \end{pmatrix}=\bold{L}\begin{pmatrix} f(v_1)\\ ...\\ f(v_n) \end{pmatrix}
⎝⎛Δf(v1)...Δf(vn)⎠⎞=L⎝⎛f(v1)...f(vn)⎠⎞
- Laplace-Beltrami matrix,其中每一行的权重是顶点 v i v_i vi的离散Laplacian:
Δ f ( v i ) = ∑ v j ∈ N 1 ( v i ) w i j ( f ( v j ) − f ( v i ) ) \Delta f(v_i) = \sum_{v_j \in \mathcal{N}_1(v_i)}w_{ij}(f(v_j)-f(v_i)) Δf(vi)=vj∈N1(vi)∑wij(f(vj)−f(vi))
特征方程 e ω ( x ) e_\omega (x) eω(x)变成了Laplace矩阵的特征向量 e 1 , ⋯ , e n \bold{e}_1,\cdots,\bold{e}_n e1,⋯,en:一个n为特征向量 e i \bold{e}_i ei可以看做连续特征方程 e i ( x ) \bold{e}_i(\bold{x}) ei(x)的离散采样 ( e i ( v 1 ) , ⋯ , e i ( v n ) ) T (\bold{e}_i(v_1),\cdots,\bold{e}_{i}(v_n))^T (ei(v1),⋯,ei(vn))T
- 特征向量的第k个元素表示的是波 e i \bold{e}_i ei在顶点 v k v_k vk的振幅;波的频率由对应的特征值 λ i \lambda_i λi决定
- L \bold{L} L的特征向量因此被称为自然振动,固有振动(natural vibrations);特征值是**自然频率,固有频率****(natural frequencies)
- L \bold{L} L是对称的,半正定的,它的特征向量构成了一个 R n \mathbb{R}^n Rn正交基,因此,每个向量 f = ( f 1 , ⋯ , f n ) T \bold{f}=(f_1,\cdots,f_n)^T f=(f1,⋯,fn)T可以表示为 f = ∑ i = 1 n < e i , f > e i \bold{f}=\sum_{i=1}^n<\bold{e}_i,\bold{f}>\bold{e}_i f=∑i=1n<ei,f>ei
利用这个表示可以重建滤波后的函数,例如只使用前m个特征向量 f ~ = ∑ i = 1 m < e i , f > e i \tilde{\bold{f}}=\sum_{i=1}^m<\bold{e}_i,\bold{f}>\bold{e}_i f~=∑i=1m<ei,f>ei
- 这种方法比较昂贵,因为需要计算特别大的Laplace矩阵的特征向量
- diffusion flow是一种便宜的方法
4.2 扩散流(Diffusion flow)
很多物理过程可以描述为扩散流(例如热扩散 heat diffusion和布朗运动)。扩散流可用扩散方程表示:
∂
f
(
x
,
t
)
∂
t
=
λ
Δ
f
(
x
,
t
)
\frac{\partial f(\bold{x},t)}{\partial t}=\lambda \Delta f(\bold{x},t)
∂t∂f(x,t)=λΔf(x,t)
把Laplace算子替换成流形上的Laplace-Beltrami算子,然后对空间和时间离散化:
- 空间离散化,顶点的采样值替代函数,这样,每个顶点得到一个进化方程:
∂ ∂ t f ( v i , t ) = λ Δ f ( v i , t ) , i = 1 , ⋯ , n \frac{\partial }{\partial t}f(v_i,t) = \lambda \Delta f(v_i,t),i=1,\cdots,n ∂t∂f(vi,t)=λΔf(vi,t),i=1,⋯,n
也可写成矩阵形式:
∂
f
(
t
)
∂
t
=
λ
L
f
(
t
)
\frac{\partial\bold{f}(t)}{\partial t} = \lambda \bold{L} \bold{f}(t)
∂t∂f(t)=λLf(t)
- 时间离散化,使用时间步长:
f ( t + h ) = f ( t ) + h ∂ f ( t ) ∂ t = f ( t ) + h λ L f ( t ) \bold{f}(t+h)=\bold{f}(t)+h\frac{\partial\bold{f}(t)}{\partial t}=\bold{f}(t)+h\lambda\bold{L}\bold{f}(t) f(t+h)=f(t)+h∂t∂f(t)=f(t)+hλLf(t)
上式也叫显式欧拉积分;也可使用隐式欧拉积分:
(
I
d
−
h
λ
L
)
f
(
t
+
h
)
=
f
(
t
)
(\bold{Id}-h\lambda\bold{L})\bold{f}(t+h)=\bold{f}(t)
(Id−hλL)f(t+h)=f(t)
隐式积分计算比显示积分麻烦,但是数值稳定性高
为了平滑网格,简单应用上述规则到每个顶点位置
(
x
1
,
⋯
,
x
n
)
T
(\bold{x}_1,\cdots,\bold{x}_n)^T
(x1,⋯,xn)T:
x
i
←
x
i
+
h
λ
Δ
x
i
\bold{x}_i \leftarrow \bold{x}_i + h\lambda\Delta \bold{x}_i
xi←xi+hλΔxi
因为顶点位置的Laplace-Beltrami与平均曲法向有关
Δ
x
=
−
2
H
n
\Delta \bold{x}=-2H\bold{n}
Δx=−2Hn,上述方法叫做Laplacian平滑,或平均曲率流
- 沿着法向运动仅对余切拉普拉斯有效;统一拉普拉斯不一定成立。统一拉普拉斯试图把每个顶点移到它的1-邻域的重心上。这种平滑导致切线上的松弛,如下图。这种平滑可能是需要的特色,也可能是一种缺陷。
左图是原始网格,中图是uniform Laplacian平滑的结果,右图是cotangent Laplacian的结果
- 最后,注意到高阶Laplacian流 ∂ f / ∂ t = λ Δ k f \partial\bold{f}/\partial t=\lambda \Delta^k\bold{f} ∂f/∂t=λΔkf也可以用。其中,高阶拉普拉斯可以使用递归求解 Δ k f = Δ ( Δ k − 1 f ) \Delta^k f=\Delta (\Delta^{k-1}f) Δkf=Δ(Δk−1f)
- 高阶拉普拉斯效果更好,但是计算开销更大。2阶拉普拉斯能取得 C 1 C^1 C1平滑,拉普拉斯只能达到 C 0 C^0 C0边缘平滑
4.3 光顺
不用的应用对光顺的度量方式不同,不过大体遵循最简形状原则(principle of simplest shape):表面应该与无关紧要的细节或振动(oscillations)无关
-
可以通过合适的能量来描述
-
常用的光顺函数是膜能量(membrane energy)
E M ( x ) = ∬ Ω d e t ( I ) d u d v E_M(\bold{x})=\iint_{\Omega}\sqrt{det(\bold{I})}dudv EM(x)=∬Ωdet(I)dudv
这个能量度量了表面面积,对于修补表面边缘 ∂ Ω \partial\Omega ∂Ω来说,最小面积对应的就是膜表面或称为最小表面
- 然而,这个能量方程高度非线性,还包含了第一基本型,最小化计算困难。使用一阶偏导替代第一基本型,得到狄利克雷能量:
E ~ M ( x ) = ∬ Ω ∣ ∣ x u ∣ ∣ 2 + ∣ ∣ x v ∣ ∣ 2 d u d v \tilde{E}_{M}(\bold{x})=\iint_{\Omega}||\bold{x}_u||^2+||\bold{x}_v||^2dudv E~M(x)=∬Ω∣∣xu∣∣2+∣∣xv∣∣2dudv
为求最小化,使用变分法(calculus of variations)
- 把变分法从1D扩展到流形上,得到流形上的欧拉-拉格朗日方程:
Δ x ( u , v ) = 0 f o r ( u , v ) ∈ Ω \Delta \bold{x}(u,v)=0 \quad for \quad (u,v) \in \Omega Δx(u,v)=0for(u,v)∈Ω
- 离散化:
- 用顶点坐标组成的向量替代连续坐标
- 使用离散Laplace-Beltrami算子替代Laplace
L x = 0 \bold{Lx}=\bold{0} Lx=0
- 如果目标是最小化曲率而不是表面积,使用thin-plate能量:
E T P ( x ) = ∬ Ω κ 1 2 + κ 2 2 d u d v E_{TP}(\bold{x})=\iint_{\Omega}\kappa_1^2+\kappa_2^2 dudv ETP(x)=∬Ωκ12+κ22dudv
将其线性化为二阶微分量:
E
~
T
P
(
x
)
=
∬
Ω
∣
∣
x
u
u
∣
∣
2
+
2
∣
∣
x
u
v
∣
∣
2
+
∣
∣
x
v
v
∣
∣
2
d
u
d
v
\tilde{E}_{TP}(\bold{x})=\iint_{\Omega}||\bold{x}_{uu}||^2+2||\bold{x}_{uv}||^2+||\bold{x}_{vv}||^2 dudv
E~TP(x)=∬Ω∣∣xuu∣∣2+2∣∣xuv∣∣2+∣∣xvv∣∣2dudv
对应的Euler-Lagrange方程式二阶形式
Δ
2
x
(
u
,
v
)
=
0
\Delta^2\bold{x}(u,v)=0
Δ2x(u,v)=0,进一步表示为二阶Laplacian系统
L
2
x
=
0
\bold{L}^2\bold{x}=\bold{0}
L2x=0
-
还可以使用更高阶的PDE,比如最小变分表面 Δ 3 x = 0 \Delta^3 \bold{x}=0 Δ3x=0
-
Uniform Laplacian在顶点密集的地方变化出现误差;contangent能确保正确的结果