基于垂直切片的点云空洞补全算法
2023-02-02穆莉莉李训杰杨洪涛马天兵单卓佳
穆莉莉,李训杰,杨洪涛,马天兵,b,单卓佳
(安徽理工大学 a.机械工程学院,b.深部煤矿采动响应与灾害防控国家重点实验室,安徽 淮南 232001)
在对环境进行三维扫描建图时,易受扫描设备的固有误差、场景物体表面的照明或反射属性等因素影响而产生点云空洞,致使建模质量受损,给后续点云数据的分析处理带来误差。传统点云修复对象为三角网格模型或曲面模型[1-3],即将点云三角网格化或曲面化后,再对模型进行修复。三角网格化处理会对采样点集进行大幅度地拟合与删减,一定程度上破坏了原有三维点集的结构与细节特征。目前主流的空洞补全方法是基于深度学习训练结果的预测,其补全重建的网络结构通常由编码器和解码器2部分组成[4-5]。例如,缪永伟等[6]采用编码-解码器构建了点云补全网络,将采样点特征码字加上网格坐标数据作为解码器的输入,并使用2个连续的三层感知器折叠操作将网格数据转变成点云补全数据。张艺真等[7]基于RBF神经网络训练好的径向基函数将特征平面内的填充数据点调整到空洞区域。
点云是具有无序性、无连接性的无规则点集[8],深度学习方式逐级逐层的计算耗时巨大,并且大多是基于16类别的ShapeNet、40类别的ModelNet40等合成的规整数据集进行训练,网格质量较低,训练结果较差[9-10]。因此,点云预处理过程会对每一类别的物体点云进行下采样处理,然后训练和测试下采样后的点云,将采样点降低至2 048。该方式虽然可以提高训练速度,但会影响点云结构与细节特征,无法在不破坏原有模型的基础上达到快速修复与密集重建的目的。因此,本文提出一种基于垂直切片的点云空洞补全算法,通过提取稠密点云非补全区域的密度信息,对补全区域进行密度重建,可在不破坏原有稠密点云的基础上补全空洞,运行速度快、密集重建效果良好,在应对大型点云中的点云空洞问题时能够达到快速补全与密度重建的目的,可为点云空洞补全修复提供参考。
1 算法的结构与原理
基于垂直切片的点云空洞补全算法融合了垂直切片与骨骼维度化的原理,首先对三维点云进行滤波、切片、三维信息分离预处理,然后进行骨骼提取、曲线补全和升维操作,完成空洞补全。算法结构如图1所示。
图1 算法结构
1.1 空洞点云的预处理
空洞点云预处理包括统计滤波、半径滤波、体素滤波、点云切片与3D分离。三维扫描设备在采集点云时会产生噪点和空洞。为消除离群噪点对点云质量的影响,首先对采集的原始点云进行统计滤波和半径滤波。统计滤波是对点云中每个点的邻域进行统计分析,剔除不符合标准的邻域点。假设得到的是高斯分布,若点满足公式(1),则将其视为离群点。
K>μ+t×σ
(1)
式(1)中,K为该点到所有相邻点的平均距离;t为标准差倍数的1个阈值;μ为均值;σ为标准差。
半径滤波是指在点云数据中设定每个点在一定半径范围内至少有足够多的近邻点,若不满足就会被删除。半径滤波运行速度快,依序迭代留下的点必定是最密集的,能有效剔除离群点。为降低数据处理量,提高处理效率,对点云数据进行下采样处理。体素滤波通过设置一个三维体素栅格来容纳点云,容纳后的每个体素采用所有点的重心来近似体素中的其他点,使体素内所有点都用一个重心点来表示。此方法相比于体素中心逼近法更能准确表示采样点对应的曲面轮廓。此外,三维体素栅格恰好提供了点云密度重建时需要的密度系数。
点云切片与三维信息分离的核心目的是将滤波处理后的点云按照三维扫描设备的前进方向进行垂直切片,从而获得若干个切片点云。如果原点云存在空洞,那么切片点云则会出现相应的缺口。对切片点云的三维坐标进行分离,利用易于处理的二维点集数据进行补全处理。三维扫描设备前进方向以z轴为例,通过分离各切片的z坐标,得到若干个只含x,y坐标的二维图片,完成三维点云的降维处理。空洞点云预处理算法伪代码如下。
输入:原始点云模型M,切片厚度d,切片方向z=z,体素栅格大小a
输出:N个二维图片IMG
1.M1=statistical(M);//对原始点云模型M进行统计滤波处理
2.M2=voxel(M1,a);//对M1进行体素滤波处理
3.intN=lz(M2)/d;//M2切片方向上的总长与切片厚度的商,并取整
4.S.push_back=section(M2,d);//将点云M2按照切片厚度d进行平均切片
5.for each sectionSi,i=0,1,…,N-1 do//N个三维切片点云
6.for each pointpj,j=0,1,…,points(Si).size() do//遍历每个切片的所有的点
7.img.at
8.end for
9.IMG.push_back(img)
10.end for
1.2 空洞补全算法原理
空洞补全包括骨骼提取、曲线补全以及二维图像升维。由于点云切片存在三个维度的坐标,在投影成二维图片时会使二维曲线产生厚度。骨骼提取将图片中存在厚度的二维曲线进行细化,通过层层剥离像素,在保证原有形状的前提下,提取出曲线骨骼。
假设图片背景色为白色,N(x)为x像素点八邻域点中的黑点个数;A(x)为x像素点八邻域点按序前后分别成对值为0和1的个数。设二维图片像素点P1的八邻域点分别为P2~P9;骨骼提取细化过程需要迭代2个子过程(2)和(3)。若P1满足这2个迭代条件,则其为非骨骼点,该点被设置为白色;反之,该点被视为骨骼点保留下来。当该算法遍历二维图像所有像素点后迭代停止,保留下来的一定是该点云切片降维后的骨骼曲线。
(2)
(3)
若该切片存在空洞,那么降维后的骨骼曲线能够在保证基本轮廓的同时反映出空洞的存在,具体表现为断点。二维曲线的断点连接处理相较于三维点云的断点连接处理更为容易。曲线补全时首先检测二维曲线的断点,设像素点P1的坐标为(i,j),其八邻域点的坐标分别为(i-1,j),(i-1,j+1),(i,j+1),(i+1,j+1),(i+1,j),(i+1,j-1),(i,j-1),(i-1,j-1)。当像素点P1存在,且八邻域点的像素值的和为真时,则P1为断点;遍历二维曲线上所有的点,并对所有相邻断点进行距离检测,若相邻断点的距离小于搜索半径,则将曲线断点进行直线连接。检测条件为:
(xi-xi+1)2+(yi-yi+1)2≤D2
(4)
式(4)中,D为距离检测的搜索半径。
完成二维曲线的补全后,再利用被三维信息分离出来的第三维的z坐标对二维补全部分进行升维,即在补全部分的(x,y)坐标上,增加切片信息的z坐标,将原本曲线的二维像素点集转变为三维点云。由于每个切片点云的数据量非常庞大,三维信息分离出的z坐标信息也同样庞大,因此,利用体素滤波的三维栅格大小对补全点云进行密度重建,达到与非补全点云相同的密度信息。点云空洞补全算法伪代码如下。
输入:二维图片IMG,滤波后点云M2,体素栅格大小a, 切片厚度d
输出:补全后的点云模型M3
1.intn=d/a,m=0;//设置每一个二维图片补全点数,初始化补全后点云的点的数量m
2.for each imageGi,i=0,1,…,IMG.size()//N个二维图片
3.g=repair(Gi)-Gi;//对图片Gi进行二维补全,并提取补全部分曲线
4.for each pointpj,j=0,1,…,points(gi).size() do//遍历每张图片中的所有黑点
5.fork,k= 0, 1, …,n-1 do
6.Pi->pm.x=pj.x;//将二维补全的曲线的x坐标赋值给新点云Pi的x坐标
7.Pi->pm.y=pj.y;//将二维补全的曲线的y坐标赋值给新点云Pi的y坐标
8.Pi->pm.z=min(M2.z)+k*a;//将按照体素栅格大小间隔的坐标赋值给新点云Pi的z坐标
9.m++;
10.end for
11.end for
12.M3=M2.push_back(Pi);//每补全一个切片,将结果加给M3
13.end for
综上所述,空洞点云预处理和点云空洞补全2个算法所需要的输入量为:原始点云M、切片厚度d和体素栅格大小a,默认输入量为三维扫描设备初始运行方向z,输出量为补全后的三维点云。其中,切片厚度用于控制最终点云的补全精度和运算速度,体素栅格大小用于控制密度重建相邻点间距。
2 点云空洞的补全试验
2.1 搭建试验环境
基于实验室搭建尺寸为3 m×2 m×2 m(长×宽×高)的巷道模型,内部采用锚杆支撑结构,水泥色围布作为巷道表面。三维扫描设备选用深度相机Intel RealSense D455,其包括RGB摄像头和双目红外深度模块,采用全局深度快门,最小深度距离为0.4 m,深度精度小于2% ,深度视场为87°×58°,RGB传感器分辨率1 280×800,深度输出分辨率为1 280×720。移动机器人携带深度相机放置于巷道模型入口2.5 m地标处,右侧地标用于起始位置标定。
2.2 评估指标
为评估算法的有效性,采用倒角距离CD(chamfer distance)作为评估指标,公式为:
(5)
式(5)中,S1为生成点云;S2为真实点云;CD(S1→S2)为计算新生成点云中每个点与其最接近的真实点云之间的平均平方距离,衡量的是生成点云与真实点云的差异程度,CD值越小越接近真实点云;CD(S2→S1)为计算真实点云中每个点与其最接近的生成点云之间的平均平方距离,衡量的是真实点云在生成点云中的覆盖率,CD值越小覆盖率越高。
2.3 分析补全结果
采用目前视觉SLAM中泛用性、稳定性最佳的ORB-SLAM2算法,分别重建了点集数量为127 272和92 856的巷道点云模型,设置体素栅格大小为0.01。在三维重建过程中,由于受环境中障碍物的影响,所建2组稠密模型均出现了多处空洞。空洞补全试验结果如图2所示。
(a) 输入点云
(b) 算法补全图2 空洞补全试验结果
由图2可知,模型在f1,f2,f3,f4,f5出现了较大区域的点云空洞,算法处理后f1~f5区域的空洞已被补全。点云补全试验结果分析见表1。不同算法的补全效果见表2。从表1和表2可以发现,原始点云空洞补全与密度重建成功,CD值保持了较低水平,达到了良好的补全效率。同时,随着切片厚度增大,点云空洞补全耗时下降,但CD值相应提高,即补全效果下降。与其他算法相比,本算法的平均耗时和补全速度均最优,补全效果较佳。实际应用中可根据实际建模效果设定较优的切片厚度和体素栅格大小,以达到高效率的点云补全。
表1 点云补全试验结果分析
表2 不同算法的补全效果
3 结束语
针对环境物体建模过程易受扫描设备固有误差和环境物体属性影响而产生点云空洞的现象,提出了一种基于垂直切片的点云空洞补全算法,融合了垂直切片与维度转化的原理,对存在空洞的点云进行滤波、切片、降维、二维曲线补全与提取以及升维处理。试验结果表明,该算法在应对大型场景或物体点云中的空洞问题时,处理更加简单、快速,为点云修复领域提供了一种无需深度学习的、高效的空洞补全修复方法。