结合有序边表法和径向基函数的点云孔洞修补
Point Cloud Hole Repair Combining Ordered Edge List Method and Radial Basis Function
DOI: 10.12677/SEA.2020.91007, PDF, HTML, XML, 下载: 543  浏览: 894 
作者: 华顺刚, 张晓帅*:大连理工大学机械工程学院,辽宁 大连
关键词: 孔洞修补三角剖分有序边表法径向基函数Hole Repair Triangulation Ordered Edge List Method Radial Basis Function
摘要: 为提高三维点云模型表面的完整性,提出了一种结合有序边表法和径向基函数的点云孔洞修补方法。先从三角形网格中提取出边界点,将边界点投影到二维平面上,用有序边表法向孔洞中添加填充点并对其进行三角剖分,将填充点的坐标映射回三维空间,然后提取约束点并确定点的法向量,建立径向基函数,对添加的填充点逐层进行调整。实验结果表明,该算法对于孔洞具有很好的填充效果,填充点在空间分布均匀,与原有孔洞边界连接光滑,可以较精确地恢复原有模型的形态特征。
Abstract: In order to improve the surface integrity of the 3D point cloud model, a point cloud hole repair method based on ordered edge list method and radial basis function is proposed. Boundary points are first extracted from the triangular mesh, the boundary points are projected onto a two-dimensional plane, and filled points are added to the hole using the ordered edge list method and triangulated, and the coordinates of the filled points are mapped back to three-dimensional space. Then, the constraint points are extracted and the normal vector of the points is determined, a radial basis function is established, and the added filling points are adjusted layer by layer. The experimental results show that the algorithm has a very good filling effect on the holes. The filling points are evenly distributed in space and connected smoothly to the original hole boundary, which can accurately restore the morphological characteristics of the original model.
文章引用:华顺刚, 张晓帅. 结合有序边表法和径向基函数的点云孔洞修补[J]. 软件工程与应用, 2020, 9(1): 56-61. https://doi.org/10.12677/SEA.2020.91007

1. 引言

在使用激光扫描仪采集点云数据的过程中,由于模型残缺、视线死角等原因,会导致局部数据缺失,使生成的三维模型表面不完整,存在孔洞。点云的空洞修补是根据孔洞附近点的数据信息,通过填充算法生成新点对孔洞进行填充,恢复物体模型的原始表面形状。点云孔洞修补技术已经被广泛应用于制造业、文物保护以及地形测量等领域 [1]。

现有的孔洞修补算法主要有Centin M和李月雯等人 [2] [3] 提出的泊松法、Liu和Gai等人 [4] [5] 提出的径向基函数法、刘震和Wang等人 [6] [7] 提出的特征线修补法、Wang 和刘许等人 [8] [9] 提出的移动最小二乘法等。

本文提出一种结合有序边表法和径向基函数的点云孔洞修补方法。用有序边表法对孔洞进行初步填充,用径向基函数分层调整填充点的位置,减少了填充时间,使点的分布更加均匀,提高了填充后网格的质量。

2. 孔洞的识别及填充

2.1. 孔洞边界的提取

在对三维点云进行填充之前要先获取点云孔洞的边界。在三角形网格内部中,每条边都参与组成两个三角形,而位于边界处的边只参与组成一个三角形,所以应先遍历已生成的所有边和三角形,将只属于一个三角形的边界边提取出来,将边界边首尾相接形成闭环,就得到孔洞的边界,如图1所示。

Figure 1. Examples of holes

图1. 孔洞的实例

求得边界点集后,需要利用点集拟合一个二维平面,将空间点集投影到该平面上。本文采用最小二乘法来进行平面拟合。设其平面方程为,利用最小二乘法可以求解出平面参数。

2.2. 有序边表法填充孔洞

将孔洞边界投影到二维平面后,需要按照一定的密度向边界多边形内添加填充点,本文采用有序边表法实现孔洞的快速填充,如图2所示。具体步骤如下:

Step1:将多边形的所有边按照其上端点的y坐标递增的顺序进行排序,并放入边界边链表中,同时建立一个空的活性边链表。

Step2:建立一条与多边形最低点相交的水平线,称之为扫描线,其纵坐标大小标记为

Step3:将扫描线沿y轴上升一段距离d (计算方法见2.2),将活性边链表中上端点y坐标小于的边删除,同时将边界边链表中下端点y坐标小于且上端点y坐标大于的边提取出来加入到活性边链表中。

Step4:计算扫描线与活性边链表各边的交点,在扫描线上从左侧开始按照距离d取点作为填充点,且填充点与右侧交点距离应大于等于d/2。

Step5:重复执行Step3、Step4,直至活性边链表为空。

Figure 2. Ordered edge table fill polygon

图2. 有序边表法填充多边形

2.3. Delaunay三角剖分生成网格

孔洞填充完成后,需要用Delaunay三角剖分算法生成三角形网格,如图3所示,具体步骤为:

Step1:建立一个三角形,将所有的点包围在其中,称之为超级三角形;同时把散点按横坐标的大小进行排序。

Step2:从点集取出一个散点,在三角形链表中找出外接圆包含该点的三角形,称为该点的影响三角形。 删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,完成一个点在Delaunay三角形链表中的插入。

Step3:循环执行上一步,直到所有散点插入完毕;删除与超级三角形顶点有关的所有三角形。

(a) 散乱点云 (b) 网格模型

Figure 3. Generate mesh models from point clouds

图3. 由点云生成网格模型

3. 径向基函数调整填充点的位置

3.1. 径向基函数

对于三维空间的n个点及对应的值,如果存在一个函数满足,那么可以由定义一个隐式曲面。基于径向基函数的的隐式曲面方程通常表示为:

(1)

曲面方程中的参数可以通过求解如下矩阵方程来求得:

(2)

其中为约束点,为约束点对应的值,当点在曲面上时,当点在曲面外侧时由下式求得:

(3)

3.2. 确定点的法向量及提取约束点

使用径向基函数建立隐式曲面方程要先获取到足量的能表达物体几何特性的插值点信息,本文将边界点及其相邻的点添加为插值约束点,但若只在曲面上取点,会导致矩阵方程只有零解,生成的隐式曲面方程无法准确反映曲面在空间的曲率变化,因此还需要在曲面外取一些约束点。

在曲面外取点之前要先确定点的指向曲面外侧的法向量。先将空间划分成许多个小栅格并为其编号,确定每个散点所在的栅格。将边界点按照首尾相接的顺序排序,并均匀的取出六个点,对每一个点用最小二乘法求解出该点的近似法向量,然后分别沿XYZ坐标轴搜索,如果X轴正方向上的栅格都不包含其他点,而X轴负方向上的栅格内有其他点存在,则称该点的法向量可由X轴方向确定,且点的法向量应该与向量的夹角为锐角,如果一个点可以由两个坐标轴方向来确定且结果一致的话,则可以取该点为基准点,根据相邻点方向量成锐角的原则,可以确定其他点的法向量。

然后在每一个曲面上约束点沿指向曲面外的法向量0.2单位长度处取点作为曲面外的约束点,将约束点坐标及取值代入到矩阵方程中可以求解出隐式曲面方程的参数。

先计算出边界边平均距离,根据边界点的坐标求出其重心点C,采用2.3中的公式(4)进行迭代调整求出该点在隐式曲面上对应的点C',计算出两点间的距离。则填充点的采样距离d可由

定,其中为比例因子,当时,,当

3.3. 调整填充点的位置

用有序边表法对投影后的孔洞进行填充后,需要通过逆矩阵变换将其映射回三维空间,映射后的点处在边界点的拟合平面上。需要将拟合平面中的新增填充点向隐式曲面逐步迭代调整,使新增的孔洞点与先前孔洞周围点云能够平滑过渡,更好的还原模型的几何特征,如图4所示。调整步骤如下:

Step1:遍历所有的新三角形,按照填充点之间的连接关系,确定填充点所在的层数,与边界点相连的点处于第一层。还需确定填充点与上一层哪些点相连,计算这些点的平均点作为填充点的基点。取边界边平均距离的1.5倍为临界距离。

Step2:从第一层开始,按照层数依次取出点进行调整,将该点的坐标带入函数中,确定的正负号,然后用下式进行迭代

(4)

其中分别为初始点坐标和调整后点的坐标;t为点的位置参数,当,当为步长,大小为边界边平均距离的十分之一;为拟合平面的单位法向量。

每迭代一次计算一下,直到的正负号与初始的正负号相反时,停止迭代。

Step3:计算点与基点的距离,若大于临界距离,则取该点与基点线段上距基点距离等于临界距离的点替代该点。

Step4:循环执行Step2、Step3,直到所有点被调整完毕。

Step5:最后用拉普拉斯算法进行平滑处理,即将网格中的每个顶点移向其周围邻域重心的位置。

Figure 4. Layered adjustment of fill points

图4. 填充点的分层调整

4. 实验结果及分析

为了验证提出算法的有效性,在Win7环境下用C++编写程序,使用OpenGL图形库对点云和网格进行渲染,使用 MFC 框架实现可视化界面。实验计算机配置为Intel(R) Core(TM) i5-4590 3.30 GHz CPU,8 G运行内存,修补实例如图5所示。

(a) Circular cone (b) Cat (c) Rabbit

Figure 5. Hole repair example

图5. 孔洞修补实例

5. 结论

本文提出了一种高效率的点云孔洞修补算法,用有序边表法生成填充点对孔洞进形填充,避免了复杂的角度运算,缩短了填充时间。然后用栅格法确定约束点法向量的方向,准确地求出径向基函数的隐式曲面方程,根据曲面方程对添加的填充点逐层进行调整,最后对所有点用拉普拉斯算法进行平滑处理,使填充点的分布更加均匀。实验结果表明,该算法对于孔洞具有很好的填充效果,对点云模型的适应性比较好,对于曲率变化显著的孔洞也能够准确地进行修补,生成的曲面与原有孔洞边界过渡平滑,可以较精确地恢复模型的表面形状。

参考文献

[1] Guo, X., Xiao, J. and Wang, Y. (2016) A Survey on Algorithms of Hole Filling in 3D Surface Reconstruction. The Visual Computer, 34, 1-11.
https://doi.org/10.1007/s00371-016-1316-y
[2] Centin, M., Pezzotti, N. and Signoroni, A. (2015) Poissondriven Seamless Completion of Triangular Meshes. Computer Aided Geometric Design, 35-36, 42-55.
[3] 李月雯, 耿国华, 魏潇然. 基于泊松方程的孔洞修补算法[J]. 计算机工程, 2017, 43(10): 209-215+221.
[4] Liu, S. and Wang, C.C.L. (2012) Quasi-Interpolation for Surface Reconstruction from Scattered Data with Radial Basis Function. Computer-Aided Geometric Design, 29, 435-447.
https://doi.org/10.1016/j.cagd.2012.03.011
[5] Gai, S.Y., Da, F.P., Zeng, L.L., et al. (2019) Research on a Hole Filling Algorithm of a Point Cloud Based on Structure from Motion. Journal of the Optical Society of America A, 36, A39-A46.
https://doi.org/10.1364/JOSAA.36.000A39
[6] 刘震, 王艳宾, 白丽丽, 缪永伟. 曲面细节特征保持的三维模型孔洞修复方法[J]. 计算机辅助设计与图形学学报, 2016, 28(12): 2052-2059.
[7] Wang, Y., Jing, T., Zhao, Y., et al. (2017) Point Cloud Hole Filling Based on Feature Lines Extraction. IEEE International Conference Proceedings on Virtual Reality and Visualization, ICVRV 2017, Zhengzhou, 21-22 October 2017.
https://doi.org/10.1109/ICVRV.2017.00021
[8] Wang, J. and Oliveira, M.M. (2007) Filling Holes on Locally Smooth Surfaces Reconstructed from Point Clouds. Image and Vision Computing, 25, 103-113.
https://doi.org/10.1016/j.imavis.2005.12.006
[9] 刘许, 宋阳. 一种基于移动最小二乘法的点云数据孔洞修补算法研究[J]. 现代电子技术, 2017, 40(5): 101-104.