基于车载LiDAR 点云的行道树提取研究
2022-01-17欧阳涛王山东
欧阳涛,王山东
(1.河海大学 地球科学与工程学院,江苏 南京 211100)
目前,行道树的研究大多在于行道树的识别与属性提取[1-5],或者对相连树分割[6]等具体情况进行研究。钟若飞[7]等结合影像数据中RGB 信息将车载LiDAR 点云分为地面点和非地面点两部分,进而从非地面点云中提取出树木信息,但此方法需要影像数据,不具有普适性。吴宾[8]等利用投影点密度以及空间分层的思想实现单颗树木信息提取。
以上针对单行道树进行信息提取的研究大多有一定的附加条件,实际测量的道路两旁行道树点云情况复杂,不仅仅包括相连树,还包括夹杂在树中间的路灯或者停在路边的小车等许多情况,由于车载扫描设备的局限性,靠近道路一侧扫描到的点云十分完整,背离道路一侧的点云都较为稀疏,在提取研究时应更加注意。本文在结合已有算法[9-11]的基础上,基于对车载LiDAR 点云,针对构建的格网研究一种提取行道树以及分割树干点云的算法。
1 非地面点云提取
车载LiDAR 系统扫描获取了道路以及周围大量点云,其中就包含了大量地面点云,但本文研究的行道树属于非地面点云,因此大量的地面点数据会对实验造成障碍,同时也影响提取算法的效率。实验采用如图1 所示的车载LiDAR 数据,对原始点云进行滤波处理,提取非地面点云。
图1 实验点云数据
1)格网构建。由于点云数量庞大,本文采用分格网处理的方法,即将原始点云投影后,在XOY 平面划分二维格网。首先将点云投影到XOY 平面,获取其x,y方向上的最大值xmax和ymax与最小值xmin和ymin,从而获取实验区域的大致范围,设置一定的格网大小xTsd和yTsd将原始点云分割成m×n个规则的网格,每个格网设置点密度、高差与属性值等信息。其中m,n的值如式(1):
由于不同地区地势起伏不同,因此格网大小阈值的选择需要进行调整,依据区域的大小形状确定X方向以及Y方向的阈值,在地势起伏大的区域格网要划分小一点,地势平坦地区可以划分大格网。在格网划分时,统计每个格网的点云数据,即作为点密度,并计算其最大高差。
2)估算地平面高程。以单个格网为单元,按高程大小对格网内点云进行升序排序,并计算其前1/4 点云高程的平均值Zave。
3)地面点提取。设置高程缓冲值Zbuffer,计算区间[Zave,Zave+Zbuffer]内点云的高程Zave2,若Zave2与Zave差值小于阈值K,则代表格网地势平坦,将高程Zave2以上的点云作为非地面点提取出来;若大于阈值K,则代表格网地势起伏较大,则将格网继续划分,重复上述3 个步骤,直到所有格网处理完毕,非地面点提取完成。
2 点云降噪
车载LiDAR 系统在移动扫描时,由于空气中灰尘的反射、镜面折射等的影响,数据中有时会包含明显高于地物的异常点,空气中噪声点等,这些噪声点有时会导致地物点提取的不确定性,增加算法的困难程度。点云降噪的方式多种多样,左志权[12]等利用依据基于邻接关系的推理规则进行噪声单元与非噪声单元聚类,最后进一步选择更精细剖分阈值迭代剔除低矮噪声。滤波处理后点云中的噪声点大多是空气中的异常点或者树冠表面的噪声点,因此采用半径滤波对其进行点云降噪[13]。
依次查询所有点,设置搜索半径和领域点个数2 个阈值,如图2 所示。设置搜索半径为r,1 号点邻域中没有点,2 号点邻域有4 个点,3 号点邻域中有2 个点,若设置领域点个数阈值为3,则1 号点和2 号点即被当成噪声点剔除。
图2 半径滤波示意图
由于此方法需要遍历所有的点,因此本文在剔除地面点后在进行点云降噪,可以有效降低算法的时间复杂度,在设置阈值后,对非地面点降噪前后对比如图3 所示。
图3 非地面点降噪前后对比图
3 地物聚类
剔除地面点以及降噪处理后的点云,已经被分割成不同的点云独立块,而需要提取的行道树就在这些点云块中,因此需要将这些点云块聚类成独立的单元,在聚类单元中提取目标地物。本文结合已有改进的区域增长法算法[3,14],构建格网进行聚类,具体步骤如下:
1)按照非地面点云提取步骤中的格网构建方法,重新构建网格,网格边长要尽量设置小一点。统计并计算落在格网内的点云个数,设定一个数量阈值K,若格网内点云个数不满足阈值K,则将格网内点云剔除并赋予此格网空格网属性,反之则是非空格网,并对其赋予非空属性值feature。
2)遍历格网,依次将一个格网作为起始聚类中心格网点,并重新赋予一个新的格网属性feature2,同时将聚类中心格网周围8 个格网中的非空格网赋予与中心格网相同的属性值feature2。
3)依次处理下一个格网单元,若格网属性为feature,则将其作为聚类中心,然后重新赋予一个新的格网属性feature3,并对其周围8 个邻域进行探测,若格网属性值为feature 则直接赋予与中心格网相同的属性值feature3。若格网已经处理过,也赋予与中心格网相同的属性值feature3,同时将其他与此格网属性相同的格网都赋予与中心格网相同的属性值feature3。
4)依次遍历所有格网,直到找不到中心聚类格网则表示聚类结束。假设非空格网设置属性值为1,空格网为0,新属性值按2,3,4,……赋予,有3 个不同点云块步骤1(如图4 所示),经上述4 个步骤,最终聚类结果为步骤4。
图4 聚类流程图
4 行道树提取
在上一步骤中,点云已被划分成有不同属性值的聚类单元,这些聚类单元具有不同的高度和形态,而车载LiDAR 扫描道路两旁主要特征地物有建筑物、车辆、路灯、行道树、杆状物以及低矮地物等,其具体形态等差异如表1 所示。
表1 不同地物属性差异表
依据表格中的属性差异,本文以每个聚类单元为处理对象,按照表格中的属性依次剔除其他地物,提取行道树点云。具体步骤如下:
1)剔除噪声块,统计每个聚类单元所占格网数量,设定格网阈值Kmesh,点云个数阈值KN,若格网树不满足Kmesh,计算其聚类单元的点云个数,若点云个数小于阈值KN,则将该聚类单元看作噪声点剔除。
2)低矮地物与车辆滤除。设置一个高差阈值H并统计每个聚类单元的最大高差,若聚类单元最大高差小于阈值H,则将其看作低矮地物滤除。经过滤除后剩余基本都是如建筑物、行道树以及杆状物等高程较大的地物。
3)行道树提取。首先计算每个聚类单元投影跨度,即取x,y方向二维投影坐标的最大值与最小值之差中大的差值作为投影跨度,设置投影跨度阈值KP,若投影跨度大于KP,则将其当作疑似建筑物聚类单元提取出来,反之则将其当做杆状物聚类单元提取。对疑似建筑物聚类单元做高程投影,选取高程值K,将聚类单元高程值K以下点云投影至二维平面;若投影面积与聚类单元投影面积差异大,则作为行道树点云提取出来;对杆状物设置面积阈值S,若面积大于阈值S,则将其作为行道树点云提取出来,剔除杆状物与路灯点云。
4)相连树树冠点云分离。文献[9]介绍了3 种算法进行相连树分割,本文结合其中基于距离的提取算法进行相连树分割。首先确定相连棵数,以及每棵树的底部重心点坐标;然后遍历聚类单元所有点,计算点到每棵树底部重心点的水平距离,将点划分进水平距离最近的树木中。提取出相连树进行实验,分割结果如图5b、5c 所示。
图5 行道树点云提取结果
将相连树分割完毕后,对其进行树干高提取,以每棵树的聚类单元为数据处理单元,将聚类单元按照高程分为m层,从最底部一层开始,将其点云投影至二维平面,记录其所占格网数量,作为该层的投影面积,并依次记录为area1,area1,…,aream。设置阈值N,依据以下公式提取树干点云:
5 实验结果与分析
为了验证本文算法的有效性,选取了图1 所示的车载LiDAR 点云进行实验,采用C++结合PCL 对实验数据进行处理。首先非地面点提取,剔除了地面点以及地面以下的噪声点,结果如图3a 所示,然后进行点云去噪,剔除了非地面点中的孤立点与异常点,结果如图3b 所示。然后对分割的点云块进行聚类,对聚类单元进行提取,以及相连树分割,提取最终结果如图6 所示。
图6 行道树提取二维效果图
为了验证算法的准确性,对提取的行道树以及相连树的准确分割进行验证,本文采用人工提取与其对比,对比结果如表2 所示。
表2 提取结果对比
从提取结果来看,本文算法提取行道树准确率为88.89%,相连树提取准确率为86.36%,由此看来,算法具有可行性。分析上述提取结果发现,由于距离道路两旁近的树木茂盛且扫描点云多,所以提取效果较好,距离道路较远的树被其他树的遮挡,扫描点云稀疏,提取相对比较困难,提取效果差或提取不出来。
6 结 语
本文提出的行道树提取算法,以及相连树分割的方法具有较高的准确性,不仅能提取出道路两旁的行道树,还能对其中的相连树进行分割提取,并提取每棵树的树干与树冠点云。但本文算法中有多个步骤难度较高,对设备有较高要求,耗时也相对较长。另外,对于穿插在行道边树之间的路灯,本文算法并不能很有效的剔除路灯点云,需要进一步改进,使算法更具普适性。