主要内容

semmentlidardata.

分段将3-D范围数据组织成群集

描述

例子

标签= segmentlidardata(Ptcloud.Distthreshold.细分组织了3-D范围数据Ptcloud.成簇。该函数为点云中的每个点分配一个整数集群标签,并返回所有点的集群标签标签

如果两个相邻点的欧几里得距离小于,则函数将它们归为同一簇Distthreshold.或者传感器与两个相邻点之间的角度至少为5度。

例子

标签= segmentlidardata(Ptcloud.Distthreshold.anglethreshold.设置将点分组到同一簇的角度约束为anglethreshold.

[标签numClusters) = segmentLidarData (Ptcloud.,'numclusterpoints',minmaxncp.指定每个群集中的最小和最大点数。

[___) = segmentLidarData (___也返回集群的数量。

例子

全部折叠

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

LDR =零(5,100);LDR(:,1:50)= 10;LDR(:,51:结束)= 20;间距= Linspace(-18,18,5);间距= Repmat(音高',1,100);yaw = linspace(-90,90,100);yaw = repmat(偏航,5,1);

转换到笛卡尔坐标。

X = ldr .* cosd(俯仰).* sind(偏航);Y = ldr .* cosd(俯仰).* cosd(偏航);Z = ldr .* sind(间距);电脑= pointCloud(猫(3,X, Y, Z));图pcshow(电脑。的位置,'r')标题(“未聚集的点云”

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

设置阈值。

Distthreshold = 5;

分割LIDAR数据。

Labels = SegmentLidardata(PC,Distthreshold);

绘制结果。

图保存标题(“分段集群”)PC1 =选择(PC,查找(标签== 1));pcshow(pc1.location,'G') pc2 = select(pc,find(标签== 2));pcshow (pc2。的位置,“y”

图中包含一个坐标轴。具有标题分段簇的轴包含2个类型的散射物。

设置PCAP文件阅读器。

Veloreader = Velodynefilereader(“lidarData_ConstructionRoad.pcap”“HDL32E”);

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

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

段并取下地面平面。

地下室id = segmentgroundfromlidardata(ptcloud);ptcloudwithoutground = select(ptcloud,〜partinptsidx,'输出'“全部”);

群集剩余点。距离为米。

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

为接地平面添加其他标签。

numclusters = numflusters + 1;标签(地面)= numflusters;

绘制标记的结果。显示黑色的地面平面。

labelColorIndex =标签+ 1;pcshow(ptCloud.Location,labelColorIndex) colormap([hsv(numClusters);[0 0 0]) title('点云簇'

图中包含一个坐标轴。具有标题点云集群的轴包含类型分散的对象。

输入参数

全部折叠

点云,指定为pointCloud对象。Ptcloud.存储点坐标的有组织的点云m——- - - - - -N3矩阵。这些点必须按照顺序扫描的顺序由俯仰和偏航角度组织起来,这通常是由激光测距仪和激光测距仪获得的Velodynefilereader.

世界单位的距离阈值,指定为非负标量。如果它们之间的距离小于距离阈值,则相邻点被分组成相同的群集。要减少输出集群的数量,增加值Distthreshold.

数据类型:单身的|

以度为单位的角度阈值指定为范围的标量[0,180]。要减少输出集群的数量,请降低值anglethreshold..如果由传感器和点形成的角度大于角度阈值,则该功能组相邻的点进入相同的簇。例如,在该图中,如果由传感器,点A和点B形成的角度大于的角度,则功能将A和B指向相同的群集中anglethreshold..有关详细信息,请参见算法

数据类型:单身的|

每个聚类中最小和最大的点数,指定为形式为[minPointsmaxPoints].当你指定minmaxncp.作为一个标量值,该函数不限制每个聚类中的最大点数。函数将标号值赋给0.对于发现在指定范围之外的群集。

输出参数

全部折叠

点云中所有点的群集标签Ptcloud.,返回为m——- - - - - -N矩阵的整数。每个有效点Ptcloud.属于集群。集群中的所有点都被分配相同的整型集群标签,范围从1numClusters.无效的点,例如点坐标,被分配了标签0.

群集数量,作为正整数返回。群集的数量不包括对应于无效点的群集并排除标签值,0.,为无效分数保留。

算法

semmentlidardata.函数使用距离和角度阈值对相邻点进行聚类。如果两个相邻点的欧几里得距离小于输入,函数将它们分组成同一簇Distthreshold.或者传感器与相邻点之间的角度大于或等于输入anglethreshold..如果没有指定anglethreshold.,函数将这个角设为5.程度。

例如,假设anglethreshold.被设置为90.因为图中的角度α和β都大于90度的指定阈值,所以功能组点A,B和C进入同一集群。因为角度σ小于90度阈值,所以功能组将d指向单独的簇。每个角度对于聚类的每个角度由来自传感器到传感器的点和线路从相同点到相邻点的线形成

参考文献

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

扩展能力

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

在R2018A介绍