描述
将具有异常空间特征的 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 点。
孤立法操作对性能要求很高,立方图格越大,运行速度越快。可根据数据的性质和分布来指定可能的最大立方图格大小。
语法
arcpy.3d.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 | 将使用的噪点检测方法。
| String |
edit_las | 指示是否对标识为噪点的 LAS 点进行重分类。
| Boolean |
withheld | 指示是否将保留分类标记分配给噪点。此选项仅在将 edit_las 参数设置为 CLASSIFY 后强制使用。
| Boolean |
compute_stats (可选) | 指定是否应计算 LAS 数据集引用的 LAS 文件的统计数据。计算统计数据时会为每个 LAS 文件提供一个空间索引,从而提高了分析和显示性能。统计数据还可通过将 LAS 属性(如分类代码和返回信息)显示限制为 LAS 文件中存在的值来提升过滤和符号系统体验。
| 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 (可选) | 指定处理范围的应用方式。
| Boolean |
out_feature_class (可选) | 用于表示标识为噪点的 LAS 点的输出点要素。 | Feature Class |
派生输出
名称 | 说明 | 数据类型 |
out_las_dataset | 待修改的 LAS 数据集。 | LAS 数据集图层 |
代码示例
下面的示例演示了如何在 Python 窗口中使用此工具。
arcpy.env.workspace = 'C:/data'
arcpy.ddd.ClassifyLasNoise('Denver_2.lasd', "ABSOLUTE_HEIGHT",
edit_las='CLASSIFY', withheld='WITHHELD',
high_z='450 Feet')
下面的示例演示了如何在独立 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