分类 LAS 噪声 (3D Analyst)

摘要

将具有异常空间特征的 LAS 点分类为噪点。

使用情况

  • LAS 返回结果中的噪点通常会对数据可视化和分析产生不利影响。 例如,对于高空飞翔的小鸟和遭遇云覆盖、雾霾、水体和高反射率镜体的散射脉冲而言,其返回结果会导致该位置点附近的 z 范围发生变形。 将此类点标识为噪点后,可以在显示中将其滤出,并从所有派生数据的生成结果中将其去除,例如高程表面以及坡度或纵横剖面。

  • 孤立方法将基于由邻域宽度邻域高度参数定义的区域,在块为 3 x 3 的条柱中对 LAS 数据进行处理。 如果分析体积中 LAS 点数少于邻域点限制参数值,则将 LAS 点视为噪点。 点限制应基于激光雷达点密度和可计入分析体积的 LAS 点数来反映合理的近似值。

  • 在激光雷达采集所捕获的区域中,如果某些 LAS 点回波具有异常高或异常低的 z 值,请考虑使用绝对高度方法来定义数据的 z 值阈值,以便快速识别异常值点作为噪点。

  • 如果特定区域中的 LAS 点具有异常高或异常低的 z 值,但是这些值均落入激光雷达采集所捕获的有效测量范围内,请考虑使用相对高度方法以基于相对地面的偏移来定义有效数据的 z 值阈值。 要生成地表,请过滤地面分类点的 LAS 数据集,然后使用 LAS 数据集转栅格工具。

  • 将仅对类代码值为 0 或 1 的 LAS 点进行重分类。 如果未分类的点表示为其他一些值,请考虑使用更改 LAS 类代码工具为未分类的点分配值 1。 如果已对噪点进行分类并且使用孤立绝对高度方法,则所有噪点将分配一个值为 7 的类代码。 如果使用相对高度方法,则低于最小高度参数阈值的噪点将分配值 7(表示低噪音);而高于最大高度参数阈值的噪点将分配值 18(表示高噪音)。

  • 如果您不确定用于确定噪点的设置,可将检测为噪点的 LAS 点作为点要素导出,同时禁用编辑 LAS 分类代码的选项。 如果输出点反映了所需结果,则可以通过按邻域查找 LAS 点工具,使用这些要素重新分类 LAS 点。

  • 孤立法操作对性能要求很高,条柱越大,运行速度越快。 可根据最佳性能数据的性质和分布来指定可能的最大条柱大小。

参数

标注说明数据类型
输入 LAS 数据集

将要处理的 LAS 数据集。

LAS Dataset Layer
方法
(可选)

指定将使用的噪点检测方法。

  • 孤立按分块体积对 LAS 点进行分析,以确定噪音测量点以及基于高度的噪点检测。 这是默认设置。
  • 距离地面相对高度所有低于距地表指定最小高度和高于距地表指定最大高度的点均将标识为噪点。
  • 绝对高度所有相对于平均海平面,低于指定最小高度和高于指定最大高度的点均将被标识为噪点。
String
编辑分类
(可选)

指定是否对标识为噪点的 LAS 点进行重分类。

  • 选中 - 将对噪点进行重分类。 这是默认设置。
  • 未选中 - 将不对噪点进行重分类。
Boolean
分配保留标记
(可选)

指定是否为噪点分配保留分类标记。 当选中编辑分类参数时,此参数处于启用状态。

  • 选中 - 将为噪点分配保留分类标记。
  • 未选中 - 不为噪点分配保留分类标记。 这是默认设置。
Boolean
计算统计数据
(可选)

指定是否将计算 LAS 数据集引用的 .las 文件的统计数据。 计算统计数据时会为每个 .las 文件提供一个空间索引,从而提高了分析和显示性能。 统计数据还可通过将 LAS 属性(例如分类代码和返回信息)显示限制为 .las 文件中存在的值来提升过滤和符号系统体验。

  • 选中 - 将计算统计数据。 这是默认设置。
  • 未选中 - 不计算统计数据。
Boolean
地面栅格表面
(可选)

将用于计算每个点的相对高度值的地面栅格表面。 当方法参数设置为距离地面相对高度时,此参数为必需项。

Raster Layer
最小高度
(可选)

将针对标识噪点来定义最低 z 值阈值的高度。 任何低于提供的值的点将分类为噪点。 如果指定了地表,则此阈值将以距离地面的偏移为基础,因此,值 -3 英尺表示地表以下 3 英尺的所有点将分类为噪点。

Linear Unit
最大高度
(可选)

将针对标识噪点来定义最高 z 值阈值的高度。 任何高于提供的值的点将分类为噪点。 如果提供了地表,则此阈值将以距离地面的偏移为基础,因此,值 250 米表示地表以上 250 米的所有点将分类为噪点。

Linear Unit
邻域点限制
(可选)

使用孤立方法时,分析体积内可分类为噪点的最大点数。 如果分析体积包含等于或小于此值的任意数量的 LAS 点,则将这些点分类为噪点。

Long
邻域宽度
(可选)

使用孤立方法时,分析体积的 x,y 空间中各维度的尺寸。

Linear Unit
邻域高度
(可选)

使用孤立方法时,分析体积的高度。

Linear Unit
处理范围
(可选)

待评估数据的范围。

  • 当前显示范围 Current Display Extent - 范围基于活动地图或场景。 仅在存在活动地图时,才可使用此选项。
  • 绘制范围 Draw Extent - 范围将基于在地图或场景上绘制的矩形。 此选项将在工程地理数据库中创建要素类并将图层添加至地图。 该要素类的坐标系将与地图相同。
    注:

    环境对话框中不提供此选项。 只能在具有范围数据类型的工具参数中或工具对话框的环境选项卡中找到此选项。

    注:

    当选中从“编辑”选项卡启用和禁用编辑编辑选项时,必须在编辑功能区选项卡上启用编辑才能绘制范围。

  • 图层范围 Layer - 范围基于活动地图图层。 使用下拉列表选择可用图层,或使用所有图层中数据的范围选项获取所有活动地图图层(不包括底图)的组合范围。 仅在存在具有图层的活动地图时,才可使用此选项。

    每个地图图层具有以下选项:

    • 所有要素 Select All - 图层中所有要素的范围。
    • 选定要素Area from Selected Features - 图层中选定要素的范围。
    • 可见要素 Extent Indicator - 图层中可见要素的范围。
      注:

      选定要素 Area from Selected Features可见要素 Extent Indicator 选项中的范围仅适用于要素图层。

  • 浏览 Browse - 范围基于现有数据集。
  • 输入的交集 Intersect - 范围将基于所有输入的最小或交叉范围。 如果输入未重叠,则结果为包含所有零值的空范围。
  • 输入的并集 Union - 范围将基于所有输入的最大或合并范围。
  • 剪贴板 Paste - 可在剪贴板中复制和粘贴范围。
    • 复制范围 Copy - 将范围坐标和坐标系复制到剪贴板。
    • 粘贴范围 Paste - 从剪贴板粘贴范围坐标和(可选)坐标系。 如果剪贴板值不包含坐标系,则范围将使用地图的坐标系。
    注:

    将使用与 ArcPy Extent 对象相同的格式和顺序从剪贴板中复制和粘贴范围坐标:x-min、y-min、x-max、y-max 和空间参考。

  • 重置范围 Reset - 将范围重置为默认值。
  • 手动输入坐标 - 坐标必须是数值,并且与活动地图的坐标系相匹配。
    警告:

    地图可能使用与输入的坐标不同的显示单位。 不支持使用主方向(N、S、E、W)。 在南纬和西经坐标中使用负号。

Extent
处理与范围相交的整个 LAS 文件
(可选)

指定将如何使用感兴趣区以确定 .las 文件的处理方式。 感兴趣区由处理范围参数值和处理边界参数值定义,或由二者共同定义。

  • 未选中 - 仅处理与感兴趣区相交的 LAS 点。 这是默认设置。
  • 选中 - 如果 .las 文件的任何部分与感兴趣区相交,则该 文件中的所有点(包括感兴趣区以外的点)都会得到处理。
Boolean
输出噪声点
(可选)

用于表示标识为噪点的 LAS 点的输出点要素。

Feature Class
更新金字塔
(可选)

指定修改类代码后,LAS 数据集金字塔是否会更新。

  • 选中 - LAS 数据集金字塔将更新。 这是默认设置。
  • 未选中 - LAS 数据集金字塔不会更新。
Boolean

派生输出

标注说明数据类型
输出 LAS 数据集

待修改的 LAS 数据集。

LAS Dataset Layer

arcpy.ddd.ClassifyLasNoise(in_las_dataset, {method}, {edit_las}, {withheld}, {compute_stats}, {ground}, {low_z}, {high_z}, {max_neighbors}, {step_width}, {step_height}, {extent}, {process_entire_files}, {out_feature_class}, {update_pyramid})
名称说明数据类型
in_las_dataset

将要处理的 LAS 数据集。

LAS Dataset Layer
method
(可选)

指定将使用的噪点检测方法。

  • ISOLATION按分块体积对 LAS 点进行分析,以确定噪音测量点以及基于高度的噪点检测。 这是默认设置。
  • RELATIVE_HEIGHT所有低于距地表指定最小高度和高于距地表指定最大高度的点均将标识为噪点。
  • ABSOLUTE_HEIGHT所有相对于平均海平面,低于指定最小高度和高于指定最大高度的点均将被标识为噪点。
String
edit_las
(可选)

指定是否对标识为噪点的 LAS 点进行重分类。

  • CLASSIFY将进行重分类的噪点。 这是默认设置。
  • NO_CLASSIFY将不对噪点进行重分类。
Boolean
withheld
(可选)

指定是否为噪点分配保留分类标记。 当将 edit_las 参数设置为 CLASSIFY 时,此参数处于启用状态。

  • WITHHELD将为噪点分配保留分类标记。
  • NO_WITHHELD不为噪点分配保留分类标记。 这是默认设置。
Boolean
compute_stats
(可选)

指定是否将计算 LAS 数据集引用的 .las 文件的统计数据。 计算统计数据时会为每个 .las 文件提供一个空间索引,从而提高了分析和显示性能。 统计数据还可通过将 LAS 属性(例如分类代码和返回信息)显示限制为 .las 文件中存在的值来提升过滤和符号系统体验。

  • COMPUTE_STATS将计算统计数据。 这是默认设置。
  • NO_COMPUTE_STATS不计算统计数据。
Boolean
ground
(可选)

将用于计算每个点的相对高度值的地面栅格表面。 当将 method 参数设置为 RELATIVE_HEIGHT 时,此参数为必需项。

Raster Layer
low_z
(可选)

将针对标识噪点来定义最低 z 值阈值的高度。 任何低于提供的值的点将分类为噪点。 如果指定了地表,则此阈值将以距离地面的偏移为基础,因此,值 -3 英尺表示地表以下 3 英尺的所有点将分类为噪点。

Linear Unit
high_z
(可选)

将针对标识噪点来定义最高 z 值阈值的高度。 任何高于提供的值的点将分类为噪点。 如果提供了地表,则此阈值将以距离地面的偏移为基础,因此,值 250 米表示地表以上 250 米的所有点将分类为噪点。

Linear Unit
max_neighbors
(可选)

使用孤立方法时,分析体积内可分类为噪点的最大点数。 如果分析体积包含等于或小于此值的任意数量的 LAS 点,则将这些点分类为噪点。

Long
step_width
(可选)

使用孤立方法时,分析体积的 x,y 空间中各维度的尺寸。

Linear Unit
step_height
(可选)

使用孤立方法时,分析体积的高度。

Linear Unit
extent
(可选)

待评估数据的范围。

  • MAXOF - 将使用的所有输入的最大范围。
  • MINOF - 将使用的所有输入共用的最小范围。
  • DISPLAY - 范围与可见显示范围相等。
  • 图层名称 - 将使用指定图层的范围。
  • Extent 对象 - 将使用指定对象的范围。
  • 以空格分隔的坐标字符串 - 将使用指定字符串的范围。 坐标以 x-min,y-min,x-max,y-max 的顺序表示。
Extent
process_entire_files
(可选)

指定处理范围的应用方式。

  • PROCESS_EXTENT仅处理与感兴趣区相交的 LAS 点。 这是默认设置。
  • PROCESS_ENTIRE_FILES如果 .las 文件的任何部分与感兴趣区相交,则该 文件中的所有点(包括感兴趣区以外的点)都会得到处理。
Boolean
out_feature_class
(可选)

用于表示标识为噪点的 LAS 点的输出点要素。

Feature Class
update_pyramid
(可选)

指定修改类代码后,LAS 数据集金字塔是否会更新。

  • UPDATE_PYRAMIDLAS 数据集金字塔将更新。 这是默认设置。
  • NO_UPDATE_PYRAMIDLAS 数据集金字塔不会更新。
Boolean

派生输出

名称说明数据类型
out_las_dataset

待修改的 LAS 数据集。

LAS Dataset Layer

代码示例

ClassifyLasNoise 示例 1(Python 窗口)

下面的示例演示了如何在 Python 窗口中使用此工具。

arcpy.env.workspace = 'C:/data'

arcpy.ddd.ClassifyLasNoise('Denver_2.lasd', "ABSOLUTE_HEIGHT", 
                           edit_las='CLASSIFY', withheld='WITHHELD', 
                           high_z='450 Feet')
ClassifyLasNoise 示例 2(独立脚本)

下面的示例演示了如何在独立 Python 脚本中使用此工具。

'''****************************************************************************
       Name: Classify Lidar & Extract Building Footprints
Description: Extract footprint from lidar points classified as buildings, 
             regularize its geometry, and calculate the building height.

****************************************************************************'''
import arcpy

lasd = arcpy.GetParameterAsText(0)
dem = arcpy.GetParameterAsText(1)
footprint = arcpy.GetParameterAsText(2)

try:
    desc = arcpy.Describe(lasd)
    if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
        unit = 'Feet'
    else:
        unit = 'Meters'
    ptSpacing = desc.pointSpacing * 2.25
    sampling = '{0} {1}'.format(ptSpacing, unit)
    # Classify overlap points
    arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
    # Classify ground points
    arcpy.ddd.ClassifyLasGround(lasd)
    # Filter for ground points
    arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
    # Generate DEM
    arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION', 
                                        'BINNING NEAREST NATURAL_NEIGHBOR', 
                                        sampling_type='CELLSIZE', 
                                        sampling_value=desc.pointSpacing)
    # Classify noise points
    arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY', 
                               withheld='WITHHELD', ground=dem, 
                               low_z='-2 feet', high_z='300 feet', 
                               max_neighbors=ptSpacing, step_width=ptSpacing, 
                               step_height='10 feet')
    # Classify buildings
    arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
    #Classify vegetation
    arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55], 
                                  compute_stats='COMPUTE_STATS')
    # Filter LAS dataset for building points
    lasd_layer = 'building points'
    arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
    # Export raster from lidar using only building points
    temp_raster = 'in_memory/bldg_raster'
    arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
                                           'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
    # Convert building raster to polygon
    temp_footprint = 'in_memory/footprint'
    arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
    # Regularize building footprints
    arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint, 
                                          method='RIGHT_ANGLES')

except arcpy.ExecuteError:
    print(arcpy.GetMessages())

相关主题