| Title: | Estimate Crown Scorch from Terrestrial LiDAR Scans |
|---|---|
| Description: | Estimates tree crown scorch from terrestrial lidar scans collected with a RIEGL vz400i. The methods follow those described in Cannon et al. (2025, Fire Ecology 21:71, <doi:10.1186/s42408-025-00420-0>). |
| Authors: | Jeffery Cannon [aut, cre], Andrew Whelan [ctb] |
| Maintainer: | Jeffery Cannon <[email protected]> |
| License: | GPL-3 |
| Version: | 0.1.1 |
| Built: | 2026-05-19 09:13:09 UTC |
| Source: | https://github.com/jbcannon/crownscorchtls |
Function to provide relative Reflectance for RIEGL vz400i. Lidar prediction of crown scorch is based on relative range-corrected reflectance relative to a white reference object orthonormal to scanner. Raw range-corrected amplitudes from RIEGL vz400i are linearly correlated to relative intensity which usually ranges from -20 dB to 0 dB
add_reflectance(las)add_reflectance(las)
las |
'LAS' object from 'lidR' package representing an individually segmented tree containing an 'Intensity' column representing 16-bit range- corrected amplitude from RIEGL vz400i Terrestrial Lidar Scanner |
modified LAS object with Reflectance column
library(lidR) library(CrownScorchTLS) #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') las = add_reflectance(las) colnames(las@data)library(lidR) library(CrownScorchTLS) #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') las = add_reflectance(las) colnames(las@data)
Generates a histogram of Reflectance intensities for prediction with Random Forests. Histogram breaks can be defined.
get_histogram(las, breaks = seq(-20, 0, by = 0.2))get_histogram(las, breaks = seq(-20, 0, by = 0.2))
las |
'LAS' object from 'lidR' package representing an individually segmented tree containing a 'Reflectance' column representing relative reflectance from from RIEGL vz400i Terrestrial Lidar Scanner. See 'add_reflectance()' |
breaks |
sequence of breaks for histograms, default from Cannon et al. 2025. |
data.frame with columns intensity and density
library(lidR) library(CrownScorchTLS) #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') las = add_reflectance(las) histogram = get_histogram(las) plot(density ~ intensity, data=histogram, xlab='Reflectance (dB)', type='l')library(lidR) library(CrownScorchTLS) #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') las = add_reflectance(las) histogram = get_histogram(las) plot(density ~ intensity, data=histogram, xlab='Reflectance (dB)', type='l')
This function follows methods in Cannon et al. 2025 to predict crown scorch of a 'LAS' object representing an individual tree collected using a RIEGL vz400i Terrestrial Lidar system. The function uses the 'relative reflectance' (in decibels) and predicts crown scorch using 'randomForests' following Cannon et al. 2025
predict_scorch(las, model = NULL, plot = FALSE)predict_scorch(las, model = NULL, plot = FALSE)
las |
'LAS' object from 'lidR' package representing an individually segmented tree collected from RIEGL vz400i Terrestrial Lidar Scanner |
model |
'randomForests' model object containing histogram data generated from 'get_histogram' function. if 'model' is 'NULL', then default model from Cannon et al. 2025 is used. But custom model may be generated. |
plot |
Boolean indicating whether reflectance histogram should be plotted |
predicted scorch as numeric vector
library(lidR) library(CrownScorchTLS) #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') predict_scorch(las) #using default model from Cannon et al. 2025library(lidR) library(CrownScorchTLS) #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') predict_scorch(las) #using default model from Cannon et al. 2025
This function identifies and removes tree boles using the 'TreeLS' package available at https://github.com/tiagodc/TreeLS
remove_stem(las)remove_stem(las)
las |
'LAS' object from 'lidR' package representing an individually segmented tree |
LAS object with stem removed
library(lidR) library(CrownScorchTLS) #' #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') #plot(las) crown_only = remove_stem(las) #plot(crown_only)library(lidR) library(CrownScorchTLS) #' #download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file) # or load your own data #las <- readLAS('C:/path/to/your/file.laz') #plot(las) crown_only = remove_stem(las) #plot(crown_only)
Classify stem points of all trees in a normalized
point cloud. Stem denoising methods are prefixed by stm.
This file includes code derived from the TreeLS package by Tiago de Conto
Original source: https://github.com/tiagodc/TreeLS
License: GPL-3
The code below is copied and adapted from TreeLS::stemPoints for the purpose
of maintaining CRAN compatibility. All modifications are clearly documented.
stemPoints(las, method = stm.hough())stemPoints(las, method = stm.hough())
las |
|
method |
Function to classify stems. Default: |
LAS object.
This function includes code derived from TreeLS::stemPoints (GPL-3 license). See source for details. #' @examples library(lidR) library(CrownScorchTLS)
#download external data from github repo url <- paste0( "https://raw.githubusercontent.com/jbcannon/CrownScorchTLS-data/main/data/manual-clip-trees/", "M-04-15549_post.laz") las_file = tempfile(fileext = paste0(".", tools::file_ext(url))) download.file(url, las_file, mode = "wb", quiet = TRUE) las <- readLAS(las_file)
# or load your own data #las <- readLAS('C:/path/to/your/file.laz')
las$Z = las$Z - min(las$Z) # Normalize las las <- stemPoints(las) # Classify stem points #plot(las, color='Stem')
Carvalho, T. (2017). TreeLS: Tools for Terrestrial LiDAR in R. GitHub: https://github.com/tiagodc/TreeLS
This function is meant to be used inside stemPoints. It applies an adapted version of the Hough Transform for circle search. Mode details are given in the sections below.
This file includes code derived from the TreeLS package by Tiago de Conto
Original source: https://github.com/tiagodc/TreeLS
License: GPL-3
The code below is copied and adapted from TreeLS::stemPoints for the purpose
of maintaining CRAN compatibility. All modifications are clearly documented.
stm.hough( h_step = 0.5, max_d = 0.5, h_base = c(1, 2.5), pixel_size = 0.025, min_density = 0.1, min_votes = 3 )stm.hough( h_step = 0.5, max_d = 0.5, h_base = c(1, 2.5), pixel_size = 0.025, min_density = 0.1, min_votes = 3 )
h_step |
|
max_d |
|
h_base |
|
pixel_size |
|
min_density |
|
min_votes |
|
LAS object.
LAS@data Special FieldsMeaninful new fields in the output:
Stem: TRUE for stem points
Segment: stem segment number (from bottom to top and nested with TreeID)
Radius: approximate radius of the point's stem segment estimated by the Hough Transform - always a multiple of the pixel_size
Votes: votes received by the stem segment's center through the Hough Transform
#'
The Hough Transform circle search algorithm used in TreeLS applies a constrained circle search on discretized point cloud layers. Tree-wise, the circle search is recursive, in which the search for circle parameters of a stem section is constrained to the feature space of the stem section underneath it. Initial estimates of the stem's feature space are performed on a baselise stem segment - i.e. a low height interval where a tree's bole is expected to be clearly visible in the point cloud. The algorithm is described in detail by Conto et al. (2017).
This adapted version of the algorithm is very robust against outliers, but not against forked or leaning stems.
This function includes code derived from TreeLS::stemPoints (GPL-3 license). See source for details.
Carvalho, T. (2017). TreeLS: Tools for Terrestrial LiDAR in R. GitHub: https://github.com/tiagodc/TreeLS
Olofsson, K., Holmgren, J. & Olsson, H., 2014. Tree stem and height measurements using terrestrial laser scanning and the RANSAC algorithm. Remote Sensing, 6(5), pp.4323–4344.
Conto, T. et al., 2017. Performance of stem denoising and stem modelling algorithms on single tree point clouds from terrestrial laser scanning. Computers and Electronics in Agriculture, v. 143, p. 165-176.