主要内容

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)

图中包含一个轴对象。axis对象包含一个散点类型的对象。

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

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

显示非地面点云团。

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

图中包含一个轴对象。标题为Point Cloud Clusters的轴对象包含一个类型为scatter的对象。

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

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

使用pc播放器创建一个点云播放器。定义它的x-,y- - - - - -,z-axes限制,单位为米,并标记其轴。

Xlimits = [-40 40];Ylimits = [-15 15];Zlimits = [-3 3];球员= pcplayer (xlimits ylimits zlimits);

标记pcplayer轴。

包含(球员。轴,“X (m)”) ylabel(球员。轴,“Y (m)”) zlabel(球员。轴,“Z (m)”

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

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

迭代Velodyne PCAP文件中的前200个点云,使用readFrame读取数据。从每个点云分割地点。将所有接地点涂成绿色,非接地点涂成红色。绘制得到的激光雷达点云。

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

图点云播放器包含一个轴对象。以“激光雷达点云分割地平面”为标题的轴对象包含一个散点类型的对象。

输入参数

全部折叠

点云,指定为pointCloud对象。ptCloud是一个有组织的点云,存储[xyz点的坐标——- - - - - -N3矩阵。

名称-值参数

例子:“ElevationAngleDelta”,5

用于识别地面点的仰角差阈值,指定为非负标量。该功能计算一个标记的地点和它的四个相连的邻居之间的仰角差。如果差值低于阈值,邻域点被标记为接地。典型值ElevationAngleDelta在[5,15]度范围内。增加这个值以包含更多来自不平地面的点。

初始仰角阈值,用于识别扫描线中最接近激光雷达传感器的接地点,指定为非负标量。当仰角低于此值时,该函数将一个点标记为地面。典型值InitialElevationAngle在15到30度的范围内。

输出参数

全部折叠

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

参考文献

Bogoslavskyi, I.《稀疏三维激光扫描的高效在线分割》。摄影测量、遥感与地理信息科学学报.第85卷第1期,2017年,第41-52页。

扩展功能

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

介绍了R2018b