主要内容

semmentlidardata.

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

描述

例子

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

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

例子

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

[标签numflusters.] = 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(音高);PC = POINCLOUD(猫(3,x,y,z));图pcshow(pc.location,'r') 标题('未乱七的点云'

图包含轴。标题未刻板点云的轴包含类型散射的对象。

设置阈值。

Distthreshold = 5;

分割LIDAR数据。

Labels = SegmentLidardata(PC,Distthreshold);

绘制结果。

图持有标题('分段簇')PC1 =选择(PC,查找(标签== 1));pcshow(pc1.location,'G')PC2 =选择(PC,查找(标签== 2));pcshow(pc2.location,'是'

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

设置PCAP文件阅读器。

Veloreader = Velodynefilereader('lidardata_constructionsroad.pcap''hdl32e');

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

Veloreader.Currenttime = Veloreader.startTime +秒(0.3);ptcloud = Readframe(Veloreader);

段并取下地面平面。

地下室id = segmentgroundfromlidardata(ptcloud);ptcloudwithoutground = select(ptcloud,〜partinptsidx,'输出''满的');

群集剩余点。距离为米。

Distthreshold = 0.5;[标签,numflusters] = SegmentLidardata(Ptcloudwithoutground,Distthreshold);

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

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

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

LabelColorIndex =标签+ 1;pcshow(ptcloud.location,labelcolorIndex)ColorMap([HSV(Numflusters); [0 0 0]])标题('点云簇'

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

输入参数

全部收缩

点云,指定为apointcloud.目的。Ptcloud.是一个有组织的点云,可以在一个中存储点坐标m-经过-N-By-3矩阵。必须通过顺序扫描顺序通过音调和偏航角来组织点,该顺序通常从激光测距仪和Velodynefilereader.

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

数据类型:单身的|双倍的

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

数据类型:单身的|双倍的

每个群集中的最小点数和最大点数,指定为标量或表格的2元素向量[迈克斯maxpoints.]。当您指定时minmaxncp.作为标量值,该函数不会限制每个群集中的最大点数。该函数分配标签值0.对于发现在指定范围之外的群集。

输出参数

全部收缩

点云中所有点的群集标签Ptcloud.,返回一个m-经过-N整数矩阵。每个有效点Ptcloud.属于群集。群集中的所有点分配相同的整数群集标签,范围1numflusters.。无效的点,例如点INF.或者坐标,被分配了标签0.

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

算法

semmentlidardata.函数使用距离和角度阈值来聚类相邻点。如果它们的欧几里德距离小于输入,则该函数将两个相邻点分为同一群集Distthreshold.或者,如果传感器和相邻点之间的角度大于或等于输入anglethreshold.。如果您未指定anglethreshold.,该功能将此角度设置为5.程度。

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

参考

[1] Bogoslavskyi,I。“稀疏3D激光扫描的高效在线分割。”摄影测量,遥感与地理信息科学学报。卷。85,第1,2017号,第41-52页。

扩展能力

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

在R2018A介绍