先验知识:
【1】https://www.jianshu.com/p/6eff6d49e9f4
【2】https://blog.youkuaiyun.com/bob__yuan/article/details/81778875
摘要:
1)本文介绍了一种不规则的三角形网格形状近似技术。
2)该方法使用了少量的基向量的线性组合来近似网格的几何结构。基向量是关于网格连接和网格上锚点索引的函数。
3)我们的方法和基于几何遗忘(geometry-oblivious)方法【例如基于拉普拉斯算子的谱方法】有着根本的区别。在后者中,基向量只是连通性的函数。相反,我们的方法的基向量是几何感知的,因为他们既取决于连通性,又取决于给定网格中“几何上重要”的顶点的二进制标记(例如极值)。
4)我们证明,通过将基向量定义为某些最小二乘的解,重建问题简化为求解单个系数线性最小二乘问题。我们还证明了,使用最先进的稀疏矩阵分解算法可以快速解决这个问题。
5)我们展示了如何选择锚点来定义一个紧凑有效的基础,从中重建近似形状。此外,我们提出了一种渐进式的最小二乘系统的因子分解方法 我们提出一种基于最小二乘系统因式分解的增量更新方案;这种方法通过一种渐进(迭代)的方案:一个初始的近似值逐渐被一系列锚点取代。我们证明,增量更新(指的是重建过程)和求解分解系统的速度足够快,可以在线细化网格几何体。
Overview:
1)所提出的形状几何感知是k个基函数的线性组合,这些基函数给网格的每个定点赋予一个实值;
2)进一步,基函数是网格连通性和锚点的函数;
选择的每个基函数应该满足以下条件:
1)它在其中一个锚点处为1,其他为0;
2)它是所有满足这些要求中最平滑的,函数的平滑度是使用网格的连通性以离散的方式定义的,我们要求顶点的位置与网格中相邻顶点的平均值的偏差尽可能小。
这些定义产生了光滑的基函数,这些基函数很容易组合成在锚点处获得特定值的近似值。
另外,本文提出的具有更新能力的快速稀疏最小二乘求解器能允许我们有效的从线性组合的系数中恢复形状;
最近的一些论文表示,网格的连通性通常会编码一些关于网格所代表形状的几何结构的有用信息;
文章中的17,18文献说明了这些方法(略)
本文的主要贡献包括:
1)形状几何近似;
2)从紧凑(繁琐而复杂)的表示中恢复出近似形状(约简)
本算法基于的线性代数工具:快速解决最小二乘的能力,通过更新扩充拉普拉斯矩阵的稀疏因子分解来快速添加锚点的能力;
Geometry-Aware Base
注:这里有基本概念看不懂的,移步先验知识【1】补充。
大多数用于近似和编码网格几何结构的技术将几何结构表示为基函数的线性组合。在本节中,我们介绍了我们使用的具体基础函数,并解释了为什么这个基础是有效的。
网格函数(mesh function):实值向量(也可以说是实值函数),为每个vertex指定一个值;具体的可以考虑网格编码知识。
基函数(Basis function):形式很简单的一种网格函数。
基(Basis):一组基函数。一个basis是指一组在
R
n
R^n
Rn展成空间的基函数,n=网格顶点数目;
【举例】:顶点的坐标,例如x坐标,可以表达为一种网格函数(mesh function)。这个mesh function以【标准基的线性组合函数】的方式表达了【顶点坐标在
R
3
R^3
R3空间中的位置】。具体来说,这个函数在某个顶点处为1,其他为0;(可以理解为编码,比如【00000100000】表示某个顶点i的x坐标)
我们使用的基,像拉普拉斯基一样,可以通过求解一系列最小化问题来求解;
区别:拉普拉斯基可能不是natural(可理解为容易直观理解的),而我们的基是natural的(本文);
拉普拉斯基:
网格的组合拉普拉斯基是
n
×
n
n\times n
n×n对称半正定矩阵,
L
=
D
−
A
L=D-A
L=D−A,
其中,
A
A
A是邻接矩阵:
A
=
(
a
i
j
)
A=(a_{ij})
A=(aij) : 如果顶点i和j邻居,
a
i
j
=
1
a_{ij}=1
aij=1,否则
a
i
j
=
0
a_{ij}=0
aij=0
D
D
D是对角矩阵,其对角上第i个元素的值为顶点i的自由度数字;
给定一个拉普拉斯算子
L
L
L:
第一拉普拉斯谱基
u
1
u_1
u1:
m
i
n
∣
∣
L
u
1
∣
∣
s
.
t
.
∣
∣
u
1
∣
∣
=
1
min \;\; ||L\mathbf{u_1}|| \newline s.t. \;\;||\mathbf{u_1}|| = 1
min∣∣Lu1∣∣s.t.∣∣u1∣∣=1第二拉普拉斯谱基
u
2
u_2
u2:
m
i
n
∣
∣
L
u
2
∣
∣
s
.
t
.
∣
∣
u
2
∣
∣
=
1
a
n
d
u
1
⊥
u
2
min \;\; ||L\mathbf{u_2}|| \newline s.t. \;\;||\mathbf{u_2}|| = 1 \;\;\;and \;\;\;\mathbf{u_1} \bot \mathbf{u_2}
min∣∣Lu2∣∣s.t.∣∣u2∣∣=1andu1⊥u2一般的,拉普拉斯谱基
u
k
u_k
uk:
m
i
n
∣
∣
L
u
k
∣
∣
s
.
t
.
∣
∣
u
k
∣
∣
=
1
a
n
d
u
k
⊥
s
p
a
n
{
u
1
,
u
2
,
.
.
.
,
u
k
−
1
}
min \;\; ||L\mathbf{u_k}|| \newline s.t. \;\;||\mathbf{u_k}|| = 1 \;\;\;and \;\;\;\mathbf{u_k} \bot span\{ \mathbf{u_1,u_2,...,u_{k-1}} \}
min∣∣Luk∣∣s.t.∣∣uk∣∣=1anduk⊥span{u1,u2,...,uk−1}
其中函数
u
k
u_k
uk是按特征值排序的
L
L
L的特征向量,上述最小化问题有利于光滑基函数,因为上面的变换
x
\mathbf{x}
x到
L
x
L\mathbf{x}
Lx,将
x
i
x_i
xi与其邻居之间的平均值之间的差乘以邻居的数量分配给了每个顶点
v
i
v_i
vi;
因此,
u
1
u_1
u1是最
R
n
R^n
Rn中最光滑的矢量,u2是与u1正交的最光滑的网格函数,依次类推,第一个函数u1总是相同的,而其余形状取决于网格的拓扑结构。
Relxed Geometry-Aware Bases
我们的基础也解决了一系列最小化问题,但它们是以几何感知的方式选择的。
给定一组k个顶点索引
{
a
1
,
a
2
,
.
.
.
,
a
k
}
,
1
≤
a
i
≤
N
\{a_1,a_2,...,a_k\},1\leq a_i\leq N
{a1,a2,...,ak},1≤ai≤N
第i个基函数
v
i
v_i
vi是:
m
i
n
∣
∣
L
v
i
∣
∣
+
(
∑
j
≠
i
w
2
∣
(
v
i
)
a
j
−
0
∣
+
w
2
∣
(
v
i
)
a
j
−
1
∣
)
min \;\; ||L\mathbf{v_i}||+(\sum_{j\neq i}w^2|(v_i)_{a_j}-0|+w^2|(v_i)_{a_j}-1|)
min∣∣Lvi∣∣+(j=i∑w2∣(vi)aj−0∣+w2∣(vi)aj−1∣)对这个最小化问题的解释如下:
基函数使两项之和最小化:
A)第一项使
v
i
\mathbf{v_i}
vi中的非光滑性;
B)第二项是
v
i
\mathbf{v_i}
vi与我们给定的k个网格位置的偏差,这里的k个位置我们称之为锚。这些值是1在
a
i
a_i
ai处,0在
a
j
a_j
aj处(
v
i
\mathbf{v_i}
vi是一个基函数,
a
i
a_i
ai是顶点的编号,
(
v
i
)
a
j
(v_i)_{a_j}
(vi)aj是的
v
i
\mathbf{v_i}
vi在第
a
j
a_j
aj处的值)因此,
v
i
\mathbf{v_i}
vi试图保持1)在任何地方都是平滑的,2)在
a
i
a_i
ai处是大的,3)在其他地方为0,权重
w
w
w控制锚点的影响。我们的算法从不使用除了第一个k(锚的数量)之外的基函数。
///(下面的小部分可以忽略)///
原文在这里用一个自然段,简单解释了这种基于几何感知的基函数要比没有几何感知的基函数有更好的表达,因为能量会在anchor处集中,如下图:
具体的解决问题:
(一)给定锚点和锚点的系数,求近似的网格函数。
我们用k个锚点和一组对应几何感知函数(
V
=
(
(
v
1
,
v
2
,
.
.
.
,
v
k
)
V=(\mathbf{(v_1,v_2,...,v_k)}
V=((v1,v2,...,vk))的系数(
c
=
(
c
1
,
.
.
.
,
c
k
)
T
\mathbf{c}=(c_1,...,c_k)^T
c=(c1,...,ck)T)来近似一个mesh function,
x
\mathbf{x}
x:
等式服从最小二乘问题的最小二乘解。
上式的L仍然是拉普拉斯矩阵,x是mesh 顶点坐标,
x
a
i
x_{a_i}
xai仍然代表的是序列为第ai的锚点的坐标,
c
i
c_i
ci是给定的系数值,
w
i
w_i
wi锚点的权重。
这个方程的意义在于,我们可以从V中重构处近似曲面x,而不需要参考基函数V。
从上式方程中的几何感知项,约束锚点的方式,论文提了三种,上面图中给的是第一种:
1)与
c
i
c_i
ci偏差的二次方惩罚,一般
c
i
c_i
ci指的是锚点的坐标,所以这里注意,采用此项,锚点不是插值点,而是最小二乘点,会变动的;
2)框约束;
3)插值点约束;
(二)一个例子:插值点约束求解。
问题:
给定条件:
条件1)给定k个锚的顶点和序列,并让基中,序列号为第
a
k
a_k
ak的锚对应的基函数为1,而其余k-1个锚点对应序列号的基函数为0,如下文:
条件2)给定这k个锚点的序列和对应基函数
w
i
w_i
wi的系数
c
c
c(这里的c用的就是锚点的笛卡尔坐标),利用
x
a
i
=
c
i
x_{a_i}=c_i
xai=ci来消除锚点再最小二乘系统的作用。(意思就是不最小二乘求了,直接固定:拉普拉斯算子=0),然后在利用最小二乘那一套去求解未知的坐标
x
j
x_j
xj
图片中的上面的式子,是添加插值锚的最小二乘公式,主要还是看上面解释,打开论文看着一段基本就知道啥意思了。
最后提出缺点是,计算速度不如上面的平方惩罚约束;
THE PROGRESSIVE SCHEME
渐进松弛的方案是本文的另一大亮点之一,这里对新增加的anchor点有比较好的重建能力,(这一点可以在配准的时候学习)
这个允许:从服务器接收到或者从存储器读取到新的锚点时,能够快速更新近似曲面结果;
解决方法:求解新的:
L
~
x
=
(
0
1
×
n
,
w
c
1
,
.
.
.
,
w
c
k
,
w
c
k
+
1
,
.
.
.
w
c
k
+
m
)
T
\widetilde{L}x=(\mathbf{0}_{1\times n},wc_1,...,wc_k,wc_{k+1},...wc_{k+m})^T
L
x=(01×n,wc1,...,wck,wck+1,...wck+m)T
因为要求逆“
L
~
T
L
~
\widetilde{L}^T\widetilde{L}
L
TL
”,而
L
~
\widetilde{L}
L
是稀疏的,可以进行Choleky分解求解,使得
L
~
T
L
~
=
R
T
R
\widetilde{L}^T\widetilde{L}=R^TR
L
TL
=RTR,R是一个稀疏上三角阵;
对于初始的k个锚点,Choleky分解一次得到R;
当来了新的1个锚点时,原则上,我们应该进行这样的操作:
L
~
\widetilde{L}
L
要添加一行,而
L
~
T
L
~
\widetilde{L}^T\widetilde{L}
L
TL
要更新对角元素,从而我们要重新进行一次Choleky分解;
但是,作者找到了一个更快的方式,直接去更新R,只需要不断地修改R的值,就能够完成;
操作方式是从Davis和Hager提出的一种方式的特例,但没用用到其中提出的许多数学工具,具体的求解方法,见原文,这里不再详细解答,解决的问题是对于一个有特殊结构的对称半正定矩阵
L
~
\widetilde{L}
L
,在增加新的一行时,其对应
L
~
T
L
~
=
R
T
R
\widetilde{L}^T\widetilde{L}=R^TR
L
TL
=RTR中R的变化。
论文链接:
【原文】https://ieeexplore.ieee.org/abstract/document/1388228
【拉普拉斯谱方法】https://dl.acm.org/doi/10.1145/344779.344924
【Davis和Hager提出的Choleky分解】https://epubs.siam.org/doi/10.1137/S0895479897321076