分类 LAS 噪点 (3D Analyst)

描述

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

使用方法

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

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

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

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

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

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

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

语法

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})
参数说明数据类型
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

用于定义相对高度的地表。

Raster Layer
low_z

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

Linear Unit
high_z

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

Linear Unit
max_neighbors

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

Long
step_width

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

Linear Unit
step_height

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

Linear Unit
extent
(可选)

指定将由此工具进行评估的数据范围。

Extent
process_entire_files
(可选)

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

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

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

Feature Class

派生输出

名称说明数据类型
out_las_dataset

待修改的 LAS 数据集。

LAS 数据集图层

代码示例

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())

许可信息

  • Basic: 需要 3D Analyst
  • Standard: 需要 3D Analyst
  • Advanced: 需要 3D Analyst

相关主题