主要内容

segmentGroundSMRF

段地面激光雷达数据使用一个简单的形态学滤波器(SMRF)算法

描述

例子

groundPtsIdx= segmentGroundSMRF (ptCloud)段输入点云,ptCloud在地面和non-ground点并返回一个逻辑矩阵或向量groundPtsIdx。指数函数集地面点真正的non-ground分。

groundPtsIdx= segmentGroundSMRF (ptCloud,gridResolution)另外指定网格元素的尺寸。

(groundPtsIdx,nonGroundPtCloud,groundPtCloud)= segmentGroundSMRF (___)此外返回地面点和non-ground点作为个人pointCloud对象。使用这种语法的任何输入参数组合在以前的语法。

例子

(___)= segmentGroundSMRF (___,名称,值)使用一个或多个名称参数指定选项。例如,“ElevationThreshold”, 0.4将确定non-ground点高程阈值设置为0.4。

例子

全部折叠

段地面在一个无组织的空中点云。

创建一个lasFileReader对象来访问文件数据。

文件名= fullfile (toolboxdir (激光雷达的),“lidardata”,“拉斯维加斯”,“aerialLidarData2.las”);lasReader = lasFileReader(文件名);

从拉斯维加斯读点云数据文件使用readPointCloud函数。

ptCloud = readPointCloud (lasReader);

段地面点云数据。

[groundPtsIdx, nonGroundPtCloud groundPtCloud] = segmentGroundSMRF (ptCloud);

可视化地面和non-ground点。

图pcshowpair (groundPtCloud nonGroundPtCloud)

图包含一个坐标轴对象。坐标轴对象包含2散射类型的对象。

段和删除从一个有组织的点云。高速公路场景中的点云被捕。

点云数据加载到工作区。

ld =负载(“drivingLidarPoints.mat”);

显示输入点云。

pcshow (ld.ptCloud) xlim (40 [-40]) ylim (50 [-50])

图包含一个坐标轴对象。坐标轴对象包含一个散射类型的对象。

段地面点云数据。

[~,nonGroundPtCloud groundPtCloud] = segmentGroundSMRF (,ld.ptCloud,“MaxWindowRadius”5,“ElevationThreshold”,0.1,“ElevationScale”,0.25);

可视化non-ground点。

图pcshow (nonGroundPtCloud) xlim (40 [-40]) ylim (50 [-50])

图包含一个坐标轴对象。坐标轴对象包含一个散射类型的对象。

输入参数

全部折叠

点云数据,指定为一个pointCloud对象。

每个网格的维度,指定为一个积极的标量。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

名称-值参数

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:“ElevationThreshold”, 0.4设置高程阈值来识别non-ground点,至0.4点。

的最大半径盘状结构元素形态学操作,指定为一个积极的标量。增加这个值作为non-ground段大型建筑物的额外计算。

请注意

航空激光雷达数据的默认值是有效的。对地面数据,更好的性能MaxWindowRadius一个较小的值8

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

斜率阈值识别non-ground网格元素最低高程表面地图,指定为负的标量。函数将一个网格元素作为non-ground如果其斜率大于SlopeThreshold。增加这个值分类陡峭的斜坡地面。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

高程阈值识别non-ground点,指定为负的标量。功能点划分为non-ground如果点之间的高差和估计地表大于ElevationThreshold。增加这个值包含更多的分崎岖不平的地面上。

请注意

航空激光雷达数据的默认值是有效的。陆地上,等待最好的结果数据集ElevationThreshold一个较小的值0.1

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

高程阈值比例因子对斜率的估计地面,指定为负的标量。增加这个值来确定地面点在陡峭的山坡上。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

输出参数

全部折叠

二进制分段点云的地图,作为一个逻辑返回矩阵组织点云,和作为组织的逻辑矢量点云。的函数集地面点的位置矩阵真正的和non-ground点

点云的non-ground点,作为一个返回pointCloud对象。

点云的点,作为一个返回pointCloud对象。

算法

一个简单的形态学滤波器(SMRF)算法[1]部分点云数据到地面和non-ground点。该算法分为三个阶段:

  1. 创建一个最小高程表面的点云数据。

  2. 表面分割成地面和non-ground网格元素。

  3. 段原始点云数据。

极小曲面创建

  1. 将点云数据划分为网格沿xy -维度(鸟瞰)。指定网格尺寸使用gridResolution

  2. 找到最低海拔(Z最小值)值为每个网格元素(像素)。

  3. 把所有Z最小值值到一个二维矩阵(光栅图像)来创建一个最小高程表面地图。

表面地图分割

  1. 应用形态开放手术的最小表面地图。关于开放形态的更多信息,请参阅类型的形态学操作

  2. 使用一个盘状结构元素的半径1像素。有关更多信息,请参见结构化元素

  3. 计算最小表面之间的斜率,打开表面地图在每个网格元素。如果差异大于高程阈值,分类与non-ground像素。

  4. 执行步骤1到3迭代。结构化元素半径增加1像素在每个迭代中,直到达到指定的最大半径MaxWindowRadius

  5. 迭代过程的最终结果是一个二进制的面具,每个像素分类为地面或non-ground。

点云分割

  1. 应用二元掩模在原始极小曲面映射到删除non-ground网格。

  2. 填补这个空缺网格利用图像插值技术来创建一个估计高程模型。

  3. 计算每个点之间的高差在原始点云,估计高程模型。如果大于的区别ElevationThreshold、分类和non-ground像素。

引用

[1]Pingel托马斯·J。,Keith C. Clarke, and William A. McBride. “An Improved Simple Morphological Filter for the Terrain Classification of Airborne LIDAR Data.”ISPRS《摄影测量与遥感77(2013年3月):21 - 30。

扩展功能

介绍了R2021a