-
泊松表面重建算法的思路是将扫描得来的模型点云样本集合S与模型M标量指示函数χM之间建立一个内在联系,使表面的重建转化为一个良性的稀疏的动态泊松方程的求解问题, 然后通过提取等值面获得重建表面模型∂M。具体做法是将标量指示函数的计算转化为梯度的反演,也就是找到标量指示函数χM, 并使其梯度▽χM无限逼近由样本定义的向量场V,归结为目标函数, 即$\min\limits_{\chi_M}$||χM-V||。若再引入散度算子,此问题就转化为标准的泊松系统求解问题:即计算标量指示函数χM,使其梯度的散度(本文中为拉普拉斯算子)等于向量场V的散度,即Δ≡div▽χM≡divV。求解这个方程后,采用移动立方体算法(marching cubes, MC)提取等值面。其中定义向量场V也就是估计样本点云法向量是重要的一步。
-
估计3维点云中某点的法向量可以归纳为两个步骤:一是确定某点的特定邻域;二是将该邻域内所有点拟合出最优平面,得到所要估计的法向量。本文中分别在点云存储与搜索阶段进行优化,主要步骤如图 1所示。
扫描得来的散乱点云数据分布混乱,消耗内存空间大,对后续处理带来很大困难,因此建立一种简明的点云拓扑关系、高效的存储与搜索方法至关重要。八叉树和二叉树是最常用适用于3维空间点云数据划分存储的方式,其中八叉树算法实现简单、效率高,二叉树在数据邻域搜索比较有优势,四叉树等其它树形结构适用于2维空间以及其它形式数据的处理。鉴于3维点云数据的空间特性与数据量,本文中提出使用基于八叉树和二叉树混合树进行3维空间点云数据的分割与搜索,如图 2所示,旨在减小算法的时间复杂度与空间复杂度。
具体做法见下。首先求出点集S所有点云数据的几何中心:
$ \boldsymbol{c}=\frac{1}{n} \sum\limits_{i=1}^n \boldsymbol{s}_i $
(1) 式中,si表示点集S中第i个点构成的向量,然后求出所有点与中心点c的距离以及所有n个距离的高斯分布,分布在[μ-3σ, μ+3σ]区间内的点集记为S1,[μ-3σ, μ+3σ]区间外的点集记为S2,μ和σ分别为高斯的期望值与标准差。对点集S1和S2分别建立线性八叉树和二叉树进行点云的存储与索引。
为了有效过滤点云集合中的噪声点并平衡滤波与细节保持之间的矛盾,提出以下点云能量模型E1:
$ \begin{gathered} E_1=\sum\limits_{s \in S}\left[D\left(l_{S_{1, i}}\right)+\right. \\ \left.\sum\limits_{i=1}^N W\left(l_{S_{1, i}}, l_{S_{2, j}}\right)+D\left(l_{S_{2, j}}\right)\right] \end{gathered} $
(2) 其中:
$ \left\{\begin{array}{l} D\left(l_{S_{1, i}}\right)=\left\{\begin{array}{l} \alpha_{S_1}, \left(s \in S_1\right) \\ 0, (\text { otherwise }) \end{array}\right. \\ D\left(l_{S_{2, j}}\right)=\left\{\begin{array}{l} \alpha_{S_2}\left[1-\mathrm{e}^{-r^2 /\left(2 \sigma_s^2\right)}\right], \left(s \in S_2\right) \\ 0, (\text { otherwise }) \end{array}\right. \\ W\left(l_{S_{1, i}}, l_{S_{2, j}}\right)=\left\{\begin{array}{l} \alpha_s\left[1-\mathrm{e}^{-r^2 /\left(2 \sigma_s^2\right)}\right], \left(s \in S_1 \cap S_2\right) \\ 0, (\text { otherwise }) \end{array}\right. \end{array}\right. $
(3) 式中,s是点集S中任意一点,lS1, i表示点集S1中第i点的标签,D(lS1, i)则表示其权重,lS2, j表示点集S2中第j点的标签,D(lS2, j)则表示其权重,W(lS1, i, lS2, j)表示点集S1和S2边缘重合点的能量对, αS1表示点集S1的权重,αS2表示点集S2的权重,αs取αS1或αS2均可,实际计算过程中取为αS1, r表示点到点集中心的距离,σs是松弛系数,N表示点集S1和S2交集中点云个数,权重因子1-exp的作用是削弱边缘点云的能量,起到过滤噪点的作用。
当点云非常密集时,上述能量模型会在两组点云边界处出现二义性,导致重建曲面过程的错误连接,为此引入点云的似然能量E2:
$ E_2=\sum\limits_{i=1}^q D\left(l_{S_{1, i}}\right) $
(4) 其中,
$ D\left(l_{S_{1, i}}\right)=\left\{\begin{array}{l} U_{\text {out }}\left(S_1\right), \left(s \in S_1\right) \\ U_{\text {in }}\left(S_1\right), (\text { otherwise }) \end{array}\right. $
(5) 式中,E2是衡量边缘点云标签分配是否错误的惩戒能量函数,对于S1∩S2内每一个点云,它都具有二义性,用于描述是否在点集内部, 遍历点集S1中的q个点, 根据点云实际分布选择具体的惩戒能量函数Uout(S1)和Uin(S1)。为了评估标签分配的可能性,引入空间支持函数f(S3)度量点集所在空间的松弛性:
$ f\left(S_3\right)=\sum\limits_{s \in S_3} \alpha_{S_3} $
(6) 其中,
$ S_3=\left\{s \mid S_1 \cap S_2 \neq \varnothing\right\} $
(7) 为了使f(S3)更好地描述似然能量函数E2,设:
$ \left\{\begin{array}{l} U_{\text {out }}\left(S_1\right)=\lambda f\left(S_3\right) \\ U_{\text {in }}\left(S_1\right)=\lambda\left[\beta-f\left(S_3\right)\right] \end{array}\right. $
(8) 式中, λ是平衡因子,β是大于所有点f(S3)的常数,令:
$ E=E_1+\lambda_2 E_2+\lambda_3 E_3 $
(9) 式中, λ2和λ3是缩放常数,E是点云的总能量,E3为提高重建表面质量引入的面片能量项,且:
$ E_3=\sum\limits_f w_f $
(10) 其中,
$ w_f=1-\min \{\cos \varphi, \cos \phi\} $
(11) 式中,φ和ϕ是边界某点与两个点集中心点预估平面的夹角。
最后通过Maxflow-Mincut实现总能量的最小化,完成点云的分组存储与滤波。
-
法向量估计可以分为两个步骤:一是以某点为中心做适当邻域;二是在此邻域内将所有点拟合一个最佳平面求出法向量。为提高算法输入端点云的法向量精度,本文中算法对法向量估计作如下改进,如图 3所示。
求某点s(sx, sy, sz)对应的法向量为ns(nsx, nsy, nsz)。(a)建立以s点为圆心、R为半径的球面:(x-sx)3+(y-sy)3+(z-sz)3=R3;(b)设置初始点云数量统计区间[23i, 23(i+1)];(c)判断以s点为中心的23i个最小体素单元是否完全落入球面内;(d)若条件(c)判断为假,将当前值i-1,直至条件(c)判断为真;(e)若条件(c)判断为真,统计球面内点云数量并计算它占样本集内点云总数的比例ri,显然ri取值在区间[0, 1]之间,当ri取值在[μ-3σ, μ+3σ]左侧外,认为点云块稀疏,进行针对性稠密化。
对s点所在邻域使用改进移动最小二乘法进行点云的稠密化,将上文所得ri作为移动最小二乘法中的系数向量ri,球面以内区域作为s点的影响区域,拟合函数可表示为:
$ f(x, y)=\sum\limits_{i=1}^m r_i p_i(x, y)=\boldsymbol{p}^{\mathrm{T}} \boldsymbol{r}_i $
(12) 选用立方基:
$ \begin{gathered} \boldsymbol{p}^{\mathrm{T}}=\left(1, x, y, x^2, x y, y^2, x^3, x^2 y, x y^2, y^3\right), \\ (m=10) \end{gathered} $
(13) 则拟合函数为:
$ \begin{gathered} f(x, y)=r_1+r_2 x+r_3 y+r_4 x^2+r_5 x y+ \\ r_6 y^2+r_7 x^3+r_8 x^2 y+r_9 x y^2+r_{10} y^3 \end{gathered} $
(14) 即:
$ f(x, y)=\sum\limits_{i=1}^{10} r_i p_i(x, y) $
(15) 拟合完成后就可以在s点附近拟合三次曲线对点云进行针对性的插值稠密化。
重新记录稠密化后的邻域点云数量k值。采用奇异值分解(singular value decomposition,SVD)求法向量,首先求该点δ邻域内所有k个点(s1, s2, s3, ….sk-1, sk)到s点的向量fi=si-s(i=1, 2, …, k)。
设置优化函数:
$ \min \sum\limits_{i=1}^k\left(\boldsymbol{f}_i^{\mathrm{T}} \cdot \boldsymbol{n}_s\right)^2 $
(16) 进一步推导有:
$ \begin{array}{*{20}{c}} \min \sum\limits_{i=1}^k\left(\boldsymbol{f}_i^{\mathrm{T}} \boldsymbol{n}_s\right)^2= \\ \min \sum\limits_{i=1}^k\left(\boldsymbol{n}_s{ }^{\mathrm{T}} \boldsymbol{f}_i \boldsymbol{f}_i^{\mathrm{T}} \boldsymbol{n}_s\right)= \\ \min {\boldsymbol{n}_s}^{\mathrm{T}} \sum\limits_{i=1}^k\left(\boldsymbol{f}_i \boldsymbol{f}_i^{\mathrm{T}}\right) \boldsymbol{n}_s= \\ \min {\boldsymbol{n}_s}^{\mathrm{T}} \boldsymbol{F} \boldsymbol{F}^{\mathrm{T}} \boldsymbol{n}_s \end{array} $
(17) 式中, F由向量组fi构成,上述问题就转化为目标函数的最优化问题,即:
$ \min g\left(\boldsymbol{n}_s\right)=\min \boldsymbol{n}_s{ }^{\mathrm{T}} \boldsymbol{Q} \boldsymbol{n}_s $
(18) 式中, Q=FFT, Q是关于点s 3个坐标分量的协方差矩阵。对矩阵F进行SVD分解即可得到s点的法向量,最后通过最小生成树法对所有法向量的方向进行矫正,获得朝向一致的法向量[17-18]。
-
为了评价本文中所提重建算法的效果以及与其它不同算法对来自公共数据集进行重建的性能对比,选取了Artec 3D公司的曲轴箱、齿轮、螺丝、涡轮进行算法的比对分析。
-
首先, 在建树深度分别为6~10的情况下采用本文中的算法对曲轴箱模型进行表面重建,从图 4可以看出,随着树深的增加,模型重建表面精度不断提高,并且在不同树深情况下都表现出较好的效果。可见树深是影响重建效果的重要参数。树深增加,索引到的点云数量增加,重建结果的细节也就更好。
图 4 曲轴箱在本文中算法不同树深下的重建效果
Figure 4. Reconstruction effect of crankcase under different tree depths of this algorithm
在对算法效果的横向比较评价中,选取了PSR算法、SPSR算法、与PSR-EC算法与本文中所提算法进行比较,将每种算法的可变参数调制与所用扫描模型最佳匹配的情况下,各算法重建效果与局部细节放大图如图 5所示。PSR算法由于没有引入与模型形态相关的信息,比如扫描过程中的视线信息,导致重建结果在细节方面表现较差。SPSR算法虽然引入了点作为插值约束使重建细节有所改善,但其算法效率仍然不高。SPR-EC算法虽然算法效率较高,但由于表面提取过程中以远离真实解为代价,使得重建表面远离真实模型表面。本文中的算法由于搜索方法的改进使得算法效率明显提高,并且根据前文改进的点云稠密化插值方法针对性地对部分稀疏点云稠密化,结果如表 1所示。针对不同模型分别引入了0.86%~1.95%的重建顶点信息,在不影响算法效率的前提下,使法向量估计阶段更加精确,展现出了最佳的重建完整性,更加贴近扫描模型真实表面细节。
图 5 模型在不同算法下最优重建效果与细节对比
Figure 5. Comparison of the optimal reconstruction effect and details of the model under different algorithms
表 1 各算法重建实际所用顶点数
Table 1. Actual numbers of vertices used by each algorithm
algorithm crankcase gear screw turbine PSR 1999277 250000 229992 150002 SPSR 1999277 250000 229992 150002 PSR-EC 1999277 250000 229992 150002 ours 2016503 253015 232617 152942 -
如图 6所示, 在算法运行时间对比实验中,随着树深的增加,各算法运行时间呈指数增加。本文中的算法引入点云密度评估,并在法向量估计阶段采用自适应球半径的搜索方法,相比PSR算法与SPSR算法, 速度均有明显提高,且在树深值较小时更加显著; 相比PSR算法, 速度平均提高约33%,比SPSR算法速度平均提高约15%。但由于PSR-EC算法引入了Dirichlet条件作为提取等值面的包络约束,降低了内存开销,本文中的算法与之相比, 速度仍然较慢。
-
此外,由于原始数据与重建后数据有点云模型和网格模型等表示形式, 所以,本文中选择原始数据点云形式与重建数据网格形式之间的豪斯多夫距离[19](Hausdorff distance, HD)、原始点云模型到重建表面的均方根误差(root mean square error, RMSE)来定性评价对比实验中各个算法重建表面与原扫描模型表面的差距。将HD和RMSE值分别与此项最大值比较做归一化处理后各算法实测值[20]如图 7和图 8所示。可以看出,本文中算法的误差在对比实验中最小。
图 7 模型在不同算法、不同树深下实测HD值
Figure 7. Model measured the HD value under different algorithms and different tree depths
图 8 模型在不同算法、不同树深下实测RMSE值
Figure 8. Model measured the RMSE value under different algorithms and different tree depths
为了更加直观地展现重建表面模型与原始模型的偏差,使用相关软件将重建表面模型与原始模型作3-D比较处理,具体操作方法如下:(a)将原始模型转换为step机械文件格式;(b)将重建表面模型与原始模型导入3-D检测软件;(c)依次执行初始对齐,最佳拟合对齐,3-D比较命令,4组实验中参数设置均相同。
本组设置中设置可显示公差范围为[-0.1 mm, +0.1 mm],可接受公差范围为[-0.01 mm, +0.01 mm], 且在此范围内的模型匹配范围显示绿色,模型3-D比较的可视化结果根据各区域实际公差的不同显示不同颜色(参见图 9中右侧色条)。在此公差设置下, 统计各个算法重建结果在可接受公差范围内的比例、均方根值、平均偏离程度与离散程度来衡量重建结果的准确性, 实验结果如图 9和表 2所示。本文中的算法的各项指标总体表现最优,但有个别模型的平均偏离和离散程度不是最小,原因是部分点云稠密化过程引入了较多的噪点。
图 9 模型在各算法下的重建结果与原模型3-D比较图
Figure 9. 3 -D comparison of the reconstructed results of the model with the original model under each algorithm
表 2 模型误差项实测表
Table 2. Measured value of the model reconstruction error term
item algorithm crankcase gear screw turbine percent within tolerance/
%PSR 21.6 11.8 34.6 28.3 SPSR 43.7 25.8 44.5 51.6 PSR-EC 52.9 49.4 68.1 60.8 ours 63.5 57.6 97.3 72.0 RMS PSR 4.2851 0.2925 0.2540 1.3870 SPSR 0.0393 2.8649 0.2419 0.0251 PSR-EC 0.0437 0.7680 0.2018 0.0412 ours 0.0341 0.0275 0.0018 0.0298 average deviation PSR -1.8315 0.0044 -0.0675 -0.5302 SPSR 0.0028 -0.7153 -0.0525 0.0033 PSR-EC -0.0010 -0.1228 -0.0461 0.0077 ours 0.003 0.0044 0.0004 0.0063 degree of dispersion PSR 15.0083 0.0085 0.0600 1.6428 SPSR 0.0015 7.5935 0.0434 0.0006 PSR-EC 0.0019 0.5747 0.0386 0.0016 ours 0.0012 0.0007 0.0001 0.0008
基于混合树的改进泊松曲面重建算法
Improved Poisson surface reconstruction algorithm based on hybrid tree
-
摘要: 为了提高泊松表面重建算法效率并改善重建结果细节表现, 采用一种基于混合树的点云搜索方法, 平衡了八叉树和二叉树技术关于时间复杂度和空间复杂度的冲突; 并在点云搜索阶段通过引入多个能量项对点云进行密度评估与滤波等, 针对点云稀疏部分进行自适应的点云稠密化以保证重建模型的细节与准确度。结果表明, 混合树重建算法与泊松表面重建算法及屏蔽泊松算法相比, 速度分别平均提升了33%和15%, 且能更好地保持重建模型的细节, 误差最小。该研究为点云的表面重建提供了参考。Abstract: To improve the efficiency and detail performance of the Poisson surface reconstruction algorithm's reconstruction results, a point cloud search method based on a hybrid tree balances the conflict between time complexity and space complexity of octree and binary tree technology. In the point cloud search stage, the density evaluation and filtering of the point cloud were used by introducing multiple energy terms, and adaptive point cloud up sampling was used for the sparse part of the point cloud to ensure the details and accuracy of the reconstructed model. The results show that the speed of the hybrid tree reconstruction algorithm increased by 33% and 15% on average compared with the Poisson surface reconstruction algorithm and the screened Poisson surface reconstruction algorithm. In addition, the details of the reconstructed model can be better maintained to obtain the minimum error. This study provides a reference for the surface reconstruction of point clouds.
-
Key words:
- image processing /
- Poisson reconstruction /
- octree /
- normal estimation /
- energy function
-
表 1 各算法重建实际所用顶点数
Table 1. Actual numbers of vertices used by each algorithm
algorithm crankcase gear screw turbine PSR 1999277 250000 229992 150002 SPSR 1999277 250000 229992 150002 PSR-EC 1999277 250000 229992 150002 ours 2016503 253015 232617 152942 表 2 模型误差项实测表
Table 2. Measured value of the model reconstruction error term
item algorithm crankcase gear screw turbine percent within tolerance/
%PSR 21.6 11.8 34.6 28.3 SPSR 43.7 25.8 44.5 51.6 PSR-EC 52.9 49.4 68.1 60.8 ours 63.5 57.6 97.3 72.0 RMS PSR 4.2851 0.2925 0.2540 1.3870 SPSR 0.0393 2.8649 0.2419 0.0251 PSR-EC 0.0437 0.7680 0.2018 0.0412 ours 0.0341 0.0275 0.0018 0.0298 average deviation PSR -1.8315 0.0044 -0.0675 -0.5302 SPSR 0.0028 -0.7153 -0.0525 0.0033 PSR-EC -0.0010 -0.1228 -0.0461 0.0077 ours 0.003 0.0044 0.0004 0.0063 degree of dispersion PSR 15.0083 0.0085 0.0600 1.6428 SPSR 0.0015 7.5935 0.0434 0.0006 PSR-EC 0.0019 0.5747 0.0386 0.0016 ours 0.0012 0.0007 0.0001 0.0008 -