Region growing for individual tree segmentation based on Dalponte and Coomes (2016) algorithm (see reference). Note that this stage strictly performs segmentation, while the original method described in the manuscript also performs pre- and post-processing tasks. Here, these tasks are expected to be done by the user in separate functions.
Usage
region_growing(
raster,
seeds,
th_tree = 2,
th_seed = 0.45,
th_cr = 0.55,
max_cr = 20,
ofile = temptif()
)
Arguments
- raster
LASRalgoritm. A stage producing a raster.
- seeds
LASRalgoritm. A stage producing points used as seeds.
- th_tree
numeric. Threshold below which a pixel cannot be a tree. Default is 2.
- th_seed
numeric. Growing threshold 1. See reference in Dalponte et al. 2016. A pixel is added to a region if its height is greater than the tree height multiplied by this value. It should be between 0 and 1. Default is 0.45.
- th_cr
numeric. Growing threshold 2. See reference in Dalponte et al. 2016. A pixel is added to a region if its height is greater than the current mean height of the region multiplied by this value. It should be between 0 and 1. Default is 0.55.
- max_cr
numeric. Maximum value of the crown diameter of a detected tree (in data units). Default is 20. BE CAREFUL this algorithm exists in the
lidR
package and this parameter is in pixels inlidR
.- ofile
character. Full outputs are always stored on disk. If
ofile = ""
then the stage will not store the result on disk and will return nothing. It will however hold partial output results temporarily in memory. This is useful for stage that are only intermediate stage.
Value
This stage produces a raster. The path provided to `ofile` is expected to be `.tif` or any other format supported by GDAL.
References
Dalponte, M. and Coomes, D. A. (2016), Tree-centric mapping of forest carbon density from airborne laser scanning and hyperspectral data. Methods Ecol Evol, 7: 1236–1245. doi:10.1111/2041-210X.12575.
Examples
f <- system.file("extdata", "MixedConifer.las", package="lasR")
reader <- reader(filter = keep_first())
chm <- rasterize(1, "max")
lmx <- local_maximum_raster(chm, 5)
tree <- region_growing(chm, lmx, max_cr = 10)
u <- exec(reader + chm + lmx + tree, on = f)
# terra::plot(u$rasterize)
# plot(u$local_maximum, add = T, pch = 19, cex = 0.5)
# terra::plot(u$region_growing, col = rainbow(150))
# plot(u$local_maximum, add = T, pch = 19, cex = 0.5)