崔 峥,王增才,张 杰,闫 明,王普圣
(山东大学机械工程学院,山东 济南 250061)
煤炭作为重要的能源物资,成本高、储量大,因此需要进行快速准确的盘点。目前大多数煤炭是以煤堆的形式进行储存,对于煤堆的体积测量费时费力,往往需要付出巨大的人力物力。针对煤堆体积测量,国内学者已经展开了大量研究实践工作[1-5]。陈莹等[6]提出了由4台CCD摄像机、图像采集卡和微机构成的计算机视觉测量系统,用来测量形状不规则的大型物料堆体积的方法。朱海波[7]提出采用激光扫描光三角测量原理的系统设计,实现对露天煤场存煤量自动检测功能。该系统将CCD摄像机、激光测距仪和地图星均安装在煤场一侧的测量塔上,首先标定一个已知空间位置作为初始点,由计算机控制激光扫描测距系统对煤场进行自动扫描,通过激光测距仪测量每一个待测点与扫描仪的空间距离,通过地图星记录待测点与初始点的位置变化,进而用光三角法和初始点的标定信息计算获得待测点的三维坐标,最后由计算机拟合煤堆表面形状,并求出存煤体积。秦健[8]提出将激光测距仪和步进电机安装在煤场取煤的斗轮机的悬臂上,行程传感器触点安装在待测煤推的纵向区域,采集煤堆表面数据,生成三维坐标数据计算体积的自动盘煤及管理系统。梁乐[9]研究了一种双目视觉的测量方法,主要通过半全局匹配法计算视差图,然后根据数值积分计算目标的体积,实验表明对于一些形状不规则的物体有着较好的测量效果。丁嗣禹等[10]使用双目相机作为图像采集设备,采集不规则物料堆的俯视图像,通过半全局匹配算法计算出不规则物料堆的视差图,然后在视差图优化阶段主要使用中值滤波算法和最近邻插值算法,将视差图中的视差值转换为三维坐标数据,还原物料堆三维场景,再借助改进的OTSU算法对物料区域进行分割,根据区域内物料堆的平均高度和平均面积计算堆料的体积。以上方法在计算煤堆体积时,所需设备较多,且需要多次信号处理,因此计算过程较为缓慢。
针对以上问题,本文提出了一种基于三维点云分割的煤堆体积计算方法。使用激光雷达对煤堆进行扫描,获取到煤堆及其周边环境的点云数据,然后将点云数据直接输入到Point-Net神经网络中进行处理,将煤堆点云数据与其他物体点云数据进行区分和分割,从而获取仅含有煤堆的点云数据,最后对该点云数据进行Delaunay三角划分,并进行积分计算,得到煤堆的体积数据。
激光雷达是一种主动式的现代光学遥感技术,它采用非接触式测量的方法,可以快速扫描形状不规则的复杂物体,获取目标表面回波点的坐标信息。三维点云是指按照规则格网排列的三维坐标点的数据集,可以由激光雷达扫描被测物体获得。
在对煤堆进行扫描时,由于激光雷达扫描范围广、速度快,因此所形成的点云数据往往是大片包含有煤堆和各种复杂环境的场景,这对于后续煤堆的体积计算有极大的干扰性。为了只获取煤堆的点云数据,需要构建神经网络对点云进行语义分割。
神经网络是一种由大量的节点也就是神经元直接相互关联而构成的计算模型;每个节点(除输入节点外)所代表的输出函数称为激励函数;每两个节点的连接都代表该信号在传输中所占的比重(即认为该节点的“记忆值”被传递下去的比重),称为权重;网络的输出由于激励函数和权重的不同而不同,是对于某种函数的逼近或是对映射关系的近似描述。图1为两层的神经网络构图。
图1 神经网络结构图Fig.1 Neural network structure diagram
(1)
最终输出结果见式(2)。
output=
(2)
式中,h为激活函数。
网络训练过程为:①初始化权重,通过前向传播,计算网络的输出;②使用代价函数衡量当前的预测与真实值的误差;③使用梯度下降,将误差反向传播(链式法则),修改网络权值;④循环,直到网络误差达到目标要求停止,应用训练好的模型对测试样本训练。
最终训练得到的神经网络模型可以对特定的目标进行区分识别,但一般的神经网络都应用于图像识别,所处理的文件类型也都是照片等二维信息。三维点云虽然能够方便快捷表达物体的三维结构,但其数据结构复杂,具有置换不变性,即使点云的坐标发生改变,其表达的物体特征没有变化,因此很难直接应用于神经网络中。虽然可以将点云数据进行体素化来输入神经网络中处理,但该方法将会损失点云中大量的特征信息[11-15]。因此,本文提出应用Point-Net神经网络,可以直接作用于点云数据中,解决以上问题[16]。
首先,Point-Net神经网络主体架构由T-Net微型网络和Mlp多层感知机组成。T-Net微型网络可以看成一个缩小版的Point-Net神经网络,其主要作用是生成一个仿射变换矩阵,对点云的旋转及平移进行规范化处理,从而解决了点云置换不变性的问题。Mlp多层感知机也称为人工神经网络,其隐藏层与输入层为全连接,主要通过二维卷积来实现对点云中的局域特征进行升维操作,这样可以在更高的维度对点云的局域特征进行提取,极大地减少了特征损失。
Point-Net神经网络的架构见图2。Point-Net神经网络是分类网络的扩展,简而言之,该神经网络主要运用Mlp多层感知机对每个点的局域特征进行升维处理,随后将n×64维局域特征和1 024维全局特征进行融合,最后利用(128,m)的感知机进行特征分类,输出结果为n×m,n对应n个点,m对应点所对应的m个分类得分。将三维点云数据输入到T-Net微型网络的一些主要特点如下所述。
图2 Point-Net架构图Fig.2 Architecture diagram of Point-Net
1)将最大池化层集作为对称函数,从每个点聚合信息,使模型对输入排列保持不变。
2)能够预测每个点的特征,依赖于来自附近点的局部结构和全局信息,使得预测对象的转换不变,如平移或旋转。
3)通过在特征提取前将所有输入集合对齐到规范空间,使点云的语义标注与点云几何变换保持不变。
其输出的分类结果见式(3)。
f(x1,x2,…,xn)=γ×g(h(x1),…,h(xn))
(3)
式中:x为点云中的点;h为特征提取层;g为对称方法,Point-Net采用了max-pooling策略;为高维特征提取。
对分割结果的可视化可以借助Cloud Compare软件完成。
整套体积测量系统流程见图3。在使用Meshlab软件进行补全降噪后,可以获取较为完整的煤堆点云数据。为了计算该煤堆的体积,需要对煤堆点云进行Delaunay三角划分。
图3 体积测量系统Fig.3 Volumetric measurement system
平面中定义一点集Q,Q={Qi|i=1,2,…,j},且j≥3。V(Qm)=∩H(Qm,Qn),(1≤n≤j,m≠n),即V(Qm)表示比其余点更接近Qm的点的轨迹是(j-1)个半平面的交,它是一个不多于(j-1)条边的凸多边形域,称为关联于Qm的Voronoi域。Q中任意一点均可作为一个Voronoi多边形,如图4(a)所示,这样的j个Voronoi多边形组成的图形称为Voronoi图[17]。
由Voronoi图衍生得到Delaunay图,二者互为对偶。图4(b)中对每条非边界的Voronoi边作其中垂线,得到的即为Delaunay三角剖分[18]。基于格网划分的Delaunay三角网络的具体构网步骤为[19]:①将获取到的杂散点云数据进行格网块划分,按照划分逆序对格网块内的数据点依次构建Delaunay三角网;②构网过程中受相邻格网中数据点影响的三角形与邻近三角形暂时保存,完成构建的三角网结果保存入数据库;③合并临近的Delaunay三角形子网并进行优化处理,改进过后符合条件的三角形仍按照上述步骤中的构网规则进行处理;④直到完成格网中所有Delaunay三角网构建[20]。
图4 Voronoi图和Delaunay图Fig.4 Voronoi diagram and Delaunay diagram
对煤堆点云数据进行Delaunay三角剖分后,将会获得由大量三角面片组成的凸壳,将这些三角面片投影到地面上,就会形成数量庞大的三棱柱,因此,只需要计算出三棱柱的体积,即可获得煤堆的体积。
本文运行网络模型的电脑配置为NVIDIA GTX 1080Ti显卡,3.6 GHz、16 GB RAM的Intel Core i7-7700 CPU处理器,所使用的软件为Spyder环境下的Tensorflow,计算机为Windows7系统。
由于建立数据集需要大量的三维点云数据,而真实煤堆的体积较为庞大,采集工作费时费力,因此,本文将通过在实验室人为搭建煤堆及煤堆所在的复杂环境来模拟真实矿场环境,采用体积为1 000 dm3左右的煤堆进行实验验证。通过使用激光雷达扫描,共获得36组三维点云数据,所搭建某一场景扫描获得的点云见图5。
图5 搭建场景及其三维点云Fig.5 Built scene and its 3D point cloud
由于振动、空气中的煤尘会产生噪声点,这将极大影响点云数据的准确性,因此,需要对点云数据进行降噪处理,本文采用中值滤波进行降噪。中值滤波是将点云序列中的一个值用该点的邻域中各点值的中值代替,让其邻域各点接近真实值,从而消除孤立的噪声点。处理后的点云数据见图6。由图6可知,降噪处理有效降低了多余的数据点,减少了数据计算的工作量。对于其他场景下的点云数据也进行相同的处理,随后将这些数据进行格式变换。使用激光雷达扫描后,获得的点云数据格式为ply格式,利用Matlab将ply格式转换为txt格式。
图6 降噪处理后的点云数据Fig.6 Point cloud data after noise reduction processing
将数据集进行分类,分为训练集,验证集和测试集。使用Cloud Compare软件对训练集中的数据进行标注,区分出煤堆和其他目标物,最后将txt文件转换为h5格式,用于神经网络的训练。
对Point-Net神经网络模型进行了4 000次迭代,学习率采用指数衰减的方式更新,初始学习率定为0.5,动量因子为0.9。多次调整超参数,最终mloU(平均交并比)达到93.43%,可以将煤堆与其他目标物进行分割,达到了语义分割的效果。分割前以及分割后可视化的效果见图7,其中,中间区域为煤堆点云,两端区域为其他环境点云。
图7 点云分割的可视化Fig.7 Visualization of point cloud segmentation
使用Meshlab软件对分割后的点云数据进行删减,最终形成的煤堆点云数据见图8。由图8可知,点云较为稀疏,有空洞,因此需要对点云进行三维插值。通过配置PCL库,对点云进行补全。首先定义NAN点,为激光发射器发射出去的激光未收到返回光束或者激光接收器接收到的返回激光强度超出阈值范围。补全规则为,每一线激光扫描得到一行点数据中,查找与NAN点最近的点进行补全,如果本行数据全部为NAN(不可能发生),则此行可删除,调整点云尺寸。最后利用Matlab软件对点云模型进行Delaunay三角划分,将该模型划分成无数三棱柱,从而利用积分法计算其体积。操作流程见图8。
图8 体积计算流程图Fig.8 Flow chart for volume calculation
图9为分割后点云中的一个三棱柱,d点为△abc的质心,根据a、b、c的坐标可以计算出d点的坐标,进而求出质心d与投影面之间的距离h,则该三棱柱的体积v即为高度h与投影面三角形面积s的乘积。整个煤堆体积计算公式见式(4)。
图9 三棱柱示例图Fig.9 Example diagram of triangular prism
(4)
式中,V为所有三棱柱体积总和,即为煤堆体积。
通过将煤堆放置在已知体积的容器中来获得其真实体积,并与通过分割计算的体积进行对比,实验测量了四组体积不同的煤堆,结果见表1。
表1 实验结果对比Table 1 Comparison of experimental results
本文通过使用激光雷达扫描煤堆获取其点云数据,并利用Point-Net神经网络对扫描获取的点云数据进行数据处理,成功将煤堆点云数据从整体环境中分割出来,极大减少了人为分割点云的工作量。研究可知,Point-Net神经网络平均交并比在91%左右,可以较为精确地识别出煤堆的点云数据,具有一定的可靠性。同时,体积计算的相对误差均在5%以下,精度较高,证明了该方法的有效性。计算得出的体积相对于实际体积较小,这是由于在点云数据分割过程中,有少量煤堆点云数据未被识别出来,造成计算出的体积偏小。另外,将点云数据输入到神经网络并最终计算体积结果平均时长不超过10 min,说明该方法方便快捷的特点。研究表明,本文所提出的体积测量方法精度高,速度快,所需设备简单,成本较低,具有一定的先进性和创新性。