segmentGroundFromLidarData

从组织好的激光雷达数据中分割出地面点

描述

例子

groundPtsIdx= segmentGroundFromLidarData (ptCloud)分段组织三维激光雷达数据,ptCloud,分为地面和非地面部分。激光雷达传感器必须水平安装,以便在激光雷达扫描中观察到离传感器最近的所有地面点。

groundPtsIdx= segmentGroundFromLidarData (ptCloud,名称,值)使用一个或多个名称-值对设置属性。将每个属性名括在引号中。例如,segmentGroundFromLidarData (ptCloud ElevationAngleDelta的5)

例子

全部折叠

从一个有组织的激光雷达点云中分割地面点和非地面点。从这些分割创建有组织的点云,并显示它们。

加载一个有组织的激光雷达,点云。

ld =负载(“drivingLidarPoints.mat”);

从组织好的激光雷达点云中分割出地面点。

groundPtsIdx = segmentGroundFromLidarData (ld.ptCloud);

方法创建只包含这些地面点的有组织的点云选择函数。显示这个点云。

groundPtCloud =选择(ld.ptCloud groundPtsIdx);图pcshow (groundPtCloud)

创建一个只包含非地面点的有组织的点云。指定0.5米的阈值。

nonGroundPtCloud =选择(ld.ptCloud ~ groundPtsIdx,“OutputSize”,“全部”);distThreshold = 0.5;[标签,numClusters] = segmentLidarData (nonGroundPtCloud distThreshold);

显示非地面点云团。

figure colormap(hsv(numClusters)) pcshow(nonGroundPtCloud.Location, tags)“点云集群”)

将Velodyne PCAP®加载到工作空间。

velodyneFileReaderObj = velodyneFileReader (“lidarData_ConstructionRoad.pcap”,“HDL32E”);

使用pcplayer创建点云播放器。定义它的x- - - - - -,y- - - - - -,z-轴的极限,以米为单位,并标记它的轴。

xlimits = [- 4040];ylimits = [-15];zlimits = [-3];球员= pcplayer (xlimits ylimits zlimits);

标记pcplayer坐标轴。

包含(player.Axes“X (m)”)ylabel (player.Axes“Y (m)”)zlabel (player.Axes“Z (m)”)

设置标记点的颜色映射。使用RGB三联图指定地面点为绿色,障碍点为红色。

颜色= [0 1 0;1 0 0];greenIdx = 1;redIdx = 2;

使用以下命令遍历Velodyne PCAP文件中的前200个点云readFrame读取数据。从每个点云分割地面点。将所有地面点涂成绿色,非地面点涂成红色。绘制由此产生的激光雷达点云。

colormap (player.Axes、颜色)标题(player.Axes,“激光雷达点云分段地平面”);i = 1: 200读取当前帧。ptCloud = velodyneFileReaderObj.readFrame(我);创建标签数组。colorLabels = 0(大小(ptCloud.Location, 1),大小(ptCloud.Location 2));找到地面点。groundPtsIdx = segmentGroundFromLidarData (ptCloud);地图颜色地面指向绿色。colorlabel (groundPtsIdx (:)) = greenIdx;将非地面点的颜色映射为红色。colorlabel (~groundPtsIdx (:)) = redIdx;%绘制结果。视图(球员,ptCloud.Location colorLabels)结束

输入参数

全部折叠

点云,指定为apointCloud对象。ptCloud是一个有组织的点云,它存储[x,y,z的点坐标——- - - - - -N3矩阵。

名称-值对的观点

例子:“ElevationAngleDelta”, 5

用于识别地面点的高程角差阈值,指定为非负标量。该函数计算一个标记的地面点与其4个相邻点之间的仰角差。如果差值低于阈值,则将邻域点标记为ground。典型值ElevationAngleDelta在[5,15]度范围内。增加这个值,以包含更多的点从不平的地面表面。

初始仰角阈值,用来识别离激光雷达传感器最近的扫描线上的地面点,指定为非负标量。当仰角低于此值时,函数将该点标记为地面。典型值InitialElevationAngle在15度和30度之间。

输出参数

全部折叠

地面点索引,返回为——- - - - - -N逻辑矩阵。元素与真正的值,1,表示地面点。元素与值,0,表示非地面点。

参考文献

Bogoslavskyi, I. "有效的在线分割稀疏三维激光扫描"。摄影测量、遥感和地球信息科学杂志。第85卷,2017年第1期,第41-52页。

扩展功能

C / c++代码生成
使用MATLAB®编码器™生成C和c++代码。

介绍了R2018b