(1)核心思想 泊松重建的核心思想为:将物体区分为几何体内部和几何体外部,物体点云数据的法向量可以标示内部和外部,通过隐式地拟合该物体的指示函数,得到该物体表面的估计,即通过将物体表面的离散的点的信息转化到连续的表面函数上,从而构建出表面。 设某一物体为
M
M
M,该物体的表面为
δ
M
\delta M
δM,其指数函数
χ
M
\chi_M
χM为:
χ
M
(
x
)
=
{
0
,
x
∉
M
1
,
∈
M
(1)
\chi_M(x)= \begin{cases} 0,\quad x\notin M\\ 1, \in M \end{cases} \tag{1}
χM(x)={0,x∈/M1,∈M(1) 其中点云法向量与
χ
M
\chi_M
χM的关系如图2所示:
图2 泊松重建的基本函数关系
指数函数
χ
M
\chi_M
χM为分段函数,表示
q
0
q_0
q0在表面内其值为1,在表面外的点其值为0。显然,若得到每一个点
q
0
q_0
q0的
χ
M
(
q
0
)
\chi_M(q_0)
χM(q0),即可知道整个物体的表面。 如果直接插值得到
χ
M
(
q
0
)
\chi_M(q_0)
χM(q0)显然是不可能的,因为
χ
M
\chi_M
χM不具有连续性,直接插值得到0到1之间的没有意义,因此不能使用该算法。可以先用平滑滤波函数平滑指数函数。 (2)法向量到梯度空间 首先,先用平滑函数
F
ˉ
\bar{F}
Fˉ来平滑
χ
M
\chi_M
χM,对于任意点
p
∈
δ
M
p\in\delta M
p∈δM,定义
N
⃗
δ
M
(
p
)
\vec{N}_{\delta M}(p)
NδM(p)为指向内侧的表面法向量,规定
F
(
q
)
F(q)
F(q)为平滑滤波器,
F
(
q
−
p
)
F(q-p)
F(q−p)表示
F
F
F沿
p
p
p方向的位移,因为指示函数
χ
M
\chi_M
χM不好求导,可以利用
χ
M
∗
F
ˉ
\chi_M*\bar{F}
χM∗Fˉ两个函数的卷积的倒数近似求解
χ
M
\chi_M
χM,即:
Δ
(
χ
M
∗
F
ˉ
)
(
q
0
)
=
Δ
∣
q
=
q
0
∫
M
F
ˉ
(
q
−
p
)
d
p
=
∫
δ
M
F
ˉ
(
q
0
−
p
)
N
⃗
δ
M
(
p
)
d
p
(2)
\Delta(\chi_M*\bar{F})(q_0)=\Delta|_{q=q_0}\int_M\bar{F}(q-p)dp=\int_{\delta M}\bar{F}(q_0-p)\vec{N}_{\delta M}(p)dp\tag{2}
Δ(χM∗Fˉ)(q0)=Δ∣q=q0∫MFˉ(q−p)dp=∫δMFˉ(q0−p)NδM(p)dp(2) 其中,*为卷积,此处为平滑滤波。这样就完成了从点云数据法向量到梯度空间的求解。 (3)梯度空间到向量场 由于物体表面点的离散性,
N
⃗
\vec{N}
N对于表面每个点
q
q
q未必都是已知的,即
N
⃗
δ
M
(
p
)
\vec{N}_{\delta M}(p)
NδM(p)的分布是未知的,可以利用分段近似解决这个问题,通过观察
P
=
(
p
i
,
n
i
)
P=(p_i,n_i)
P=(pi,ni)来近似。 初始离散样本点集记为
S
S
S,
s
s
s为
S
S
S中的一个点
(
s
∈
S
)
(s\in S)
(s∈S),
s
s
s包含位置信息
(
s
.
p
)
(s.p)
(s.p)和法向量信息
(
s
.
N
⃗
)
(s.\vec{N})
(s.N)。将
δ
M
\delta M
δM按照空间划分成不同表面区域
δ
s
\delta s
δs,并且
s
∈
S
s\in S
s∈S,
δ
s
⊂
δ
M
\delta s\subset\delta M
δs⊂δM。式(2)可以转化为积分求和,其中每个小的积分可以近似为常函数,可以用
s
.
p
s.p
s.p对应的函数和
δ
s
\delta s
δs的面积的积分代替,如下式:
Δ
(
χ
M
∗
F
ˉ
)
(
q
0
)
=
∑
s
∈
S
∫
δ
s
F
ˉ
N
⃗
δ
M
(
p
)
d
p
≈
∑
s
∈
S
∣
δ
s
∣
F
ˉ
(
q
−
s
.
p
)
s
.
N
⃗
=
V
⃗
(
q
)
(3)
\Delta(\chi_M*\bar{F})(q_0)=\sum_{s\in S}\int_{\delta s}\bar{F}\vec{N}_{\delta M}(p)dp\approx \sum_{s\in S}|\delta s|\bar{F}(q-s.p)s.\vec{N}=\vec{V}(q) \tag{3}
Δ(χM∗Fˉ)(q0)=s∈S∑∫δsFˉNδM(p)dp≈s∈S∑∣δs∣Fˉ(q−s.p)s.N=V(q)(3) 假设样本点是均匀分布的,那么
∣
δ
s
∣
|\delta s|
∣δs∣即为常数可以省略,通过离散近似,由式(3) 即可得到向量空间
V
⃗
\vec{V}
V。 (4)转化为泊松方程 向量空间
V
⃗
\vec{V}
V和指数函数
χ
M
\chi_M
χM满足下式,即为最终需要求解的问题:
Δ
χ
⃗
=
V
⃗
(4)
\Delta \vec{\chi}=\vec{V}\tag{4}
Δχ=V(4) 其中如果直接求解
χ
⃗
\vec{\chi}
χ需要求解积分,向量空间
V
⃗
\vec{V}
V不一定是无旋场,通常意义上不能积分,将式(4)两边进行求导运算,得到式(5):
Δ
χ
⃗
=
Δ
⋅
V
⃗
=
Δ
⋅
Δ
χ
(5)
\Delta \vec{\chi}=\Delta\cdot\vec{V}=\Delta\cdot\Delta {\chi}\tag{5}
Δχ=Δ⋅V=Δ⋅Δχ(5) 其中,
Δ
\Delta
Δ为拉普拉斯算子,
Δ
⋅
\Delta\cdot
Δ⋅为散度算子,上式为泊松方程,
χ
⃗
\vec{\chi}
χ是要求解的函数,上式意思是梯度的散度等于向量场的散度。方程的解可以用拉普拉斯方程基本解与函数卷积求出,即可找到指示函数。
构建八叉树
g
g
g,存储点云数据,八叉树节点深度记为D,每一个节点
o
∈
g
o∈g
o∈g;
设置函数空间
F
F
F为:
F
(
x
,
y
,
z
)
=
(
B
(
x
)
B
(
y
)
B
(
z
)
)
∗
n
F(x, y,z)=(B(x)B(y)B(z))^{*n}
F(x,y,z)=(B(x)B(y)B(z))∗n,其中
∗
n
*n
∗n表示
n
n
n次卷积,所有的节点
o
o
o均有对应的空间函数
F
F
F。