主要内容

空中激光器数据的地形分类

这个示例向您展示了如何在航空激光雷达数据中分割和分类地面、建筑和植被。该示例使用机载激光雷达系统捕获的LAZ文件作为输入。首先,将LAZ文件中的点云数据分为地面点和非地面点。然后,根据法线和曲率特征,进一步将非接地点分为建筑点和植被点。该图提供了该流程的概述。

加载和可视化数据

从LAZ文件加载点云数据和相应的地面真理标签,aerialLidarData.laz从开放的地形数据集获得[1].点云由各种类别组成,包括地面、建筑和植被。将点云数据和相应的地面真值标签加载到工作区中readPointCloud.对象功能拉斯菲尔德尔对象。可视化点云,根据地面真实值标签用颜色编码,使用pcshow功能。

lazfile = fullfile (toolboxdir ('lidar'),'lidardata''las'“aerialLidarData.laz”);从文件中读取LAZ数据Lazreader = Lasfilereader(Lazfile);%读点云和相应的地面真理标签[ptcloud,pointAttributes] = ReadPointCloud(Lazreader,......'属性'“分类”);grdtruthlabels = pointAttributes.classification;%可视化输入点云与相应的地面真相标签图pcshow (ptCloud.Location grdTruthLabels)标题('空中激光器数据与地面真相'的)

图中包含一个轴对象。具有标题的轴对象与地面真相的标题鸟瞰图数据包含一个类型分散的对象。

地面分类

地面的分类是将输入点云分割为地面和非地面的预处理步骤。将LAZ文件加载的数据分割为地面和非地面点功能。

[groundPtsIdx, nonGroundPtCloud groundPtCloud] = segmentGroundSMRF (ptCloud);%分别用绿色和品红显示地面和非地面点图pcshowpair (nonGroundPtCloud groundPtCloud)标题('分类地面和非接地点'的)

图中包含一个轴对象。标题为“分类地面和非地面点”的轴对象包含2个散点类型的对象。

特征提取

使用点云提取特征helperExtractFeatures功能。所有帮助函数都将其附加到此示例中作为支持文件。金宝app辅助功能估计点云中每个点的正常和曲率值。这些特征通过将其与其邻域中的点相关联来提供各个点的基础结构信息。

您可以指定要考虑的邻居数量。如果邻居数量过低,helper函数将覆盖植被点。如果邻居的数量过多,建筑和植被之间就没有明确的边界,因为建筑点附近的植被点分类错误。

邻居= 10;(法线曲率,neighInds] = helperExtractFeatures (nonGroundPtCloud,......邻居);

建筑和植被分类

辅助功能使用法线和曲率的变化来区分建筑物和植被。与植被相比,建筑物更加平坦,因此曲率的变化和邻居之间的法线的相对差异对属于建筑物的点较少。与建筑物相比,植被点更散落,导致曲率的变化较高。这螺旋扫描功能将非地面点分为建筑和植被。helper函数根据以下标准将点分类为构建:

  • 每个点的曲率必须小,在指定的曲率阈值内,Curvethresh.

  • 相邻点必须具有相似的法线。相邻法线之间的余弦相似度必须大于指定的正常阈值,普通的

不满足上述标准的点被标记为植被。helper函数将属于植被的点标记为1和建筑物2

%指定正常阈值和曲率阈值normalThresh = 0.85;curveThresh = 0.02;将点分为建筑和植被标签=升降术(法线,曲率,附近,......narmalthresh,curvethresh);

从地面真实标签数据中提取建筑物和植被类标签。随着LAZ文件有很多课程,您必须首先隔离地面,建筑和植被课程。分类标签符合LAZ文件格式的ASPRS标准。

  • 分类值2 - 代表地点

  • 分类值3,4和5 - 代表低,培养基和高植被点

  • 分类值6 -代表建筑点

定义maskdata.从输入点云中提取属于地面、建筑物和植被的点。

maskData = grdtruthlabels> = 2&grdtruthlabels <= 6;

修改输入点云的地面真值标签,指定为grdtruthlabels.

%压缩低,培养基和高植被到单一值grdtruthlabels(grdtruthlabels> = 3&grdtruthlabels <= 5)= 4;%更新度量计算的grdTruthLabelsgrdTruthLabels(grdTruthLabels == 2) = 1;grdTruthLabels(grdTruthLabels == 4) = 2;grdTruthLabels(grdTruthLabels == 6) = 3;

将先前分类步骤中获得的预测标签存储进来estimatedLabels

estimatedLabels = 0 (ptCloud.Count, 1);estimatedLabels (groundPtsIdx) = 1;estimatedLabels(label == 1) = 2;estimatedLabels(label == 2) = 3;

提取属于地面、建筑和植被的标签。

grdtruthlabels = grdtruthlabels(maskdata);估计标签=估计标签(MaskData);

用地面真相和估计标签可视化地形。

ptCloud =选择(ptCloud maskData);hFig =图(“位置”,[0 0 900 400]);AXMAP1 =子图(1,2,1,“颜色”'黑色的'“父”,HFIG);Axmap1.Position = [0 0.2 0.5 0.55];pcshow(ptcloud.location,grdtruthlabels,“父”,Axmap1)轴标题(axMap1,'带有地面真理标签的空中激光器数据')AXMAP2 =子图(1,2,2,“颜色”'黑色的'“父”,HFIG);axmap2.position = [0.5,0.2,0.5,0.55];pcshow(ptcloud.location,估计标签,“父”axMap2)轴标题(axMap2,“带有分类标签的航空激光雷达数据”的)

验证

通过计算给定点云上的总准确率,以及分类准确率、交并(IoU)和加权IoU来验证分类效果。

confusionMatrix = segmentationConfusionMatrix (estimatedLabels、双(grdTruthLabels));舰导弹= evaluateSemanticSegmentation ({confusionMatrix},......{“地面”“植物”'建筑'},“详细”,0);disp(ssm.datasetmetrics)
GlobalAccuracy意味着意味着意思是Meaniou Weightiou _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
disp (ssm.ClassMetrics)
准确性iou ________ _______浇筑0.99996 0.99996植被0.99195 0.9898建筑0.99059 0.95526

也可以看看

职能

readPointCloud.||pcnormals|pcshow|pcshowpair.|semmentationConfusionMatrix.|评估评估

对象

拉斯菲尔德尔

参考文献

[1]斯塔尔,斯科特。图斯卡卢萨:季节性洪水动态和无脊椎动物群落。国家机载激光测绘中心,2011年12月1日。OpenTopography (https://doi.org/10.5069/g9sf2t3k.的)