主要内容

航空激光雷达数据的地形分类

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

blockDiagram2.png

加载和可视化数据

从LAZ文件中加载点云数据和相应的地面真相标签,aerialLidarData.laz,从开放地形数据集获得[1].点云由不同的类别组成,包括地面、建筑和植被。方法将点云数据和相应的地面真值标签加载到工作区中readPointCloud的对象函数lasFileReader对象。可视化点云,根据地面真相标签进行颜色编码,使用pcshow函数。

lazfile = fullfile (toolboxdir (激光雷达的),“lidardata”“拉斯维加斯”“aerialLidarData.laz”);从文件中读取LAZ数据lazReader = lasFileReader (lazfile);读取点云和相应的地面真值标签[ptCloud, pointAttributes] = readPointCloud (lazReader,...“属性”“分类”);grdTruthLabels = pointAttributes.Classification;可视化输入点云与相应的地面真值标签图pcshow (ptCloud.Location grdTruthLabels)标题(“具有地面真相的航空激光雷达数据”

地面的分类

地面的分类是将输入点云分割为地面和非地面的预处理步骤。方法将从LAZ文件加载的数据分割为接地点和非接地点segmentGroundSMRF函数。

[groundPtsIdx, nonGroundPtCloud groundPtCloud] = segmentGroundSMRF (ptCloud);分别用绿色和洋红色可视化接地点和非接地点图pcshowpair (nonGroundPtCloud groundPtCloud)标题(“地面和非地面点的分类”

特征提取

方法从点云提取特征helperExtractFeatures函数。所有的辅助函数都作为支持文件附加到这个示例中。辅助函数估计点云中每个点的法线值和曲率值。这些特征通过将每个点与其邻域点关联来提供其底层结构信息。

可以指定要考虑的邻居的数量。如果邻居数量过低,helper函数会对植被点进行过聚类。如果邻居数量过多,建筑和植被之间没有明确的边界,建筑点附近的植被点分类错误。

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

建筑物和植被分类

辅助函数使用法线和曲率的变化来区分建筑物和植被。与植被相比,建筑更加平面化,因此属于建筑的点的曲率变化和相邻点的法线相对差较小。植被点更加分散,这导致了与建筑相比曲率变化更大。的helperClassify功能将非地面点分为建筑和植被。helper函数根据以下标准将点分类为构建:

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

  • 相邻点的法线必须相似。相邻法线之间的余弦相似度必须大于指定的法线阈值,normalThresh

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

%法向阈值和曲率阈值normalThresh = 0.85;curveThresh = 0.02;将点分为建筑和植被。neighInds标签= helperClassify(法线曲率,...normalThresh curveThresh);

从地面真相标签数据中提取建筑物和植被类别标签。由于LAZ文件有许多类,您必须首先隔离地面、建筑和植被类。分类标签符合ASPRS LAZ文件格式标准。

  • 分类值2 -表示接地点

  • 分类值3,4,5 -表示低、中、高植被点

  • 分类值6 -代表建筑点数

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

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

修改输入点云的ground truth标签,指定为grdTruthLabels

将低、中、高植被压缩为单个值grdTruthLabels(grdTruthLabels>=3 & grdTruthLabels<=5) = 4;更新grdTruthLabels以进行度量计算grdTruthLabels(grdTruthLabels == 2) = 1;grdTruthLabels(grdTruthLabels == 4) = 2;grdTruthLabels(grdTruthLabels == 6) = 3;

将从以前的分类步骤中获得的预测标签存储在其中estimatedLabels

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

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

grdTruthLabels = grdTruthLabels (maskData);estimatedLabels = estimatedLabels (maskData);

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

ptCloud =选择(ptCloud maskData);hFig =图(“位置”,[0 0 900 400]);axMap1 =次要情节(1、2、1,“颜色”“黑”“父”, hFig);axMap1。位置= [0 0.2 0.5 0.55];pcshow (ptCloud。位置、grdTruthLabels“父”axMap1)轴标题(axMap1,“带有地面真实标签的航空激光雷达数据”axMap2 = subplot(1,2,2,)“颜色”“黑”“父”, hFig);axMap2。位置= (0.5,0.2,0.5,0.55);pcshow (ptCloud。位置、estimatedLabels“父”axMap2)轴标题(axMap2,“带有分类标签的航空激光雷达数据”

验证

通过计算给定点云上的总精度以及类精度、交叉过并(IoU)和加权IoU来验证分类。

confusionMatrix = segmentationConfusionMatrix (estimatedLabels、双(grdTruthLabels));舰导弹= evaluateSemanticSegmentation ({confusionMatrix},...“地面”“植物”“建筑”},“详细”, 0);disp (ssm.DataSetMetrics)
GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU  ______________ ____________ _______ ___________ 0.99769 0.99608 0.98233 0.99547
disp (ssm.ClassMetrics)
精度欠条________ _______地面0.99995 0.99995植被0.99079 0.99008建筑物0.99751 0.95696

另请参阅

功能

readPointCloud|segmentGroundSMRF|pcnormals|pcshow|pcshowpair|segmentationConfusionMatrix|evaluateSemanticSegmentation

对象

lasFileReader

参考文献

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

Baidu
map