multichm: Individual Tree Detection Algorithm

View source: R/algo-multichm.R

multichmR Documentation

Individual Tree Detection Algorithm

Description

This function is made to be used in find_trees. It implements an algorithms for tree detection based on a method described in Eysn et al (2015) (see references) and propably proposed originaly by someone else (we did not find original publication). This is a local maximum filter applied on a multi-canopy height model (see details).

Notice: tree tops returned are the true highest points within a given pixel whenever the CHMs where computed with the 95th percentile of height. Otherwise these maxima are not true maxima and cannot be used in subsequent segmentation algorithms.

Usage

multichm(
  res = 1,
  layer_thickness = 0.5,
  dist_2d = 3,
  dist_3d = 5,
  use_max = FALSE,
  ...
)

Arguments

res

numeric. Resolution of the CHM based on the 95th percentile

layer_thickness

numeric. The “eliminating” layer is defined as a band of layer_thickness m below the current CHM (see details).

dist_2d

numeric. 2D distance threshold. A local maximum is considered a detected tree if there is no detected tree within this 2D distance (see details).

dist_3d

numeric. 3D distance threshold. A local maximum is considered a detected tree if there is no detected tree within this 3D distance (see details).

use_max

logical. The CHMs are computed with the 95th percentiles of height in the original description. If use_max = TRUE it uses the 100th percentiles (max height) and thus does not implies any sorting algorithm. The algoithm is therefore 5 to 10 times faster.

...

supplementary parameters to be passed to lmf that is used internally to find the local maxima.

Details

Description adapted from Eysn et al (2015), page 1728, section 3.1.3 Method #3

The method is based on iterative canopy height model generation (CHM) and local maximum filter (LMF) detection within a moving window for various CHMs. The method works in two general steps, which are (a) sequential identification of potential trees and (b) filtering of the extracted potential trees.

  • Step (a): From the normalized point cloud, an initial CHM is created by assigning the 95th height percentile within each raster cell. Based on this CHM, LM are detected and the found positions and heights are stored in a database. For the next iteration, points in the uppermost layer of the normalized ALS data are eliminated. The “eliminating” layer is defined as a band below the current CHM. Based on the filtered data, a new CHM is created, LM are extracted, and the LM parameters are added to the database. This procedure is carried out sequentially until all points are removed from the normalized point cloud.

  • Step (b): All detected LM in the database are sorted by decreasing heights. The highest LM is considered a detected tree. For each following LM, the LM is considered a detected tree if there is no detected tree within a given 2D distance as well as a given 3D distance.

References

Eysn, L., Hollaus, M., Lindberg, E., Berger, F., Monnet, J. M., Dalponte, M., … Pfeifer, N. (2015). A benchmark of lidar-based single tree detection methods using heterogeneous forest data from the Alpine Space. Forests, 6(5), 1721–1747. https://doi.org/10.3390/f6051721

See Also

Other individual tree detection algorithms: LayerStacking(), lmfauto(), ptrees()

Examples

LASfile <- system.file("extdata", "MixedConifer.laz", package="lidR")
las = readLAS(LASfile)

ttops = find_trees(las, multichm(res = 1, ws = 5))

x = plot(las)
add_treetops3d(x, ttops)

Jean-Romain/lidRplugins documentation built on Feb. 8, 2023, 5:39 a.m.