Summary
Classifies LAS points with anomalous spatial characteristics as noise.
Usage
Noise points in LAS returns typically have a detrimental impact on data visualization and analysis. For example, returns from high-flying birds and scattered pulses that encountered cloud cover, smog haze, water bodies, and highly reflective mirrors can distort the z-range of the points surrounding that location. Identifying such points as noise will allow them to be filtered out from the display and eliminated from the production of any derivative data, such as an elevation surface, slope or aspect profile.
The Isolation method will process the LAS data in tiled 3x3 bins based on the region defined by the Neighborhood Width and Neighborhood Height parameters. If the number of LAS points in the analysis volume is less than the Neighborhood Point Limit parameter , the LAS points will be treated as noise. The point limit should reflect a reasonable approximation based on the lidar point density and the number of LAS points that can be anticipated in the analysis volume.
If certain LAS point returns have abnormally high or low z-values for the region captured by the lidar collection, consider using the Absolute Height method to define the z-value threshold of the data to quickly identify the outlier points as noise.
If LAS points have abnormally high or low z-values for specific regions, but those values fall within the range of valid measurements captured in the lidar collection, consider using the Relative Height method to define the z-value threshold of valid data based on an offset from the ground. To generate a ground surface, filter the LAS dataset for ground classified points, and use the LAS Dataset To Raster tool.
Only LAS points with class code values of 0 or 1 will be reclassified. If unclassified points are represented by some other value, consider using the Change LAS Class Codes tool to assign the unclassified points a value of 1. When noise points are being classified and either the Isolation or Absolute Height method is used, all noise points will be assigned a class code value of 7. If the Relative Height method is used, noise points that are below the Minimum Height threshold will be assigned a value of 7, which represents Low Noise, and noise points that are above the Maximum Height threshold will be assigned a value of 18, which represents High Noise.
If you are unsure about the settings to be used for determining noise points, consider exporting the LAS points detected as noise as a point feature while the option to edit the LAS classification code is disabled. If the output points reflect the desired results, you can reclassify the LAS points using those features through the Locate LAS Points By Proximity tool.
The isolation method is a performance intensive operation that runs faster with larger bin sizes. Consider specifying the largest possible bin size depending on the nature and distribution of the data.
Syntax
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})
Parameter | Explanation | Data Type |
in_las_dataset | The LAS dataset to process. | LAS Dataset Layer |
method | The noise detection method that will be used.
| String |
edit_las | Indicates whether LAS points identified as noise will be reclassified.
| Boolean |
withheld | Indicates whether the withheld classification flag will be assigned to the noise points. This option is only enforced if the edit_las parameter is set to CLASSIFY.
| Boolean |
compute_stats (Optional) | Specifies whether statistics should be computed for the LAS files referenced by the LAS dataset. Computing statistics provides a spatial index for each LAS file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, like classification codes and return information, to values that are present in the LAS file.
| Boolean |
ground | The ground surface used to define relative height. | Raster Layer |
low_z | The height that defines the lowest z-value threshold for identifying noise points. Any point that is lower than the specified value will be classified as noise. If a ground surface is specified, this threshold will be based on an offset from the ground such that a value of "-3 feet" means any points that are 3 feet below the ground surface will be classified as noise. | Linear Unit |
high_z | The height that defines the highest z-value threshold for identifying noise points. Any point that is higher than the specified value will be classified as noise. If a ground surface is provided, this threshold will be based on an offset from the ground such that a value of "250 meters" means any points that are higher than 250 meters above the ground surface will be classified as noise. | Linear Unit |
max_neighbors | The maximum number of points inside the analysis volume that can be qualified as noise when using the Isolation method. If the analysis volume contains any number of LAS points that are equal to or less than this value, those points will be classified as noise. | Long |
step_width | The size of each dimension in the XY space of the analysis volume when using the Isolation method. | Linear Unit |
step_height | The height of the analysis volume when using the Isolation method. | Linear Unit |
extent (Optional) | Specifies the extent of the data that will be evaluated by this tool.
| Extent |
process_entire_files (Optional) | Specifies how the processing extent is applied.
| Boolean |
out_feature_class (Optional) | The output point features that represent the LAS points identified as noise. | Feature Class |
Derived Output
Name | Explanation | Data Type |
out_las_dataset | The LAS dataset to be modified. | LAS Dataset Layer |
Code sample
The following sample demonstrates the use of this tool in the Python window.
arcpy.env.workspace = 'C:/data'
arcpy.ddd.ClassifyLasNoise('Denver_2.lasd', "ABSOLUTE_HEIGHT",
edit_las='CLASSIFY', withheld='WITHHELD',
high_z='450 Feet')
The following sample demonstrates the use of this tool in a stand-alone Python script.
'''****************************************************************************
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())
Licensing information
- Basic: Requires 3D Analyst
- Standard: Requires 3D Analyst
- Advanced: Requires 3D Analyst