主要内容

segmentLidarData

段组织三维数据范围到集群

描述

例子

标签= segmentLidarData (ptCloud,distThreshold)段组织三维数据范围ptCloud成簇。函数分配一个整数集群标签点云中的每个点并返回集群中的所有点的标签标签

函数组两个相邻点到相同的集群如果他们的欧几里得距离小于distThreshold如果传感器和两个相邻点之间的角度是至少5度。

例子

标签= segmentLidarData (ptCloud,distThreshold,angleThreshold)设置角度约束分组分在同一个集群angleThreshold

(标签,numClusters)= segmentLidarData (___)还返回集群的数量。

(___)= segmentLidarData (___NumClusterPoints =[1,正])还设置最小和最大数量的点在每个集群,指定为一个2-element向量或作为一个标量值。当你指定NumClusterPoints作为一个标量,集群中的点的最大数量是不受限制的。这个函数设置标签0当集群指定范围之外的。

例子

全部折叠

创建组织合成的激光雷达数据包含两个对象。

异地恋= 0 (5100);异地恋(:,1:50)= 10;异地恋(:,51:结束)= 20;距= linspace(5) -18年,18日;距= repmat(音高”,1100);偏航= linspace (-90、90100);偏航= repmat(偏航、5、1);

笛卡尔坐标转换。

X =异地恋。* cosd(球场)。*信德(偏航);Y =异地恋。* cosd(球场)。* cosd(偏航);Z =异地恋。*信德(沥青);电脑= pointCloud(猫(3,X, Y, Z));图pcshow (pc.Location,“r”)标题(“未聚集的点云”)

图包含一个坐标轴对象。坐标轴对象与标题未聚集的点云包含一个散射类型的对象。

设置阈值。

distThreshold = 5;

激光雷达数据。

标签= segmentLidarData (pc, distThreshold);

策划的结果。

图保存标题(“分段集群”)pc1 =选择(pc,找到(标签= = 1));pcshow (pc1.Location‘g’)pc2 =选择(pc,找到(标签= = 2));pcshow (pc2.Location“y”)

图包含一个坐标轴对象。坐标轴对象2标题分段集群包含对象类型的散射。

设置PCAP文件阅读器。

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

等待0.3秒从一开始的文件,然后读取下一帧的点云。

veloReader。CurrentTime = veloReader。开始时间+秒(0.3);ptCloud = readFrame (veloReader);

段和删除地上飞机。

groundPtsIdx = segmentGroundFromLidarData (ptCloud);ptCloudWithoutGround =选择(ptCloud ~ groundPtsIdx,“OutputSize”,“全部”);

集群剩余的点。是米的距离。

distThreshold = 0.5;[标签,numClusters] = segmentLidarData (ptCloudWithoutGround distThreshold);

添加一个额外的标签为地平面。

numClusters = numClusters + 1;标签(groundPtsIdx) = numClusters;

图标注的结果。显示黑色的地平面。

labelColorIndex =标签+ 1;pcshow (ptCloud.Location labelColorIndex) colormap ([hsv (numClusters);[0 0 0]])标题(“点云集群”)

图包含一个坐标轴对象。坐标轴对象与标题点云集群包含一个散射类型的对象。

输入参数

全部折叠

点云,指定为一个pointCloud对象。ptCloud是一个有组织的点云存储在一个点坐标吗——- - - - - -N3矩阵。点必须由俯仰和偏航角顺序扫描顺序,这是通常从激光测距仪和获得velodyneFileReader

距离阈值在世界单位,指定为负的标量。相邻点分成相同的集群如果它们之间的距离小于阈值的距离。减少输出簇的数量,增加的价值distThreshold

数据类型:|

角阈值,在度,指定为一个标量在[0,180]。减少输出簇的数量,减少的价值angleThreshold。函数组相邻点到相同的集群如果形成的角度传感器和角点大于阈值。例如,在图中,函数组A和B点到相同的集群如果形成的角度传感器,A点和B点,是大于angleThreshold。更多细节,请参阅算法

数据类型:|

输出参数

全部折叠

集群中的所有点的标签云ptCloud,作为一个返回——- - - - - -N矩阵的整数。每个有效点ptCloud属于一个集群。集群中的所有点被分配相同的整数集群标签,从1numClusters。无效点,如点坐标,分配标签0

数量的集群,作为一个正整数返回。集群不包括集群的数量对应于无效点,排除了标签的值,0,这是留给无效点。

算法

segmentLidarData函数使用集群邻近点的距离和角度阈值。函数组两个相邻点到相同的集群如果欧几里得距离小于输入distThreshold如果传感器和相邻点之间的角度大于或等于输入angleThreshold。如果你不指定angleThreshold这个角,函数集5度。

例如,假设angleThreshold被设置为90年。因为角度α和β的图都是大于90度的指定的阈值,函数组点A, B, C到相同的集群。因为σ角度小于90度阈值,函数组D点到一个单独的集群。每个角的函数使用集群形成的线从一个点到传感器和线从同一点的邻近点

引用

[1]Bogoslavskyi,即“高效的在线分割稀疏三维激光扫描。”《摄影测量、遥感和地质信息科学。北京大学出版社85年版,2017页41-52。

扩展功能

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

版本历史

介绍了R2018a