segmentLidarData

段组织3-d范围内的数据为簇

描述

标签= segmentLidarData(ptClouddistThreshold段组织3-d范围内的数据ptCloud成集群。功能分配的整数簇标签在点云的每个点并返回的所有点的簇标签标签

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

标签= segmentLidarData(ptClouddistThresholdangleThreshold设置角度约束进行分组的点到同一集群angleThreshold

[标签numClusters] = segmentLidarData(___也返回簇的数目。

例子

全部收缩

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

LDR =零(5100);LDR(:,1:50)= 10;LDR(:,51:端)= 20;节距= linspace(-18,18,5);节距= repmat(间距”,1100);偏航= linspace(-90,90,100);偏航= repmat(偏航,5,1);

转换为笛卡尔坐标。

X = LDR * COSD(间距)*信德(偏航)。;Y = LDR * COSD(间距)* COSD(偏航)。;。Z = LDR *信德(间距);PC =点云(猫(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'

成立了PCAP文件阅读器。

veloReader = velodyneFileReader('lidarData_ConstructionRoad.pcap''HDL32E');

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

veloReader.CurrentTime = veloReader.StartTime +秒(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)颜色表([HSV(numClusters); [0 0 0]])标题(“点云集群”

输入参数

全部收缩

点云,指定为点云目的。ptCloud是一个有组织的点云,存储点坐标在中号-通过-ñ-by-3矩阵。点必须由俯仰角和方位角以顺序扫描次序被组织,如通常由激光测距仪或返回velodyneFileReader

世界单位距离阈值,指定为非标。相邻点分组为同一群集如果它们之间的距离小于距离阈值。为了减少输出的簇的数目,增加的值distThreshold

数据类型:|

角阈值,以度为单位,指定为[0,180]的范围内的标量。为了减少输出的簇的数目,减少的值angleThreshold。功能组中的相邻点到相同的簇如果由传感器和点形成的角度为比角度阈值。例如,在该图中,功能组A和B点到同一集群如果由传感器,点A,点B形成的角度,大于angleThreshold。有关详细信息,请参阅算法

数据类型:|

输出参数

全部收缩

在点云中所有点的类群标签ptCloud,返回一个中号-通过-ñ矩阵的整数。在每个有效点ptCloud属于一个集群。集群中的所有点都分配相同的整数簇标签,从1numClusters。无效的点,如用点天道酬勤要么为NaN坐标,分配标签0

有效点的群数,返回一个非负整数。簇的数目不包括对应于无效点群集。

算法

segmentLidarData函数使用的距离和角度的阈值进行聚类相邻点。的函数组中的两个相邻点到相同的簇,如果他们的欧几里得距离小于输入distThreshold或者,如果传感器和相邻点之间的角度大于或等于输入angleThreshold。如果没有指定angleThreshold,函数设置这个角度来度。

例如,假设angleThreshold设定为90。因为角度α和β在图中都大于90度的规定的阈值时,功能组分A,B,和C为同一群集。因为角度σ小于90度的阈值,则功能组点d到一个单独的集群。每个角度为聚类函数使用由线从一个点到传感器并从该相同点到相邻点的线所形成

参考

[1] Bogoslavskyi,一,“高效的在线分割为稀疏三维激光扫描”。杂志摄影测量,遥感与地球信息科学。卷。85,第1期,2017年,第41-52。

扩展功能

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

介绍了在R2018a