前言
基于前面的控制点路面提取来讲,这次又是有苦难言😭😭😭,首先虽然这个方法在一定程度上适应了不同坡度的地形,但是其还是具有很高的冗余度和鲁棒性,有些地方还会出现识别缺失和识别错误。
注:若是对该方法感兴趣需要MATLAB源码,请及时联系我😊😊😊。
一、获取道路种子点集
通过LIDAR 360或者其他点云处理软件,多点提取在道路的点集seed(i) <i∈1 ~ n>,n并不是越大越好,越少会导致后续的识别信息丢失,过多或是程序效率缓慢,建议8~10个最为合适。
二、初始筛选点云确定路面点集
一)根据每个密集点云的高程,计算其到每一个道路点集的距离集合org_distance(i) <i∈1 ~ n>,
二)获取每个距离的最大值MAX(org_distance(i))<i∈1~n>,
三)添加限制因子G=0.005,其具体值可以采用G=M/N×100%(其中M表示路面区分与周围地貌的高度,N表示该地形的最大高差),
四)利用寻找distance(i) < G×MAX(org_distance(i) <i∈1~ n>时具备的点云集合pointCloud_base(i) <i∈1~n>,实现对点云的初次筛选。
三、计算点云密度衡量参数集合二次筛选
1)通过MATLAB自带函数findNeighborsInRadius获取每个点云集合pointCloud_base(i) <i∈1~n>中的每个点在指定半径的球形区域内所具有的领域点集下标位置indices(i) <i∈1 ~ n>。
(1)=====衡量参数一(geometric_density)=====以指定半径搜索3D邻域内计算该点的点云密度
计算下标indices(i) <i∈1 ~ n> 的长度既可获取每个点云集合pointCloud_base(i) <i∈1~n>在指定半径的球形区域内所具有的领域点数geometric_density(i) <i∈1 ~ n>。本文的R=6m,读者可根据具体情况进行调整。
(2)=====衡量参数二(slope)=====以指定半径搜索领域计算该点与其他点的最大坡度
计算每一个点与该半径球形区域内的其他点的坡度集合slope(i) <i∈1 ~ n>
(3)=====衡量参数三(distance)=====以指定半径搜索领域计算该点离其他点的最大距离
计算每一个点与该半径球形区域内的其他点的几何距离集合distance(i) <i∈1 ~ n>
2)通过计算满足限制条件的三个衡量的参数的点云集合,将第一步初始筛选的点集进行二次筛选。
3)如左下图所示,8个子图分别是将初始筛选的路面点集进行二次筛选的结果,其保留了最接近路面的点云。右下图则是具体筛选后与筛选前的差异。
|
|
四、识别结果
如下所示,即为路面识别的结果。
|
|
|
|