跳转到内容

Taubin 1995 — 把网格平滑当成低通滤波

待复核

Taubin 1995 把”让 3D 网格变光滑”重新理解成一道信号处理题:顶点位置是信号,皱褶毛刺是高频噪声,做一遍低通滤波就能去掉。

日常类比:照片去噪你会模糊一下;音频去嘶嘶声你会砍高频。网格也一样——先定义”频率”是什么,再套滤波器。

它给出的”频率”建立在图拉普拉斯算子上:每个顶点相对邻居平均的偏离,就是离散版”二阶导数”。算子的特征向量就像网格上的傅里叶基。

不理解它,下面这些事都没法解释:

  • 为什么早期扫描软件一平滑,人头模型就像气球放气一样整体瘪掉
  • 为什么后来能谈”网格上的低通 / 高通”——频率从哪来的
  • 为什么 MeshLab / libigl 里的 Taubin Smooth 要成对调 λ 和 μ,而不是只调一个步长
  • 为什么谱网格处理、乃至图神经网络的频域卷积,都把图拉普拉斯当默认语言

它是谱网格处理的奠基文献之一:先用图拉普拉斯定义频率,再用 λ|μ 双步骤做到平滑但不收缩。之后三十年的网格去噪与谱方法,大多站在这套框架上往前走。

N 个顶点的 x 坐标是长度 N 的向量(y、z 同理)。Taubin 用的离散拉普拉斯是:

(Δx)_i = sum_{j in N(i)} w_ij · (x_j − x_i)

类比:顶点相对邻居平均的”拉力”。完全平 ≈ 0,尖刺很大。常用正定形式写 K = −Δ(即度矩阵减邻接权 D−W),特征值 ≥ 0,当作频率轴上的刻度。

对 K 做特征分解:0 ≤ k_1 ≤ … ≤ k_N。k 小 → 越平滑(低频);k 大 → 越震荡(高频)。任意网格信号都能写成这些特征向量的线性组合——和普通信号写成正弦波叠加完全同构。

设计滤波器 = 挑 f(k):≈1 保留该频率,≈0 砍掉。低通 = 小 k 接近 1、大 k 接近 0。不必真的做完整特征分解——后面的 λ|μ 迭代等价于在频域乘这个 f。

朴素一步 x ← x + λ·Δx(λ>0)对应 f(k)=1−λk,除直流外全被压低 → 收缩。Taubin 的招:缩一步再放一步——

  • 第一步:λ>0,向邻居靠,压毛刺
  • 第二步:μ<0 且 |μ|>λ,反向推一点,把低频形状捞回来

合起来 f(k)=(1−λk)(1−μk):k≈0 处 ≈1(不缩),大 k 处 ≈0(去毛刺),中间零点 k_PB 控制截止频率。

这就解决了”平滑但不缩”的核心矛盾。

圆球网格上,邻居平均落在球内 → 顶点向球心移。重复几次球缩成点。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:反向推一点,保体积

逐步解释

  1. 输入:带扫描噪声的三角网格(先保证流形)
  2. 每轮先 λ 后 μ;看表面是否变顺、轮廓是否未瘪
  3. 迭代约 5–20 次停手。经验:λ≈0.5、μ≈−0.53;|μ|−λ 越大保形越好、去噪越弱

案例 3:扫描头模去噪(跟做思路)

Section titled “案例 3:扫描头模去噪(跟做思路)”

假设平均边长约 1mm,噪声振幅约 0.2–0.5mm(亚边长级高频抖动):

  1. 先修非流形 / 破洞,再跑 Taubin(λ=0.5,μ=−0.53,约 10 次)
  2. 检查鼻尖、耳廓是否还在,脸是否未整体缩小
  3. 若尖锐边被糊掉,不要靠加迭代硬磨——换 Fleishman 2003 bilateral 或 L0 保边方法
  1. 权重选错特征会扭:等权/Fujiwara 权随三角化漂;cotangent 权(Pinkall-Polthier 1993)才对应曲面拉普拉斯-贝尔特拉米。
  2. λ、μ 靠肉眼:教科书常给 λ=0.33、μ=−0.34,但模型不同最佳值不同,没有万能自动档。
  3. “频率”依赖拓扑:同几何不同三角化 → 拉普拉斯不同 → 高频含义不同。
  4. 不能保边:低通天生糊尖角;要保边得换 bilateral / L0 那一类后续工作。

适用

  • 3D 扫描后处理:噪声约 0.1–0.5 倍平均边长、需要快速稳定去毛刺
  • 只要 5–20 次迭代、两三个参数的平滑
  • 入门谱网格处理——先搞懂拉普拉斯特征向量这套语言

不适用

  • 工业 CAD 要留尖锐棱边(用 bilateral / anisotropic)
  • 非流形或破洞网格(先修拓扑)
  • 大变形重建(那是 mesh editing,不是 smoothing)
  • 1980s 末:3D 扫描刚普及,扫出来的网格全是高频抖动,业界用各种 ad hoc 平均
  • 1993:Pinkall & Polthier 提出 cotangent 公式,把离散拉普拉斯和连续曲面对齐
  • 1995:Taubin 在 SIGGRAPH 第一次把整套信号处理语言搬到任意拓扑网格上
  • 2000s:Sorkine、Lévy 等人把拉普拉斯坐标用于 mesh editing;谱网格处理变成独立子领域
  • 2010s 至今:图神经网络的”图卷积”频域定义,同样扎根于图拉普拉斯,与 Taubin 一脉相承
  1. 跨学科类比是创新的高产田——把信号处理搬到几何上,整个领域被重塑
  2. 解决副作用的招式:用反向操作抵消(λ 缩一下,μ 放一点)
  3. 离散算子要对应连续算子,否则一改拓扑结果就漂——这是 cotangent 权重对、等权重常错的根本原因
  4. 低通滤波的局限:它对所有信号一视同仁,要”区别对待”必须引入非线性(bilateral 那条线)