ptrees: Individual Tree Detection and Segmentation Algorithm

View source: R/algo-ptree.R

ptreesR Documentation

Individual Tree Detection and Segmentation Algorithm

Description

This function is made to be used in find_trees or segment_trees. It implements the PTrees algorithm for tree detection and tree segmentation based Vega et al. (2014) (see references). When used in the function find_trees it runs only the fisrt part of the method i.e. the detection of the trees. When used in segment_trees it performs the whole segmentation (see details).

Usage

ptrees(k, hmin = 2, nmax = 7L)

Arguments

k

integer vector. A serie of k-nearest neighbors to use. In this original paper a k refers to a 'scale' of analyse (see reference).

hmin

scalar. This is an addition from the original paper to limit oversegmentation. Point below this threshold cannot initiate new trees or increase a hull (see details). Set to -Inf to strictly respect original paper.

nmax

integer. This is an addition from the original paper to protect against uncomputable cases (see details). Set to +Inf to strictly respect the original paper (not recommended)

Details

This function has been written by the lidR authors from the original article. We made our best to implement as far as possible exactly what is written in the original paper but we cannot states that it is the exact original algorithm. Also, minor variations were introduced to fix some issues that were not adressed in the original paper:

  • Addition of the parameter hmin: to reduce oversegmentation we introduced a minium height threshold. Points below this thresold cannot initiate new trees during the tree detection and cannot incrase a crown hull during the segmentation.

  • Addition of the parameter nmax: in the original article page 103 figures 5, the number of possible combination is 2^n-n-1. This exponential number of combinations lead, in some cases to an infinite computation time. During the developpement we got cases where the number of combinations to consider was beyond a billion. If the number of tree to consider between two scales is greater than nmax (i.e. the number of combination is greater than 2^nmax-nmax-1) then the "TreeSegment" from the biggest scale is retained anyway, the smallest scale is considered as dummy.

Notice that to use the PTree strictly as originally described, the point cloud should not be normalized (see reference). In that case the parameter 'hmin' is miningless and can be set to -Inf for example.

Author(s)

Jasmin Siefert and Jean-Romain Roussel

References

Vega, C., Hamrouni, a., El Mokhtari, S., Morel, J., Bock, J., Renaud, J.-P., … Durrieu, S. (2014). PTrees: A point-based approach to forest tree extraction from lidar data. International Journal of Applied Earth Observation and Geoinformation, 33, 98–108. https://doi.org/10.1016/j.jag.2014.05.001

See Also

Other individual tree segmentation algorithms: hamraz2016()

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

Other point-cloud based tree segmentation algorithms: hamraz2016()

Examples

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

k = c(30,15)
ttops = find_trees(las, ptrees(k))
las   = segment_trees(las, ptrees(k))

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