This tool can be used to normalize a LiDAR point cloud. A normalized point cloud is one for which the point z-values represent height above the ground surface rather than raw elevation values. Thus, a point that falls on the ground surface will have a z-value of zero and vegetation points, and points associated with other off-terrain objects, have positive, non-zero z-values. Point cloud normalization is an essential pre-processing method for many forms of LiDAR data analysis, including the characterization of many forestry related metrics and individual tree mapping (IndividualTreeDetection
).
This tool works by measuring the elevation difference of each point in an input LiDAR file (input
) and the elevation of an input raster digital terrain model (dtm
). A DTM is a bare-earth digital elevation model. Typically, the input DTM is creating using the same input LiDAR data by interpolating the ground surface using only ground-classified points. If the LiDAR point cloud does not contain ground-point classifications, you may wish to apply the LidarGroundPointFilter
or ClassifyLidar
tools before interpolating the DTM. While ground-point classification works well to identify the ground surface beneath vegetation cover, building points are sometimes left It may also be necessary to remove other off-terrain objects like buildings. The RemoveOffTerrainObjects
tool can be useful for this purpose, creating a final bare-earth DTM. This tool outputs a normalized LiDAR point cloud (output
). If the no_negatives
parameter is True, any points that fall beneath the surface elevation defined by the DTM, will have their z-value set to zero.
Note that the LidarTophatTransform
tool similarly can be used to produce a type of normalized point cloud, although it does not require an input raster DTM. Rather, it attempts to model the ground surface within the point cloud by identifying the lowest points within local neighbourhoods surrounding each point in the cloud. While this approach can produce satisfactory results in some cases, the NormalizeLidar
tool likely works better under more rugged topography and in areas with extensive building coverage, and provides greater control over the definition of the ground surface.
lidar_tophat_transform, individual_tree_detection, lidar_ground_point_filter, classify_lidar
def normalize_lidar(self, input_lidar: Lidar, dtm: Raster) -> Lidar: ...