View source: R/algo-multichm.R
multichm | R Documentation |
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.
multichm( res = 1, layer_thickness = 0.5, dist_2d = 3, dist_3d = 5, use_max = FALSE, ... )
res |
numeric. Resolution of the CHM based on the 95th percentile |
layer_thickness |
numeric. The “eliminating” layer is defined as a band of |
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 |
... |
supplementary parameters to be passed to lmf that is used internally to find the local maxima. |
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.
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
Other individual tree detection algorithms:
LayerStacking()
,
lmfauto()
,
ptrees()
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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.