Returns the diameter above buttresses (DAB) and the functional diameter above buttresses (fDAB) of a tree measured from a tree point cloud.
Usage
dab_pc(
pc,
thresholdbuttress = 0.001,
maxbuttressheight = 7,
slice_thickness = 0.06,
functional = TRUE,
concavity = 4,
dtm = NA,
r = 5,
plot = FALSE,
plotcolors = c("#000000", "#808080", "#1c027a", "#08aa7c", "#fac87f")
)
Arguments
- pc
The tree point cloud as a data.frame with columns X,Y,Z. Output of
read_tree_pc
.- thresholdbuttress
Numeric value (default=0.001) that is multiplied with the radius to determine if the stem is circular or irregular at the height the slice is taken. For example with the default value 0.001: when the average residual (obtained after an initial circle fitting at 1.3 m) exceeds a value of 0.001 times the radius, indicating a non-circular (irregular) stem shape and presumably buttresses, the circle fitting process is repeated with a new slice 6 mm higher than the previous one until a slice above the buttresses is reached.
- maxbuttressheight
Numeric value (default=7) that limits the height at which the diameter is measured. When this height is reached (because residuals do not become smaller than thresholdbuttress * R), the thresholdbuttress value is increased with 0.0005 and the fitting starts again at 1.3 m.
- slice_thickness
Numeric value (default = 0.06) that determines the thickness of the slice which is used to measure the diameter.
- functional
Logical (default=FALSE), indicates if the functional diameter should be calculated.
- concavity
Numeric value (default=4) concavity for the computation of the functional diameter using a concave hull based on
concaveman
.- dtm
The digital terrain model as a data.frame with columns X,Y,Z (default = NA). If the digital terrain model is in the same format as a point cloud it can also be read with
read_tree_pc
.- r
Numeric value (default=5) r which determines the range taken for the dtm. Should be at least the resolution of the dtm. Only relevant when a dtm is provided.
- plot
Logical (default=FALSE), indicates if the optimised circle fitting is plotted.
- plotcolors
list of five colors for plotting. Only relevant when plot = TRUE. The stem points above buttresses, stem points at breast height, fitted circle, the concave hull and the estimated center are colored by the first, second, third, fourth and fifth element of this list respectively.
Value
List with the diameter of the stem above buttresses, the residuals on the fitting, and the functional diameter at breast height. Also optionally (plot=TRUE) plots the circle fitting on the horizontal slice which is then included in the list output.
Details
The DAB is measured as the diameter of the optimal circle fitted through a
6mm thick horizontal slice taken above the buttresses using using
diameter_slice_pc
. A least squares circle fitting algorithm was
applied to find the optimal fit. The height at which the horizontal slice is
taken, is determined iteratively. Starting at 1.27 m to 1.33 m from the
lowest point of the tree point cloud. The average residual between the points
and the fitted circle is calculated. When the average residual exceeds a
value of "thresholdbuttress" times the radius, indicating a non-circular
(irregular) stem shape and presumably buttresses, the process is repeated
with a new slice 6 mm higher than the previous one until a slice above the
buttresses is reached. When the "maxbuttressheight" is exceeded the iterative
process is restarted with a "thresholdbuttress" increased with 0.0005. At the
determined height above buttresses also the functional diameter is calculated
using diameter_slice_pc
. When the bottom of the point cloud is
incomplete or obstructed you can choose to add a digital terrain model as an
input which is used to estimate lowest point of the point cloud in order to
obtain slices at the correct height of the tree.
Examples
if (FALSE) {
# Read tree point cloud and calculate the DAB
pc_tree <- read_tree_pc(PC_path = "path/to/point_cloud.txt")
dab <- dab_pc(pc = pc_tree)
# and plot the circle fitting
output <- dab_pc(pc = pc_tree, plot = TRUE)
dab <- output$dab
# with non-default settings
dab <- dab_pc(pc = pc_tree, thresholdbuttress = 0.002, maxbuttressheight = 5)
}