【笔记】Polygon mesh processing读书笔记(4)
多边形网格处理(4)4. Smoothing(平滑)网格平滑(mesh smoothing)从抽象的层面看,网格平滑是指设计和计算一个三角形的光滑函数f:S→Rd\bold{f}:\mathcal{S}\rightarrow \mathbb{R}^df:S→RdMesh smoothing 是几何处理的基础工具光滑函数可以使用,例如顶点位置、纹理坐标、或顶点偏移量来描述可用于网格参数化、各向异性r
多边形网格处理(4)
4. Smoothing(平滑)
- 网格平滑(mesh smoothing)
- 从抽象的层面看,网格平滑是指设计和计算一个三角形的光滑函数f:S→Rd\bold{f}:\mathcal{S}\rightarrow \mathbb{R}^df: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ωxdx F(\omega)=\int_{-\infty}^{\infty} f(x)e^{-2\pi i\omega x}dx F(ω)=∫−∞∞f(x)e−2πiωxdx
f(x)=∫−∞∞F(ω)e2πiωxdω 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)‾dx <f,g>=\int_{-\infty}^{\infty}f(x)\overline{g(x)}dx <f,g>=∫−∞∞f(x)g(x)dx
- 复指数函数可以看做是频率为ω\omegaω的复波,它们构成了频率相关的正交基
eω(x):=e2πiωx=cos(2πωx)−isin(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)
- 在这种情况下,傅里叶变换可以看做是换基,通过正交投影把向量fff投影到到基向量们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(ω),表示fff中包含了多少关于基函数eωe_{\omega}eω的成分,也就是信号f(x)f(x)f(x)中关于频率ω\omegaω的振幅是多少。因为ω\omegaω是连续的,所以求和进一步变成积分,就是式(2)了
- 因为F(ω)F(\omega)F(ω)所在坐标系直接反映了频率,因此简单的提出超过某个阈值的频率,就是理想低通滤波器,这与重建滤波后的函数等价:
f~(x)=∫−ωmaxωmax<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算子的特征方程:
Δ(e2πiωx)=d2dx2e2πiωx=−(2πω)2e2π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
一个方程eie_iei是Laplacian的特征方程,若Δei=λiei\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(v1),⋯ ,f(vn))T(f(v_1),\cdots,f(v_n))^T(f(v1),⋯,f(vn))T,有
(Δf(v1)...Δf(vn))=L(f(v1)...f(vn)) \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,其中每一行的权重是顶点viv_ivi的离散Laplacian:
Δf(vi)=∑vj∈N1(vi)wij(f(vj)−f(vi)) \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矩阵的特征向量e1,⋯ ,en\bold{e}_1,\cdots,\bold{e}_ne1,⋯,en:一个n为特征向量ei\bold{e}_iei可以看做连续特征方程ei(x)\bold{e}_i(\bold{x})ei(x)的离散采样(ei(v1),⋯ ,ei(vn))T(\bold{e}_i(v_1),\cdots,\bold{e}_{i}(v_n))^T(ei(v1),⋯,ei(vn))T
- 特征向量的第k个元素表示的是波ei\bold{e}_iei在顶点vkv_kvk的振幅;波的频率由对应的特征值λi\lambda_iλi决定
- L\bold{L}L的特征向量因此被称为自然振动,固有振动(natural vibrations);特征值是**自然频率,固有频率****(natural frequencies)
- L\bold{L}L是对称的,半正定的,它的特征向量构成了一个Rn\mathbb{R}^nRn正交基,因此,每个向量f=(f1,⋯ ,fn)T\bold{f}=(f_1,\cdots,f_n)^Tf=(f1,⋯,fn)T可以表示为f=∑i=1n<ei,f>ei\bold{f}=\sum_{i=1}^n<\bold{e}_i,\bold{f}>\bold{e}_if=∑i=1n<ei,f>ei
利用这个表示可以重建滤波后的函数,例如只使用前m个特征向量f~=∑i=1m<ei,f>ei\tilde{\bold{f}}=\sum_{i=1}^m<\bold{e}_i,\bold{f}>\bold{e}_if~=∑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算子,然后对空间和时间离散化:
- 空间离散化,顶点的采样值替代函数,这样,每个顶点得到一个进化方程:
∂∂tf(vi,t)=λΔf(vi,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=λLf(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λLf(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)
上式也叫显式欧拉积分;也可使用隐式欧拉积分:
(Id−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)
隐式积分计算比显示积分麻烦,但是数值稳定性高
为了平滑网格,简单应用上述规则到每个顶点位置(x1,⋯ ,xn)T(\bold{x}_1,\cdots,\bold{x}_n)^T(x1,⋯,xn)T:
xi←xi+hλΔxi \bold{x}_i \leftarrow \bold{x}_i + h\lambda\Delta \bold{x}_i xi←xi+hλΔxi
因为顶点位置的Laplace-Beltrami与平均曲法向有关Δx=−2Hn\Delta \bold{x}=-2H\bold{n}Δx=−2Hn,上述方法叫做Laplacian平滑,或平均曲率流
- 沿着法向运动仅对余切拉普拉斯有效;统一拉普拉斯不一定成立。统一拉普拉斯试图把每个顶点移到它的1-邻域的重心上。这种平滑导致切线上的松弛,如下图。这种平滑可能是需要的特色,也可能是一种缺陷。

左图是原始网格,中图是uniform Laplacian平滑的结果,右图是cotangent Laplacian的结果
- 最后,注意到高阶Laplacian流∂f/∂t=λΔkf\partial\bold{f}/\partial t=\lambda \Delta^k\bold{f}∂f/∂t=λΔkf也可以用。其中,高阶拉普拉斯可以使用递归求解Δkf=Δ(Δk−1f)\Delta^k f=\Delta (\Delta^{k-1}f)Δkf=Δ(Δk−1f)
- 高阶拉普拉斯效果更好,但是计算开销更大。2阶拉普拉斯能取得C1C^1C1平滑,拉普拉斯只能达到C0C^0C0边缘平滑
4.3 光顺
不用的应用对光顺的度量方式不同,不过大体遵循最简形状原则(principle of simplest shape):表面应该与无关紧要的细节或振动(oscillations)无关
-
可以通过合适的能量来描述
-
常用的光顺函数是膜能量(membrane energy)
EM(x)=∬Ωdet(I)dudv E_M(\bold{x})=\iint_{\Omega}\sqrt{det(\bold{I})}dudv EM(x)=∬Ωdet(I)dudv
这个能量度量了表面面积,对于修补表面边缘∂Ω\partial\Omega∂Ω来说,最小面积对应的就是膜表面或称为最小表面
- 然而,这个能量方程高度非线性,还包含了第一基本型,最小化计算困难。使用一阶偏导替代第一基本型,得到狄利克雷能量:
E~M(x)=∬Ω∣∣xu∣∣2+∣∣xv∣∣2dudv \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)=0for(u,v)∈Ω \Delta \bold{x}(u,v)=0 \quad for \quad (u,v) \in \Omega Δx(u,v)=0for(u,v)∈Ω
- 离散化:
- 用顶点坐标组成的向量替代连续坐标
- 使用离散Laplace-Beltrami算子替代Laplace
Lx=0 \bold{Lx}=\bold{0} Lx=0
- 如果目标是最小化曲率而不是表面积,使用thin-plate能量:
ETP(x)=∬Ωκ12+κ22dudv E_{TP}(\bold{x})=\iint_{\Omega}\kappa_1^2+\kappa_2^2 dudv ETP(x)=∬Ωκ12+κ22dudv
将其线性化为二阶微分量:
E~TP(x)=∬Ω∣∣xuu∣∣2+2∣∣xuv∣∣2+∣∣xvv∣∣2dudv \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方程式二阶形式Δ2x(u,v)=0\Delta^2\bold{x}(u,v)=0Δ2x(u,v)=0,进一步表示为二阶Laplacian系统L2x=0\bold{L}^2\bold{x}=\bold{0}L2x=0
-
还可以使用更高阶的PDE,比如最小变分表面 Δ3x=0\Delta^3 \bold{x}=0Δ3x=0
-
Uniform Laplacian在顶点密集的地方变化出现误差;contangent能确保正确的结果
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)