This tool can be used to identify points in a LiDAR point cloud that are associated with the tops of individual trees. The tool takes a LiDAR point cloud as an input (`input_lidar`) and it is best if the input file has been normalized using the `lidar_tophat_transform` function, such that points record height above the ground surface. Note that the `input_lidar` parameter is optional and if left unspecified the tool will search for all valid LiDAR (.las, .laz, *.zlidar) files contained within the current working directory. This 'batch mode' operation is common among many of the LiDAR processing tools. Output vectors are saved to disc automatically for each processed LiDAR file when operating in batch mode and the function returns `None`. When an individual `input_lidar` Lidar object is specified, the tool will return a `Vector` object, containing the tree top points.

The tool will evaluate the points within a local neighbourhood around each point in the input point cloud and determine if it is the highest point within the neighbourhood. If a point is the highest local point, it will be entered into the output vector file. The neighbourhood size can vary, with higher canopy positions generally associated with larger neighbourhoods. The user specifies the `min_search_radius` and `min_height` parameters, which default to 1 m and 0 m respectively. If the `min_height` parameter is greater than zero, all points that are less than this value above the ground (assuming the input point cloud measures this height parameter) are ignored, which can be a useful mechanism for removing shorter trees and other vegetation from the analysis. If the user specifies the `max_search_radius` and `max_height` parameters, the search radius will be determined by linearly interpolation based on point height and the min/max search radius and height parameter values. Points that are above the `max_height` parameter will be processed with search neighbourhoods sized `max_search_radius`. If the max radius and height parameters are unspecified, they are set to the same values as the minimum radius and height parameters, i.e., the neighbourhood size does not increase with canopy height.

If the point cloud contains point classifications, it may be useful to exclude all non-vegetation points. To do this simply set the `only_use_veg` parameter to True. This parameter should only be set to True when you know that the input file contains point classifications, otherwise the tool may generate an empty output vector file.

## See Also

lidar_tophat_transform

## Function Signature

`def individual_tree_detection(self, input_lidar: Lidar, min_search_radius: float = 1.0, min_height: float = 0.0, max_search_radius: Optional[float] = None, max_height: Optional[float] = None, only_use_veg = False) -> Optional[Vector]: ...`

## Project Links

WbW Homepage User Manual Support WbW