网格平滑基础算法总结

基于滤波的算法

拉普拉斯网格平滑算法

可 以 认 为 定 义 在 顶 点 上 的 信 息 是 一 个 信 号 流 f ( x , t ) , 这 个 信 号 会 随 时 间 扩 散 可以认为定义在顶点上的信息是一个信号流f(x,t), \\这个信号会随时间扩散 f(x,t),

扩 散 方 程 为 ∂ f ( x , t ) ∂ t = λ Δ f ( x , t ) 扩散方程为\frac {∂f(x,t)}{∂t}=\lambda \Delta f(x,t) tf(x,t)=λΔf(x,t)

应 用 到 网 格 上 定 义 f ( t ) = ( f ( v 1 , t ) , . . . , f ( v n , t ) ) T 应用到网格上定义f(t)=(f(v_1,t),...,f(v_n,t))^T f(t)=(f(v1,t),...,f(vn,t))T

每 个 顶 有 独 立 的 扩 散 方 程 ∂ f ( v i , t ) ∂ t = λ Δ f ( x i , t ) , Δ f ( x i , t ) 是 拉 普 拉 斯 算 子 每个顶有独立的扩散方程 \frac {∂f(v_i,t)}{\partial t}=\lambda \Delta f(x_i,t),\\ \Delta f(x_i,t)是拉普拉斯算子 tf(vi,t)=λΔf(xi,t),Δf(xi,t)

总 体 表 达 式 ∂ f ( t ) ∂ t = λ L f ( t ) , L 是 拉 普 拉 斯 矩 阵 总体表达式\frac {\partial f(t)}{\partial t}=\lambda Lf(t), L是拉普拉斯矩阵 tf(t)=λLf(t),L

利用上式可以使用迭代的方式去平滑网格

f ( t + h ) = f ( t ) + h ⋅ ∂ f ( t ) ∂ t = f ( t ) + h λ ⋅ L f ( t ) f(t+h) = f(t) +h\cdot \frac{\partial f(t)}{\partial t} = f(t)+h\lambda \cdot Lf(t) f(t+h)=f(t)+htf(t)=f(t)+hλLf(t)

x i = x i + h λ ⋅ Δ x i x_i = x_i+h\lambda \cdot \Delta x_i xi=xi+hλΔxi

当 拉 普 拉 斯 里 的 w i j 取 c o t 拉 普 拉 斯 算 子 时 , Δ x = − 2 H n , H 是 平 均 曲 率 , n 是 法 向 当拉普拉斯里的w_{ij}取cot拉普拉斯算子时,\Delta x=-2Hn, \\ H是平均曲率,n是法向 wijcotΔx=2Hn,Hn

当拉普拉斯算子为cot时,点会沿法向移动。
当拉普拉斯算子为uniform时,点会向边上的点靠近。

fairing

通过固定2端,定义中心高阶拉普拉斯算子为0,然后解出过渡区域。
阶次越高越光滑。

高斯函数滤波算法

高 斯 函 数 W ( x ) = e − x 2 2 σ 2 , σ 是 参 数 需 要 用 户 给 定 高斯函数W(x)=e^{-\frac {x^2}{2\sigma^2}}, \sigma 是参数需要用户给定 W(x)=e2σ2x2,σ

高斯滤波

I ( p ) = 1 K p ∑ q ∈ Ω ( p ) W s ( ∣ ∣ p − q ∣ ∣ ) ⋅ I ( q ) I(p) = \frac{1}{K_p} \displaystyle \sum_{q\in Ω(p)} W_s(||p-q||)\cdot I(q) I(p)=Kp1qΩ(p)Ws(pq)I(q)

双边滤波
I ( p ) = 1 K p ∑ q ∈ Ω ( p ) W s ( ∣ ∣ p − q ∣ ∣ ) W r ( ∣ ∣ I ( p ) − I ( q ) ) ∣ ∣ ) ⋅ I ( q ) I(p) = \frac{1}{K_p} \displaystyle \sum_{q\in Ω(p)} W_s(||p-q||)W_r(||I(p)-I(q))||)\cdot I(q) I(p)=Kp1qΩ(p)Ws(pq)Wr(I(p)I(q)))I(q)

p可以是顶点坐标,法向等,具体效果不一样。
效果比较好的是先确定法向,然后根据法向去恢复顶点。

I§ 是信号,可以是法向,拉普拉斯算子,切平面与周围点高度差。

基于三角面法向的双边滤波网格平滑算法实现

基于优化的算法

假设模型中存在一些平的区域(flat region)。
最终希望把平的区域最大化。

L0 算法

一个区域平,说明梯度是0。

E = ∣ c − c ∗ ∣ 2 + ∣ Δ c ∣ 0 E = |c-c^*|^2+|\Delta c |_0 E=cc2+Δc0

c 是 输 出 顶 点 c ∗ 是 输 入 顶 点 c是输出顶点\\c^*是输入顶点 cc
Δ c 是 梯 度 ∣ Δ c ∣ 0 是 梯 度 的 0 模 \Delta c 是梯度\\ |\Delta c |_0 是梯度的0模 ΔcΔc00

去优化这个方程,希望大部分区域的梯度为0。
以述方程不好优化,引入变量。

E = ∣ c − c ∗ ∣ 2 + β ∣ Δ c − δ ∣ 2 + λ ∣ δ ∣ 0 E = |c-c^*|^2+\beta |\Delta c-\delta |^2+\lambda |\delta|_0 E=cc2+βΔcδ2+λδ0

优 化 过 程 中 β 要 不 断 增 大 , 当 β 比 较 大 时 , 就 像 是 优 化 δ 优化过程中\beta要不断增大,当\beta 比较大时,就像是优化\delta ββδ

可以采用交替迭代法优化上述能量。

当 给 定 c 时 , 去 优 化 β ∣ Δ c − δ ∣ 2 + λ ∣ δ ∣ 0 当给定c时,去优化\beta |\Delta c-\delta |^2+\lambda |\delta|_0 cβΔcδ2+λδ0

当 给 定 δ 时 , 去 优 化 ∣ c − c ∗ ∣ 2 + β ∣ Δ c − δ ∣ 2 当给定\delta时,去优化|c-c^*|^2+\beta |\Delta c-\delta |^2 δcc2+βΔcδ2

第二个是二值优化问题,可以使用最小二乘解决。

第一个是有解析解。

δ i = { 0 , i f β ( Δ c i ) 2 ≤ λ Δ c i , o t h e r w i s e \delta_i = \left\{\begin{array}{l}0,if \beta(\Delta c_i)^2\leq\lambda\\\Delta c_i, otherwise\end{array}\right. δi={0,ifβ(Δci)2λΔci,otherwise

网格应用

可以让c当成顶点坐标,也可以当法向。
使用cot拉普拉斯算子,可以满足平面时值为0。

使用边的拉普拉斯算子。

基于面积的拉普拉斯算子。

基于法向的优化

基于数据驱动的算法

在滤波算法中有很多参数要确定。
可以设定一个函数F帮助我们先出最优的法向。
具体输入就是不同参数产生出来的高斯滤波结果。
可以使用多组参数进行训练,进行k-means分类,让法向的计算由大数据来筛选。

训练集获取:先找一个好的三角网格,然后对网格加噪,然后对每个面进行高斯滤波操作,以这个作为输入,以原来的法向作为输出进行训练。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值