Taubin 1995 — 把网格平滑当成低通滤波
待复核Taubin 1995 把”让 3D 网格变光滑”重新理解成一道信号处理题:顶点位置是信号,皱褶毛刺是高频噪声,做一遍低通滤波就能去掉。
日常类比:照片去噪你会模糊一下;音频去嘶嘶声你会砍高频。网格也一样——先定义”频率”是什么,再套滤波器。
它给出的”频率”建立在图拉普拉斯算子上:每个顶点相对邻居平均的偏离,就是离散版”二阶导数”。算子的特征向量就像网格上的傅里叶基。
不理解它,下面这些事都没法解释:
- 为什么早期扫描软件一平滑,人头模型就像气球放气一样整体瘪掉
- 为什么后来能谈”网格上的低通 / 高通”——频率从哪来的
- 为什么 MeshLab / libigl 里的 Taubin Smooth 要成对调 λ 和 μ,而不是只调一个步长
- 为什么谱网格处理、乃至图神经网络的频域卷积,都把图拉普拉斯当默认语言
它是谱网格处理的奠基文献之一:先用图拉普拉斯定义频率,再用 λ|μ 双步骤做到平滑但不收缩。之后三十年的网格去噪与谱方法,大多站在这套框架上往前走。
1. 把网格当信号
Section titled “1. 把网格当信号”N 个顶点的 x 坐标是长度 N 的向量(y、z 同理)。Taubin 用的离散拉普拉斯是:
(Δx)_i = sum_{j in N(i)} w_ij · (x_j − x_i)类比:顶点相对邻居平均的”拉力”。完全平 ≈ 0,尖刺很大。常用正定形式写 K = −Δ(即度矩阵减邻接权 D−W),特征值 ≥ 0,当作频率轴上的刻度。
2. 特征向量 = 网格的傅里叶基
Section titled “2. 特征向量 = 网格的傅里叶基”对 K 做特征分解:0 ≤ k_1 ≤ … ≤ k_N。k 小 → 越平滑(低频);k 大 → 越震荡(高频)。任意网格信号都能写成这些特征向量的线性组合——和普通信号写成正弦波叠加完全同构。
3. 滤波器 = 函数 f(k)
Section titled “3. 滤波器 = 函数 f(k)”设计滤波器 = 挑 f(k):≈1 保留该频率,≈0 砍掉。低通 = 小 k 接近 1、大 k 接近 0。不必真的做完整特征分解——后面的 λ|μ 迭代等价于在频域乘这个 f。
4. λ|μ 两步法(防收缩)
Section titled “4. λ|μ 两步法(防收缩)”朴素一步 x ← x + λ·Δx(λ>0)对应 f(k)=1−λk,除直流外全被压低 → 收缩。Taubin 的招:缩一步再放一步——
- 第一步:λ>0,向邻居靠,压毛刺
- 第二步:μ<0 且 |μ|>λ,反向推一点,把低频形状捞回来
合起来 f(k)=(1−λk)(1−μk):k≈0 处 ≈1(不缩),大 k 处 ≈0(去毛刺),中间零点 k_PB 控制截止频率。
这就解决了”平滑但不缩”的核心矛盾。
案例 1:球为什么越平滑越小
Section titled “案例 1:球为什么越平滑越小”圆球网格上,邻居平均落在球内 → 顶点向球心移。重复几次球缩成点。Taubin 两步法”拉一下再推一下”,保住最低频(整体形状那一档),体积大致不变。
案例 2:MeshLab / 伪代码里怎么跑
Section titled “案例 2:MeshLab / 伪代码里怎么跑”MeshLab 菜单:Filters → Smoothing, Fairing and Deformation → Taubin Smooth,填 λ、μ、迭代次数。概念上等价于:
# 伪代码:对顶点坐标 V 做 N 次 λ|μfor t in range(N): V = V + lam * delta(V) # λ>0:向邻居靠,压毛刺 V = V + mu * delta(V) # μ<0:反向推一点,保体积逐步解释:
- 输入:带扫描噪声的三角网格(先保证流形)
- 每轮先 λ 后 μ;看表面是否变顺、轮廓是否未瘪
- 迭代约 5–20 次停手。经验:λ≈0.5、μ≈−0.53;|μ|−λ 越大保形越好、去噪越弱
案例 3:扫描头模去噪(跟做思路)
Section titled “案例 3:扫描头模去噪(跟做思路)”假设平均边长约 1mm,噪声振幅约 0.2–0.5mm(亚边长级高频抖动):
- 先修非流形 / 破洞,再跑 Taubin(λ=0.5,μ=−0.53,约 10 次)
- 检查鼻尖、耳廓是否还在,脸是否未整体缩小
- 若尖锐边被糊掉,不要靠加迭代硬磨——换 Fleishman 2003 bilateral 或 L0 保边方法
- 权重选错特征会扭:等权/Fujiwara 权随三角化漂;cotangent 权(Pinkall-Polthier 1993)才对应曲面拉普拉斯-贝尔特拉米。
- λ、μ 靠肉眼:教科书常给 λ=0.33、μ=−0.34,但模型不同最佳值不同,没有万能自动档。
- “频率”依赖拓扑:同几何不同三角化 → 拉普拉斯不同 → 高频含义不同。
- 不能保边:低通天生糊尖角;要保边得换 bilateral / L0 那一类后续工作。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 3D 扫描后处理:噪声约 0.1–0.5 倍平均边长、需要快速稳定去毛刺
- 只要 5–20 次迭代、两三个参数的平滑
- 入门谱网格处理——先搞懂拉普拉斯特征向量这套语言
不适用:
- 工业 CAD 要留尖锐棱边(用 bilateral / anisotropic)
- 非流形或破洞网格(先修拓扑)
- 大变形重建(那是 mesh editing,不是 smoothing)
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 1980s 末:3D 扫描刚普及,扫出来的网格全是高频抖动,业界用各种 ad hoc 平均
- 1993:Pinkall & Polthier 提出 cotangent 公式,把离散拉普拉斯和连续曲面对齐
- 1995:Taubin 在 SIGGRAPH 第一次把整套信号处理语言搬到任意拓扑网格上
- 2000s:Sorkine、Lévy 等人把拉普拉斯坐标用于 mesh editing;谱网格处理变成独立子领域
- 2010s 至今:图神经网络的”图卷积”频域定义,同样扎根于图拉普拉斯,与 Taubin 一脉相承
- 跨学科类比是创新的高产田——把信号处理搬到几何上,整个领域被重塑
- 解决副作用的招式:用反向操作抵消(λ 缩一下,μ 放一点)
- 离散算子要对应连续算子,否则一改拓扑结果就漂——这是 cotangent 权重对、等权重常错的根本原因
- 低通滤波的局限:它对所有信号一视同仁,要”区别对待”必须引入非线性(bilateral 那条线)
- 论文 PDF:Taubin SIGGRAPH 1995
- 后续保边工作:Fleishman et al. 2003 Bilateral Mesh Denoising
- 谱网格处理综述:Lévy & Zhang 2010, Spectral Mesh Processing
- laplace-beltrami —— 连续曲面上的对应算子
- spectral-graph-theory —— 图拉普拉斯的数学背景
- loop-1987-subdivision —— 同样在三角网格上做局部平均,但目的是细分加密而非去噪
- marching-cubes-1987 —— 体素抽出的网格通常很糙,是 Taubin 平滑的常见输入源
- desbrun-1999-implicit-fairing —— 隐式公平化,同一拉普拉斯家族的后续工作
- goral-1984-radiosity —— 同样在网格上解方程,谱方法对它也适用
- graph-neural-networks —— 图卷积的频域定义和 Taubin 滤波器同根
- desbrun-1999-implicit-fairing —— Desbrun 1999 — 把热扩散方程隐式离散到三角网
- garland-heckbert-1997-qem —— QEM — 给三角网格『瘦身』时算每一刀的代价
- sorkine-2004-laplacian-editing —— Sorkine 2004 — 用拉普拉斯坐标编辑网格,拽把手不丢细节
- draco —— Draco — Google 3D 网格压缩