View source: R/canopy_structure.R
canopy_structure | R Documentation |
Estimates the canopy structure from a discrete returns scan from different TLS.
canopy_structure( TLS.type, scan, zenith.range, zenith.rings, azimuth.range, vertical.resolution, TLS.pulse.counts, TLS.resolution = NULL, TLS.coordinates = c(0, 0, 0), TLS.frame = NULL, TLS.angles = NULL, threads = 1 )
TLS.type |
A |
scan |
If |
zenith.range |
If |
zenith.rings |
If |
azimuth.range |
A |
vertical.resolution |
A |
TLS.pulse.counts |
If |
TLS.resolution |
If |
TLS.coordinates |
A |
TLS.frame |
If |
TLS.angles |
A |
threads |
An |
Since scan
describes discrete returns measured by the TLS, canopy_structre
first simulates the number of pulses emitted based on Danson et al. (2007). The simulated pulses are
created based on the TLS properties (TLS.pulse.counts, TLS.resolution, TLS.frame
) assuming that the scanner is perfectly balance. Then these pulses are rotated (rotate3D
) based on the TLS.angles
roll, pitch, and yaw, and move to TLS.coordintates
to simulate the positioning of the scanner during the scan
. Rotated simulated-pulses of interest and scan
returns are then extracted based on the zenith.range
and azimuth.range
for a given number of zenith.rings
, azimuth.rings
and vertical profiles.
The probability of gap (Pgap) is then estimated using the frequency of pulses and returns. For TLS.type = "multiple"
, the frequency of returns is estimated using the sum of 1/target count following Lovell et al. (2011).
Using the Pgap estimated per each zenith ring and vertical profile, canopy_structure
then estimates the accumulative L(z) profiles based on the closest
zenith ring to 57.5 (hinge region) and, if TLS.type = "fixed.angle"
, the f(z) or commonly named PAVD based on the ratio of the
derivative of L(z) and height (z) following Jupp et al. 2009 (Equation 18). If TLS.type
is equal to "single"
or "multiple"
, canopy_structure
also
estimates the normalized average weighted L/LAI, and then PAVD based on the L (hinge angle) at the highest height (LAI) and the ratio between the derivative
of L/LAI (average weighted) and the derivative of z (Jupp et al. 2009; Equation 21).
Jupp et al. 2009 excludes the zero zenith or fist ring to conduct the average weighted L/LAI estimations, canopy_structre
does not excludes this sections since it depends on the regions of interest of the user.
Therefore, user should consider this difference since it may introduce more variability to profile estimations.
For any TLS.type
, it returns a data.table
with the height profiles defined by vertical.resolution
, the gap probability based on the zenith.range
and zenith.rings
, and
the accumulative L(z) profiles based on the closest zenith ring to 57.5 degrees (hinge angle). If TLS.type
is equal to "fixed.angle"
, it returns f(z) or commonly named PAVD based on
on the ratio of the derivative of L(z) and the derivative of height (z). If TLS.type
is equal to "single"
or "multiple"
, it returns the normalized average weighting L/LAI, and PAVD: based
on the L (hinge angle) at the highest height and the ratio between the derivative of L/LAI average weighted and the derivative of z.
J. Antonio Guzmán Q.
Danson F.M., Hetherington D., Morsdorf F., Koetz B., Allgower B. 2007. Forest canopy gap fraction from terrestrial laser scanning. IEEE Geosci. Remote Sensing Letters 4:157-160. doi: 10.1109/LGRS.2006.887064
Lovell J.L., Jupp D.L.B., van Gorsel E., Jimenez-Berni J., Hopkinson C., Chasmer L. 2011. Foliage profiles from ground based waveform and discrete point LiDAR. In: SilviLaser 2011, Hobart, Australia, 16–20 October 2011.
Jupp D.L.B., Culvenor D.S., Lovell J.L., Newnham G.J., Strahler A.H., Woodcock C.E. 2009. Estimating forest LAI profiles and structural parameters using a ground-based laser called “Echidna®”. Tree Physiology 29(2): 171-181. doi: 10.1093/treephys/tpn022
data(TLS_scan) #Using a multiple return file #Select the four columns required TLS_scan <- TLS_scan[, 1:4] #This will take a while# a <- canopy_structure(TLS.type = "multiple", scan = TLS_scan, zenith.range = c(50, 70), zenith.rings = 4, azimuth.range = c(0, 360), vertical.resolution = 0.25, TLS.pulse.counts = c(2082, 580), TLS.frame = c(30, 130.024, 0, 359.90), TLS.angles = c(1.026, 0.760, -110.019)) #Using a single return file data(TLS_scan) #Subset to first return observations TLS_scan <- TLS_scan[Target_index == 1, 1:3] #This will take a while# canopy_structure(TLS.type = "single", scan = TLS_scan, zenith.range = c(50, 70), zenith.rings = 4, azimuth.range = c(0, 360), vertical.resolution = 0.25, TLS.pulse.counts = c(2082, 580), TLS.frame = c(30, 130.024, 0, 359.90), TLS.angles = c(1.026, 0.760, -110.019))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.