基于滤波的算法
拉普拉斯网格平滑算法
可 以 认 为 定 义 在 顶 点 上 的 信 息 是 一 个 信 号 流 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) 扩散方程为∂t∂f(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)是拉普拉斯算子 每个顶有独立的扩散方程∂t∂f(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是拉普拉斯矩阵 总体表达式∂t∂f(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)+h⋅∂t∂f(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是法向 当拉普拉斯里的wij取cot拉普拉斯算子时,Δx=−2Hn,H是平均曲率,n是法向
当拉普拉斯算子为cot时,点会沿法向移动。
当拉普拉斯算子为uniform时,点会向边上的点靠近。
fairing
通过固定2端,定义中心高阶拉普拉斯算子为0,然后解出过渡区域。
阶次越高越光滑。
高斯函数滤波算法
高 斯 函 数 W ( x ) = e − x 2 2 σ 2 , σ 是 参 数 需 要 用 户 给 定 高斯函数W(x)=e^{-\frac {x^2}{2\sigma^2}}, \sigma 是参数需要用户给定 高斯函数W(x)=e−2σ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(∣∣p−q∣∣)⋅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(∣∣p−q∣∣)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=∣c−c∗∣2+∣Δc∣0
c
是
输
出
顶
点
c
∗
是
输
入
顶
点
c是输出顶点\\c^*是输入顶点
c是输出顶点c∗是输入顶点
Δ
c
是
梯
度
∣
Δ
c
∣
0
是
梯
度
的
0
模
\Delta c 是梯度\\ |\Delta c |_0 是梯度的0模
Δc是梯度∣Δc∣0是梯度的0模
去优化这个方程,希望大部分区域的梯度为0。
以述方程不好优化,引入变量。
E = ∣ c − c ∗ ∣ 2 + β ∣ Δ c − δ ∣ 2 + λ ∣ δ ∣ 0 E = |c-c^*|^2+\beta |\Delta c-\delta |^2+\lambda |\delta|_0 E=∣c−c∗∣2+β∣Δ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 当给定δ时,去优化∣c−c∗∣2+β∣Δ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分类,让法向的计算由大数据来筛选。
训练集获取:先找一个好的三角网格,然后对网格加噪,然后对每个面进行高斯滤波操作,以这个作为输入,以原来的法向作为输出进行训练。