李晋儒,宋成航,林景峰
(山东科技大学测绘与空间信息学院,山东 青岛 266590)
随着近些年来三维激光扫描仪的出现和数字化计算机水平的不断提高,三维点云处理技术发展前景更为广阔,人们利用测量手段采集到的物体点云数据也变得更加简单,准确。近些年来,随着数字城市的快速发展,激光点云数据也越来越多地被应用在重要的工程当中,如各种逆向的工程实际、移动测绘、数字孪生等各类领域,基于三维激光点云的曲面重建技术就是利用三维激光扫描仪中物镜里发射出的激光脉冲信号传输到被测物体的表面,然后到信号反射回到扫描仪中的时间差,从而得到三维激光点云信息,三维扫描仪所获得的数据,具有非接触测量、精确度高、方便获取等优点[1]。目前可以将点云曲面重建技术大致分为两大类:插值法和逼近法。插值法是利用在原始数据的基础上对点云进行插值而构建出的重建曲面;逼近法是通过构建出一个分片的线性曲面去与原始的点云数据进行逼近,使得产生的重构曲面与原始点云的结构较为贴切。
根据重建曲面的表现形式可以大致分为五类,即参数曲面重建、隐式曲面重建、变形曲面重建、细分曲面重建和分片线性曲面重建[2]。姜龙飞等[3]针对点云数据量大的特点,提出了基于定位、扫描、重建一体化显示巷道数据实时更新,能够利用少量的点云去获取三维空间信息。康传利等[4]针对点云数据在经过配准处理后会产生一些无序的噪声,同时会使得部分点云区域造成重叠,提出基于移动最小二乘重采样算法,对空间点云数据构建起邻域,建立拟合函数,选择合适的权函数和基函数,利用体素化下采样对空间点云数据进行点云重采样,利用Crust算法和Geomagic studio软件进行重建,从而解决了由于点云配准而造成的重叠区域和数据量大的问题,提高重建效率。曹诗卉等[5]针对散乱点云数据,去求解出内表面指示函数的最小化问题,对经典泊松算子进行改进,实验能够将物体表面上曲率较高的地方或者尖角处实现平滑效果,避免了最小二乘法收缩差,构成的曲面光滑性较好,但是对一些细节部分的处理,描述得不够清晰。彭文博等人[6]是利用Geomagic、3ds Max等技术对获取的一个建筑物数据进行三维建模,建模质量的好坏与扫描数据的成果有很大关系,需要设置合理的设站数及其位置关系,完整地表达出了建筑物的三维模型。纪志浩等[7]针对点云数据分辨率有限,提出了用Delaunay三角化方法构造网格来逼近物体的三维表面模型,生成表面模拟场景,用Geomagic studio12对点云进行三角剖分,证明该方法具有一定的实用性。贾军辉等[8]人在曲面重建时的细节纹理和重建的质量问题上进行了探讨,通过构建三维Delaunay三角网,根据曲面生长贪心算法,选择出最优的三角形,添加到生长曲面上,最后形成显式三角形的曲面。罗秋等[9]人针对三维重建物不可直接接触,提高建筑物监测精度,运用3ds Max建模软件精确地给出了物体的三维模型和纹理信息,实用性比较强。
针对上述散乱点云数据在噪声方面难以统计分析以及数据冗余程度从而影响隧道曲面重建的质量问题,本文利用了基于隧道的点云数据进行去噪后,分别利用传统的经典重建算法和Crust算法对去噪处理后的点进行曲面重建,实验结果表明利用Crust算法重建后的隧道表面光顺性好,质量和效率比其他方法要好。
本文的主要思想是由于原始点云数据是杂乱无序的,数据量庞大,受周围环境的影响存在许多噪点,噪点的存在会使得重建出的隧道表面不光滑,需要通过体素下采样来使点云密度变得较为稀疏;通过统计滤波器对点云进一步简化去噪,移除离群点。使得原始数据不受周围噪点影响;其次通过对点云构建k-d树的拓扑索引结构,然后利用PCL中的法向量估计NormalEstimationdui对滤波后的点云进行估计,重新确定点云的方向,为曲面重建做进一步准备;最后根据法向量利用贪婪三角化和移动立方体算法对点云数据进行曲面重建。基于VTK的点云数据也是同样简单的数据处理,利用Delaunay来进行三角剖分,计算采样的极点,将输出的内外极点的power图平面,平面就是物体重建后的表面,图1为整个实验流程。
图1 实验流程
原始点云数据一开始没有经过任何处理,如果直接将原始数据用来进行曲面重建的话,那么重建后生成的曲面表面不可避免地产生孔洞、表面起伏不平,突起等不平滑的现象,为避免上述情况的发生,就需要对海量的点云数据进行去噪处理。在本实验中是通过体素化网格方法来对点云进行采样,用体素滤波对原始数据进行采样,一方面是不会改变原始点云的空间结构,同时降低了点云数据的空间密度,可以看到点云数据的空间结构成线性排列,另一方面对前期的提高点云配准、曲面重建、算法速度变得更有效。
在PCL点云库中可以利用VoxelGrid类来对点云数据进行体素滤波处理,考虑到用体素滤波处理的原因,正是因为其能够使点云数据的密度变得均匀,整齐,也就是将点云数据包围在一个立体的包围盒中,盒子的大小长度可以由所给定的坐标可知,然后将包围盒划分成为若干的小立方体,形成小的体素栅格,选择每一个体素栅格的中心点来表示每个小栅格中的周围点,从而就将包围盒里的点云数据用体素栅格的中心点表示出来,经过遍历搜寻查找,得到一个精简后的点云数据[10]。
由于被测的数据本身密度不均匀,有些还会附带一些噪声或者多余的噪点,在测量过程中不可避免地会有一些误差,不规则的点云会使效果更差,就需要通过对每个点的领域进行统计分析,修剪掉不符合的点,就需要调用Statistical Outiler Removal滤波器移除周围的离群点。
首先可以先求出最小包围盒的体积大小,根据体积大小来判断栅格的长度L:
(1)
这里的α表示的是从点云数据到体素栅格的系数因子,ε为比例系数,n为小栅格中点云的数量。每个小栅格里包含的点云数量为:
n=N/V
(2)
其中,N为小栅格中点云总个数,V为体素栅格立方体的体积。
V=LxLyLz
(3)
其中,LX表示的是x方向上最大长度,Ly表示为y方向上最大长度,Lz表示为z方向上最大长度。
将栅格数据分成I×J×K个小立方体栅格,对于任一点pi,其小立方体的编号如下:
(4)
Pi的栅格编码为(Ip,Jp,Kp),转换成编码为:VPi=Ipi×J×K+Jpi×J×Kpi
由此可以求出每个点云栅格数据本身的编码信息,从而去构建点云之间的拓扑关系,然后选择周围的具有代表性的点,算出每个小立方体的重心点的坐标位置:
(5)
然后选取实现部分数据,如图2所示,该数据表示的为代表整个最小包围盒中的数据点,可以利用PCL库中的VoxelGrid类对隧道数据进行体素滤波,实现下采样,原始实验数据共包含了 116 228个数据点,分别设置了体素化网格边长为 0.05 m、0.1 m、 0.25 m、 0.5 m,下采样后的点分别为 99 732、 44 992、 9 564、 2 614。
图2 体素下采样分别为0.05 m、0.1 m、0.25 m、0.5 m的点云数据
由图2可知,通过设置体素边长,点云数据都有一定程度上的精简,在三维空间的整体结构上有一定的拓扑关系,下采样后的点云密度在表面特征区域较大。
经过体素滤波和统计滤波的处理后,原始点云数据从空间结构上来看已经得到了消减,消除了离群点,在此基础上就需要对其进行法线估计,法向量是一个物体表面最重要的属性信息,法向量就是指一个物体的方向,给定了一个方向后,才能够对点云数据进行曲面重建。
由于在曲面重建时,需要输入的点云为有向点云,所以就需要先对点云数据进行法线估计,计算出每个点的法线。
确定表面上一个点的法线问题近似估计表面的一个相切面法线的问题,一般利用主成分分析法(PCA)就可以来表示这一问题,主成分分析法是一种统计类方法,就是将众多的有一定相关性的指标联系在一起,重新组合成为互相不相关的一个指标去替代原来的指标,用主成分分析去估计表面法线主要就是分析协方差矩阵的特征值与特征向量。对于每一个点Pi,对应的协方差矩阵B为:
(6)
(7)
图3是实现表面法线估计效果的隧道数据图:
图3 法向量估计的隧道图
在对隧道数据进行预处理之后,就可以对隧道进行曲面重建,本实验分别利用了贪婪三角化算法、移动立方体算法以及基于VTK的Crust算法,对隧道进行重建,并对几种算法的重建效率进行对比分析,以研究隧道对重建算法的适应性。
(1)贪婪三角化算法
贪婪三角化算法首先是针对带有法向量的点云数据进行三角化处理,对一些边缘点能够使得整个网格变得生长扩大,让这些扩大后的点能够与符合在空间几何上的点和构成拓扑关系上的点能够形成联系,贪婪三角化是将点云数据通过法向量投影在某一平面上,在此基础上对点云进行Delaunay的空间区域增长剖分,实现三角化过程,最后通过三角化后构成的空间拓扑连接关系,得到一个三角网格模型[12]。
(2)移动立方体算法
移动立方体算法是目前三维重建中基于等值面提取的常见方法,目的就是为了寻找到和等值面相交的体素,每个体素会和等值面相交,相交而形成的交面连接在一起后最终形成了所求的等值面。首先也是将整个点云数据利用滤波处理分为每一小块,然后在所求的等值面上规定一个极限值,对每个体素小块上的顶点进行分类,判断顶点是否在这个等值面上,如果其中一个顶点是属于目标物体的内部就取值为0,在目标物体的外部时,取值为1,取值的每种情况都能够在立方体内生成等值面,一般通过插值的方式来生成,一个立方体里的等值面分布一共有256种组合方式,每种组合对应一种剖分方式,根据各个顶点的对称关系,可以简化为大致15种组合。
(3)PowerCrust算法
PowerCrust重建算法开始是由Amenta[13]在2001年提出针对散乱点云重建算法的,该方法是基于VTK库的一种重建算法,是通过中心轴向变换得到物体的表面,物体表面是通过模型的内外极点的子集来确定的,由极点将空间划分为多面栅格,内部栅格与边界相结合就构成多边形表面,由内部点构成的物体表面能凸出在外部,外部点构成的物体表面能凸出在内部,用PowerCrust生成的曲面模型,可以看出密闭性能要好,聚集性要强[14]。PowerCrust重建算法主要是通过中心轴的变换来近似地去得出物体的重建表面的,因为估计物体的中心轴不容易计算出来,就首先利用Voronoi图来生成一个power图,再利用power图上生成的极点去判断该点是在物体的哪个部分,是在其里面还是外面,根据中心轴向变换得出内外极点的近似曲面,该曲面即为重建的曲面图[15]。
本文实验的算法是在VS2013的环境下进行的,采用PCL1.8.1库、VTK7.0库和C++程序来实现的,对隧道数据进行体素滤波处理。实验的硬件配置为Intel(R) Core(TM)i3-3110M CPU @2.40 GHz,4.00 GB内存,Windows7操作系统,对采样后的点云进行曲面重建,重建后的结果在PCL上实现了可视化。实验中的测试数据是来自地面三维激光扫描仪对某一隧道扫描得到的数据,分别对其用经典的重建方法进行曲面重建,重建效果如图4所示。
从图4中可以看到经过体素滤波处理后的点云,随着采样间隔的增大,点云数据在一定程度上均匀地减少,可以提高重建的时间;由图4(a)-(d)中可以看到重建后出现大量的孔洞,这可能与三角化时设置的参数有关,通常情况下要考虑到搜索目标的邻域半径大小和设置样本点搜索其邻近点的最远距离大小,提高该算法的自适应性。对于图4和表1的数据,根据点云分布情况和曲面重建后的效果和重建时间综合分析可知,随着采样点之间的距离增大,点云数量越少,点云的简化效率就会有所提高,法向量的估计时长也在减小,隧道的表面重建时间越短。从表1中可以明显看出来,下采样 0.5 m点云的简化率达到最值,在满足重建效果的前提下,孔洞明显减少,重建时间极大地缩短,缩短了97%。
图4 下采样为0.01 m、0.05 m、0.1 m及0.25 m条件下贪婪三角化重建后的结果
不同采样点间的曲面重建参数 表1
图5和图6的实验结果表明,使用移动立方体对隧道进行重建后,隧道的外表面会产生一些零碎面片,随着采样间隔的增加,零碎面片随之减少,隧道洞口的部分曲面出现不平整光滑,出现褶皱情况,并且图5(a)与(b)中间部分出现凸起部分,随着采样值的取值大小,凸起的部分明显减弱,趋于正常曲面,这与设置的setIsoLevel和setleafsize参数相关,setIsoLevel指的是在等值面提取时所使用的水平值,另外就是与设置的体素大小有关,设置的体素分辨率越大,重建时间越长,重建后的曲面越光滑。利用Powercrust方法对隧道表面重建时它能够获取密封的物体表面,重建出一个完整的三维模型,在图6中发现重建后的隧道曲面与下采样值并没多大关系,重建后的曲面都很光滑且没有多余的噪点,并且曲面更加的光滑,重建后效果明显优于其他两种重建效果,由图7可以看出来重建的时间上明显要优于其他两种重建方法。
图5 移动立方体算法重建效果
图6 PowerCrust重建结果效果
三种重建方法的时间对比 表2
图7 三种重建效率对比图
本文针对隧道中的点云数据量大,冗余多、利用率低的特点,研究了隧道三维点云数据的曲面重建问题,首先将采集到的隧道点云数据对其进行了体素滤波处理,分别选取不同的采样间距,对点云数据进行重建,采用体素滤波能够保持实际的空间特征没有被破坏,减少点的数量,保持点云的形状特征,从而对采样点对应的曲面重建效果来说更加准确;通过用统计滤波器对一些测量噪声点进行去噪,因为噪声点的存在会影响曲面重建的效果;然后分别利用PCL库里的贪婪三角化算法、移动立方体算法及VTK库的PowerCrust算法对隧道点云进行曲面重建,经过对比分析可知,基于隧道的点云曲面重建,PowerCrust算法无论是从重建时效性上来说还是从重建效果上来看都要比移动立方体算法和贪婪三角化算法要好,曲面的光顺性好,可以利用相对较少的点云来表现隧道的三维空间信息,对在工程上进行数据重构和空间信息可视化应用分析有所帮助。