一种基于多视角和体素化的树状作物三维点云分割方法
文献发布时间:2024-04-18 19:58:26
技术领域
本发明涉及激光点云数据处理技术领域,尤其是一种基于多视角和体素化的树状作物三维点云分割方法。
背景技术
激光雷达LiDAR已经越来越多的应用在物体检测中,它可以发射激光脉冲并通过计算从发射到返回的时间间隔来确定物体到自身的距离,从而获得高密度的3D点云数据。LiDAR获取的三维点云数据能够较好地描述作物冠层的轮廓和高度,且几乎不受太阳辐射、空气温湿度、背景温度及光照变化等环境因子的影响,所以在农作物冠层高度检测中有比较好的应用前景。
由于农业观测中也有对果树这种类树状的作物的观测要求,对于这种类型的农作物,三维点云表征的冠层是比较明显的呈现树株与树株之间的分离状态,所以参考整个观测区域内的冠层高度来获得对单树株冠层高度的表征就变得不适用了。
发明内容
本发明人针对上述问题及技术需求,提出了一种基于多视角和体素化的树状作物三维点云分割方法,本发明的技术方案如下:
一种基于多视角和体素化的树状作物三维点云分割方法,包括如下步骤:
获取观测区域中树状作物的三维点云数据,投射到地平面得到俯视角的冠层高度图;
在冠层高度图中识别出树顶位置,并基于分水岭算法对冠层高度图进行粗分割,得到多个树冠边界;
提取每个树冠边界对应的点云数据并生成侧视角的激光距离图,依次遍历激光距离图中每两个相邻测点确认是否来自同一树株,以对激光距离图进行单树株分割;
从已分割的激光距离图和/或冠层高度图中提取不同树株间的相邻重叠区域的点云数据并构建三维体素结构,基于Ncut法对三维体素结构进行精细化分割,并与俯视角和侧视角的分割结果进行合并得到最终的单树株点云分割结果。
本发明的有益技术效果是:
该方法采用了俯视图和侧视图相结合的方式,先对观测区域的树簇进行初步定位和分割,即将明显分离的树株定位并粗分割,再对初步分割结果进行体素化的精细分割,即将俯视图和/或侧视图的粗分割结果中的重叠部分基于权重更新后的Ncut法进行精细分割,合并这三种分割结果从而得到最终的单株作物点云。经过分割后的单株作物点云,比通用的方法更加精确,为后续作物高度、冠径等观测量的计量提供了基础。
附图说明
图1是本申请提供的基于多视角和体素化的树状作物三维点云分割方法流程图。
图2(a)是本申请提供的冠层高度原图,图2(b)为滤波处理后的冠层高度图。
图3(a)是本申请提供的冠层高度图中搜索树顶位置的示意图,图3(b)为点云密度图中搜索树顶优选位置的示意图。
图4(a)是本申请提供的基于分水岭算法标记的树顶位置的示意图,图4(b)为基于分水岭算法得到的多个树冠边界示意图。
图5(a)是本申请提供的一个树冠边界对应的点云的三维侧视图,图5(b)为对应的侧视角的激光距离图。
图6是本申请提供的对激光距离图的分割示意图。
图7是本申请提供的两个激光束建立的角度测量计算的示意图。
图8是本申请提供的八叉树结构的内部点云分布示意图。
图9是本申请提供的点云体素精细化分割示意图。
具体实施方式
下面结合附图对本发明的具体实施方式做进一步说明。
请参考图1所示,本实施例提供了一种基于多视角和体素化的树状作物三维点云分割方法,包括如下步骤:
步骤1:获取观测区域中树状作物的三维点云数据,投射到地平面得到俯视角的冠层高度图。
其中,冠层高度图是三维点云的二维投射,它消除了地形的起伏对冠层高度的影响,从而反映了冠层高度的波动,如图2(a)所示。
步骤2:在冠层高度图中识别出树顶位置,包括如下分步骤:
步骤2.1:对冠层高度图进行滤波处理。
由于生成的冠层高度图中包含噪声可能影响局部最大值的确定,因此本实施例优选使用固定半径大小的圆形高斯滤波器来平滑冠层高度图以减轻噪音,以此生成了高斯平滑冠层高度图,如图2(b)所示。可选的,也可以选用其他滤波效果较好的滤波器进行平滑滤波,本申请对此不做具体限制。
步骤2.2:在滤波后的冠层高度图中通过滑动窗口搜索局部最大值作为单株树顶的位置信息,并利用点云密度图进行修正。
由于作物的点云有时候会表现出以下特征:(1)树株顶点的高度没有明显高于其他部分树冠;(2)树株歪斜导致树的高点偏离树冠的中心;(3)树株与树株之间间隔太小导致部分树冠相连。因为局部最大值的选定对于分割的结果有很重要的影响,所以为了避免上述情况发生,本实施例先在高斯平滑冠层高度图中选取相对大范围(即至少大于单树株)的局部最大值来进行第一步的粗分割,获得多株作物的聚集区域。然后,缩小滑动窗口来获得单株树顶的信息,如图3(a)中的三个点分别表示一个树株的树顶。
只从冠层高度图中获取的单株树顶信息并不准确,而单个树冠的顶点位置通常在点云密度最高的格栅中,如图3(b)所示。所以在本实施例中,在滤波后的点云密度图中通过滑动窗口搜索局部最大值得到单株树密度最大的格栅位置,将该栅格位置作为单株树顶的优选位置,再按照树顶优选位置对冠层高度图中搜索到的单株树顶的位置信息进行修正。
步骤3:基于分水岭算法对冠层高度图进行粗分割,得到多个树冠边界。
在本实施例中,将上一步得到的修正后的单株树顶的位置信息标记为分水岭算法中的海拔最低点,接着按照现有分水岭算法的实现方式得到分水岭线,从而在冠层高度图上产生一组粗略分割的树状作物部分,分割结果如图4所示,在图4(a)中各个树顶用点来标记,在图4(b)中树冠边界以多边形突出显示。
步骤4:提取每个树冠边界对应的点云数据并生成侧视角的激光距离图,依次遍历激光距离图中每两个相邻测点确认是否来自同一树株,以对激光距离图进行单树株分割。
由于激光雷达采集的点云不光有冠层顶面的信息同时也有侧面的信息,因此将上一步粗分割后的点云还原成三维侧视角度,如图5(a)所示,通过点云侧视的视角来进行进一步的单株作物定位的修正。具体包括:首先生成三维侧视角度点云的激光距离图,如图5(b)所示,单株分割的关键在于确定距离图中测量点与测距原点O形成的激光束是否来自同一树株。然后从激光距离图的搜索起始点开始按规定顺序遍历每个测点,当遇到未标记的测点时,对该测点进行广度优先搜索,目标是标记与该测点属于同一树株的所有测点,并赋予相同的标签,直至激光距离图中的所有测点均已标记,按照标签输出对激光距离图进行单树株分割的结果,如图6所示。可以看到其中有一些作物相邻的区域,下一步,将对这些相邻重叠区域的三维点云进行更加精细的分割。
其中,对该测点进行广度优先搜索包括:
<1>建立搜索队列并将未标记的测点推送至搜索队列中;
<2>若搜索队列不为空,则依次遍历队列中的元素;否则继续按顺序遍历激光距离图的下一测点,直至到达新的未标记的测点;
<3>对于当前元素邻域的每一测点,基于角度测量形式确定当前元素与邻域测点是否来自同一树株,包括:
在当前元素与邻域测点中取距离测距原点更远的点与测距原点连线,计算该连线和当前元素与邻域测点连线之间的角度β,若大于设定阈值θ,则认为当前元素与邻域测点来自同一树株;若不大于设定阈值θ,则认为当前元素与邻域测点来自不同树株,继续遍历队列中的下一元素。
如图7所示,假设A、B点分别为当前元素和其邻域的任一测点,则A、B的坐标在以测距原点O为中心且y轴沿两个激光束OA、OB中较长的一个坐标系中,要求取的角度β为OA、AB之间的夹角。根据激光测距的性质,距离||OA||对应于第一个激光束,测量值记为d
其中,
通常角度β对大多数物体来说都相对较大,只有在给定距离图的相邻测点之间的深度差显著大于激光束的角度增量带来的深度差。即基于角度测量形式就是通过比较β和θ之间的大小,来决定把距离图中的两点划分为两个簇或将合并为一个簇。若β不大于θ,则认为深度的变化太大,两个点指向不同的树株。
可选的,本实施例中设置的搜索起始点为从距离图的左上角测点开始,按照从上到下、从左到右的顺序经过每个测点。规定当前元素邻域由当前元素的上、下、左、右这四个测点组成。
<4>将来自同一树株的邻域测点推送至搜索队列中,并赋予与当前元素相同的标签视为已标记,从队列中删除当前元素。
步骤5:从已分割的激光距离图和/或冠层高度图中提取不同树株间的相邻重叠区域的点云数据并构建三维体素结构。
与机载激光雷达相比,地面农气站的激光点云数据具有更高的点密度,所以可以更详细地描述树结构细节,因此,建立一个空间索引可以实现更好的点云的处理。本实施例优选构建八叉树结构,为了减少现有的八叉树结构中的膨大型节点,本申请提出了一个内部点云分布规则,以此确定是否需要继续拆分。具体包括:
步骤5.1:根据前面俯视角和侧视角的分割信息,提取激光距离图和/或冠层高度图中不同树株间的相邻重叠区域的点云数据构建根节点。下面以步骤4输出的已分割的激光距离图为例进行详细说明:
首先根据已分割的激光距离图中不同树株间的相邻重叠区域的点云数据,得到点云分布在XYZ方向的极限值(MaxX、MinX、MaxY、MinY、MaxZ、MinZ)。
然后取(MinX、MinY、MinZ)作为根节点的左下角位置点,根节点的边长
设置为:Size
其中,MaxD=Max[(MaxX-MinX),(MaxY-MinY)],根据不等式求得N的具体数值。则建立的根节点为立方体空间结构,将所有点云添加到根节点中。
步骤5.2:构建工作节点队列并将根节点推送至工作节点队列中。
步骤5.3:若工作节点队列不为空,则依次遍历队列中的元素,进入步骤5.4。若工作节点队列为空,则输出八叉树结构,将八叉树结构的每个叶节点视为一个体素,从而得到三维体素结构。
步骤5.4:若当前元素的边长不大于预定最小节点边长,则将当前元素标记为叶节点,并从队列中删除,回到步骤5.3继续遍历队列中的下一元素;否则进入5.5。
步骤5.5:若当前元素的边长大于预定最小节点边长,且当前元素的点云数大于预定最小点数,则进入步骤5.7,否则进入步骤5.6。
步骤5.6:若当前元素的边长大于预定最小节点边长,且当前元素的点云数不大于预定最小点数,则根据当前元素的内部点云分布规则确定是否继续拆分当前元素。
具体的,假设将当前元素划分为八个等容子节点,根据搜索到的空子节点确定当前元素内的点云分布情况,比如,若搜索到的空子节点中存在四个共面的空子节点,则认为当前元素内的点云分布在另一侧,如图8所示。若点云只分布在当前元素的一侧或特定位置角落,则进入步骤5.7;否则点云视为随机分布,进入步骤5.4中的将当前元素标记为叶节点的步骤。
步骤5.7:将当前元素划分为八个等容子节点,更新每个等容子节点的点云,将非空子节点推送至队列中,并将当前元素从队列中删除,回到步骤5.3继续遍历队列中的下一元素。
通过上述方法使得膨大型节点中边界类型的节点会更少的出现,在对象的边界区域节点的平均位置精度会得到改善。
步骤6:基于Ncut法对三维体素结构进行精细化分割,并与俯视角和侧视角的分割结果进行合并得到最终的单树株点云分割结果。
在点云体素化之后,根据前面俯视角和侧视角的分割信息,本申请采用Ncut分割方法来对重叠区域的体素进行分割。具体包括:构建加权图G={V,E},其中V表示加权图中节点的集合,节点为三维体素结构中的每个体素;E表示加权图中节点间连线的边集合,每条边的权重w
Ncut的目的是将图G切割成两个不相交的节点部分C和D,即通过最大化C和D内部节点的相似性同时最小化C和D之间的节点相似性。常规表达式为:
其中,cut(C,D)=∑
然而现有的单树分割Ncut方法有两个缺点。第一,个体的完整性,如果点集包含多于两棵树,从全局的成本来分割,可能出现将单株强行一分为二,从而破坏了单株树的完整性。第二,节点相似度只考虑了距离因子,增加了树枝顶端的分割误差。
为了克服上述缺点,本实施例改进了在八叉树结果上进行Ncut的分割方法,仅在重叠区域进行分割。一方面,前面步骤获得的单个树冠的信息可以让单株树冠完整性得到保证,另一方面,可以大幅减少计算量。则本申请设计的每条边的权重w
其中,
用式(4)提供的w
需要说明的是,本申请提出的基于Ncut法进行精细化分割不局限于基于侧视图相邻重叠区域生成的三维体素结构,还可以对步骤3输出的基于俯视图的不同树冠边界的相邻重叠区域的点云,按照步骤5的方法生成相应的三维体素结构,并对其按照步骤6的方法进行精细化分割。
以上所述的仅是本申请的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的精神和构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本发明的保护范围之内。
- 一种基于图像的三维激光扫描点云数据的分割方法
- 一种基于点体素联合的三维点云语义分割方法
- 一种基于体素和图卷积的三维点云语义分割方法