主要内容

SegmentgroundSmrf.

利用SMRF算法从激光雷达数据分割地面

描述

例子

地下田径= segmentgroundsmrf(Ptcloud.分割输入点云,Ptcloud.进入地面和非接地点并返回逻辑矩阵或向量地下田径.该函数设置地点指数为真正的真正的对于非接地点。

地下田径= segmentgroundsmrf(Ptcloud.gridResolution另外指定网格元素的维度。

[地下田径nongroundptcloud.地下Cloud.] = segmentgroundsmrf(___另外返回地点和非地点作为个人pointCloud对象。将此语法与前面语法中的任何输入参数组合一起使用。

例子

[___] = segmentgroundsmrf(___名称,值使用一个或多个名称-值参数指定选项。例如,“ElevationThreshold”,0.4设置识别非接地点的高程阈值为0.4。

例子

全部折叠

将地面分割成无组织的空中点云。

创建一个拉斯菲尔德尔对象访问LAS文件数据。

filename = fullfile(toolboxdir('lidar'),'lidardata''las'......“aerialLidarData2.las”);lasreader = lasfilereader(文件名);

从LAS文件中读取点云数据readPointCloud.功能。

ptcloud = ReadPointCloud(Lasreader);

从点云分割地面数据。

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

想象地面和非地面点。

图pcshowpair (groundPtCloud nonGroundPtCloud)

图中包含一个坐标轴。坐标轴包含两个散点类型的对象。

将地面分割成有组织的点云。点云是在高速公路场景中拍摄的。

将点云数据加载到工作区中。

ld = load(“drivingLidarPoints.mat”);

从点云分割地面数据。

[~, nonGroundPtCloud groundPtCloud] = segmentGroundSMRF (......ld.ptCloud,“ElevationThreshold”,0.1,'expationscale',0.25);

可视化地面和非接地点。

图pcshowpair(groundPtCloud,nonGroundPtCloud) xlim([-60 60]) ylim([-50 50])

图中包含一个坐标轴。坐标轴包含两个散点类型的对象。

输入参数

全部折叠

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

每个网格元素的尺寸,指定为正标量。

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32|UINT64

名称-值对的观点

指定可选的逗号分离对名称,值参数。名称是参数名称和价值为对应值。名称必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“ElevationThreshold”,0.4将识别非接地点的高程阈值设置为0.4。

在形态开口操作中的磁盘形结构元件的最大半径,指定为正标量。将此值提高到将大型建筑物分段为非接地,以额外计算为代价。

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32|UINT64

斜率阈值以识别最小升高表面图中的非接地网格元件,指定为非负标量。如果其斜率大于,则该函数将网格元素分类为非接地SlopeThreshold.增加这个值将陡坡归类为地面。

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32|UINT64

识别非接地点的高程阈值,指定为非负标量。如果点和估计的地面之间的高度差异大于,则该函数将点作为非接地分类为非接地海拔赫尔德.增加此值以包括颠簸地面的更多点。

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32|UINT64

升高阈值缩放系数相对于估计地面的斜率,指定为非负标量。增加此值以识别陡坡上的接地点。

数据类型:单身的||INT8.|int16|int32|int64|uint8.|uint16|UINT32|UINT64

输出参数

全部折叠

分段点云的二进制映射,作为有组织点云的逻辑矩阵返回,作为未经组织点云的逻辑向量。该功能将矩阵中的接地点的位置设置为真正的而非地面指向错误的

点云的非接地点,返回为pointCloud对象。

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

算法

简单的形态过滤器(SMRF)算法[1]将点云数据分割为地面点和非地面点。算法分为三个阶段:

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

  2. 将表面分割成地面和非地面网格单元。

  3. 对原始点云数据进行分割。

极小曲面创建

  1. 将点云数据沿xy -维度(鸟瞰图)。使用网格元素维度使用gridResolution

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

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

表面地图分段

  1. 在最小表面图上应用形态开口操作。有关形态开放的更多信息,请参阅形态运算的类型

  2. 使用带半径为1像素的磁盘形结构元素。有关更多信息,请参阅结构化元素

  3. 计算每个网格元件的最小表面和打开的表面图之间的斜率。如果差异大于高度阈值,则将像素分类为非接地。

  4. 迭代地执行步骤1到3。在每次迭代中将结构元素半径增加1像素,直到它达到最大半径maxwindowradius.

  5. 迭代过程的最终结果是一个二进制掩码,其中每个像素被划分为接地或非接地。

点云分割

  1. 在原始的最小表面地图上应用二元掩码来消除非地面网格。

  2. 使用图像插值技术填充未填充的网格,以创建估计的高度模型。

  3. 计算原始点云中各点与估计高程模型之间的高程差。如果差大于海拔赫尔德,将像素分类为非接地。

参考文献

[1] Pingel,Thomas J.,Keith C. Clarke和William A. McBride。“一种改进的地形分类空气传播的LIDAR数据的简单形态过滤器。”摄影测量与遥感学报77(2013年3月):21-30。https://www.sciencedirect.com/science/article/abs/pii/S0924271613000026?via%3Dihub

介绍了R2021a