clouds_tree_metrics: Computes metrics on trees detected in list of point clouds.

View source: R/metrics.R

clouds_tree_metricsR Documentation

Computes metrics on trees detected in list of point clouds.

Description

Extracts summary statistics on trees for each LAS object in a list:

Usage

clouds_tree_metrics(llasn, XY, plot_radius, res = 0.5, roi = NULL, func, ...)

Arguments

llasn

list of LAS objects

XY

a data frame or matrix with XY coordinates of plot centers

plot_radius

numeric. plot radius in meters

res

numeric. resolution of canopy height model computed with points2DSM before tree segmentation

roi

sf object. polygons corresponding to plot shapes. Only trees which apices are inside the polygons are retained for subsequent computations. However, plot surface is still computed as pi * plot_radius^2

func

a function to be applied to the attributes of extracted trees (return from internal call to tree_extraction function) to compute plot level metrics

...

other parameters to be passed to tree_segmentation

Details

  • calls tree_segmentation to segment trees and then tree_extraction to extract their features

  • computes 'TreeCanopy_cover_in_plot' (proportion of surface of disk of interest which is covered by segmented trees), 'TreeCanopy_meanH_in_plot' (mean canopy height inside intersection of tree segments and disk of interest)

  • removes detected trees located outside of the disk of interest defined by their centers and radius

  • computes summary statistics of extracted tree features based on a user-defined function (default is std_tree_metrics)

Value

a data frame with tree metrics in columns corresponding to LAS objects of the list (lines)

See Also

tree_segmentation, tree_extraction, std_tree_metrics

Examples

# load LAS file
LASfile <- system.file("extdata", "las_chablais3.laz", package="lidaRtRee")
las_chablais3 <- lidR::readLAS(LASfile)

# set number of threads
lidR::set_lidr_threads(2)
# extract two point clouds from LAS object
llas <- lidR::clip_circle(las_chablais3,
                          c(974350, 974390),
                          c(6581680, 6581680), 10)
# normalize point clouds
llas <- lapply(llas, function(x) {
  lidR::normalize_height(x, lidR::tin())
})

# compute metrics with user-defined function
# number of detected trees between 20 and 30 meters and their mean height
# restricted to disks of radius 8 m.
user_func <- function(x) {
  dummy <- x$h[which(x$h > 20 & x$h < 30)]
  data.frame(Tree.between.20.30 = length(dummy), Tree.meanH = mean(dummy))
}
XY <- data.frame(X = c(974350, 974390),
                 Y = c(6581680, 6581680))
clouds_tree_metrics(llas, 
                    XY, 
                    8, 
                    res = 0.5, 
                    func = user_func
)
#
# same result using a user-input circular roi
roi <- sf::st_as_sf(XY, 
                    coords = c("X", "Y"),
                    crs = sf::st_crs(2154)
)
roi <- sf::st_buffer(roi, 8)
clouds_tree_metrics(llas,
                    XY,
                    8,
                    roi = roi,
                    res = 0.5,
                    func = user_func
)

lidaRtRee documentation built on April 3, 2025, 10:29 p.m.