Introduction

Airborne Light Detection and Ranging (LiDAR) provides high-density, three-dimensional point clouds that capture detailed forest structure with centimetre-level vertical precision. Individual tree detection (ITD) from LiDAR data is a foundational workflow in forestry remote sensing, enabling applications such as tree-level biomass estimation, stem density mapping, and forest inventory validation.

This lab explores two fundamentally different ITD approaches implemented in the lidR R package: (1) a direct point-cloud-based method using the algorithm of Li et al. (2012), and (2) a Canopy Height Model (CHM)-based method using the algorithm of Dalponte and Coomes (2016). Both methods were applied to four 154 m diameter circular plots extracted from a 20-tile LAS catalog covering Malcolm Knapp Research Forest (MKRF), British Columbia.

The plots span a range of forest structures — from an open clearcut with isolated residual trees (Plot 1) to dense, multi-layered closed-canopy forest (Plots 2–4) — allowing comparison of algorithm performance across different stand conditions. For the CHM-based approach, the effect of raster resolution (0.5 m, 2 m, 4 m, and 10 m) on segmentation quality was also assessed.

Methods

Study Area and Data

Four plot locations were extracted from a pre-normalised LAS catalog of MKRF. Each plot was clipped as a 77 m radius circle using clip_circle(), and points below 0 m or above 65 m were removed as outliers using filter_poi(). Plot 1 (X = 531704.75, Y = 5462033) is located in a clearcut with well-separated residual trees. Plots 2–4 represent progressively denser closed-canopy conditions.

Point Cloud Segmentation — Li et al. (2012)

The segment_trees() function was applied with the li2012() algorithm to all four plots. This method operates directly on the 3D normalised point cloud without requiring any intermediate raster. It seeds from the tallest point in the cloud and grows tree segments downward using adaptive distance thresholds that switch at a height breakpoint (Zu). Default parameter values recommended by Li et al. (2012) were used throughout.

# Li2012 parameters (Li et al. 2012 defaults)
dt1 <- 1.5   # distance threshold below Zu
dt2 <- 2.0   # distance threshold above Zu
R   <- 2     # search radius around seed point
Zu  <- 15    # height breakpoint (m)
hmin <- 2   # minimum tree height (m)
speed_up <- 10 # maximum search radius cap (m)

# Apply to each plot
plot1_seg <- segment_trees(plot1,
               li2012(dt1 = dt1, dt2 = dt2, R = R,
                      Zu = Zu, hmin = hmin,
                      speed_up = speed_up))
ParameterValueDescription
dt11.5 mAdaptive distance threshold for points below Zu
dt22.0 mAdaptive distance threshold for points above Zu
R2 mSearch radius around local maxima seed points
Zu15 mHeight breakpoint separating dt1 and dt2 thresholds
hmin2 mMinimum height for a point to initiate a new tree
speed_up10 mMaximum search area radius; caps computational cost

Canopy Height Model Construction

For the CHM-based approach, pit-free CHMs were generated using rasterize_canopy() with the pitfree() algorithm. Triangulation height thresholds of 0, 10, 20, and 30 m were used with a 20 cm sub-circle radius to fill pits and a maximum edge length of 1 m. For Plot 1 a single 0.5 m CHM was produced. For Plot 2, CHMs were generated at four resolutions — 0.5 m, 2 m, 4 m, and 10 m — to assess resolution sensitivity.

# Pit-free CHM at 0.5 m resolution
chm1 <- rasterize_canopy(plot1,
                  res = 0.5,
                  algorithm = pitfree(thresholds = c(0, 10, 20, 30),
                                   subcircle = 0.2,
                                   max_edge = c(0, 1)))

# Detect tree tops with local maximum filter
ttops1 <- locate_trees(chm1, lmf(ws = 5, hmin = 2))

CHM-Based Segmentation — Dalponte and Coomes (2016)

Tree tops detected by the local maximum filter (lmf, 5 m circular window, 2 m minimum height) served as seed points for the dalponte2016() region-growing algorithm. Crown boundaries were grown from each seed using two fractional-height thresholds: th_seed for the initial seed region and th_cr for subsequent crown expansion. Segmentation was performed for Plot 2 at all four CHM resolutions to evaluate how pixel size affects tree delineation accuracy.

# Dalponte2016 segmentation
seg2_05 <- segment_trees(plot2,
             dalponte2016(chm = chm2_05,
                          treetops = ttops2_05,
                          th_tree = 2,
                          th_seed = 0.45,
                          th_cr = 0.55,
                          max_cr = 10))
ParameterValueDescription
ws5 mCircular moving window radius for local maximum filter
th_tree2 mMinimum CHM height to be labelled as a tree
th_seed0.45Fraction of tree-top height required for seed region
th_cr0.55Fraction of tree-top height for crown expansion
max_cr10 mMaximum allowed crown radius

Results

Plot 1 — Canopy Height Model

The pit-free CHM at 0.5 m resolution clearly captured the isolated tree crowns within Plot 1's clearcut environment. Individual canopy clusters are well defined against the low-vegetation background, with tree heights ranging from approximately 10 m to 42 m. The yellow peaks in each crown blob correspond to the apex of each tree.

Plot 1 Canopy Height Model at 0.5m resolution
Figure 1. Plot 1 — Canopy Height Model at 0.5 m resolution (pit-free algorithm). Colour scale represents height in metres. Isolated tree crowns are clearly visible against the low-vegetation background.

Tree Top Detection — Plot 1

The local maximum filter detected 51 tree tops within Plot 1. Most red crosses (+) are correctly located at the apex of visible canopy blobs. A small number of false positives appear in the low-vegetation inter-crown areas, likely corresponding to small regenerating vegetation rather than mature trees. These could be reduced by increasing the hmin threshold.

Plot 1 CHM with detected tree tops overlaid
Figure 2. Plot 1 — CHM (0.5 m) with tree tops detected by the local maximum filter (ws = 5 m, hmin = 2 m) shown as red crosses. 51 tree tops were identified.
51
Tree tops detected
Plot 1 (0.5 m CHM)
0.5 m
Optimal CHM resolution
for individual crown delineation
4
CHM resolutions compared
for Plot 2

Resolution Sensitivity — Plot 2 CHMs

CHMs generated for Plot 2 at four spatial resolutions highlight the trade-off between detail and generalisation. At 0.5 m, individual crown boundaries are clearly resolved and inter-crown gaps (low-return areas) are preserved. As resolution coarsens to 2 m and 4 m, adjacent crowns begin to merge and gaps fill in, making individual tree tops harder to distinguish. At 10 m, the CHM retains only broad height trends and most crown-scale variation is lost — making accurate tree-top detection and subsequent segmentation unreliable.

Plot 2 CHMs at 0.5m, 2m, 4m and 10m resolution
Figure 3. Plot 2 — Pit-free CHMs at four spatial resolutions (0.5 m, 2 m, 4 m, 10 m). Finer resolution preserves individual crown structure; coarser resolution merges adjacent crowns and obscures tree-top locations.

Dalponte2016 Segmentation — 3D Visualisation

The Dalponte2016 algorithm was applied to Plot 2 using the 2 m CHM. The 3D point cloud coloured by tree ID shows distinct crown clusters, each assigned a unique colour. The segmentation performs well for the larger dominant trees whose crowns are clearly expressed in the CHM. Smaller suppressed trees in the understorey are more difficult to resolve and may be absorbed into the crown of a neighbouring dominant, which is a known limitation of CHM-based approaches in closed-canopy forests.

3D point cloud coloured by tree ID after Dalponte2016 segmentation
Figure 4. Plot 2 — 3D point cloud coloured by tree ID following Dalponte2016 segmentation (2 m CHM). Each unique colour represents an individually segmented tree. Dominant overstorey trees are well separated; understorey crowns show some merging.

Algorithm Comparison

Li et al. (2012) begin classification at the tree top — the tallest point in the point cloud — because this is where neighbouring crowns are most spatially separated. Growing segments downward from the apex exploits the natural funnel geometry of conifer crowns. This top-down strategy reduces the misclassification risk that would arise from starting in the densely overlapping lower canopy.

The Dalponte and Coomes (2016) approach is inherently two-dimensional in its segmentation logic but benefits from an adjustable two-stage threshold: th_seed tightly constrains the initial seed region to the brightest canopy pixels near each tree top, while the more permissive th_cr then expands the crown boundary outward. This separation prevents small adjacent crowns from being prematurely absorbed during seeding while still allowing the full crown to be captured during expansion.

Across the four plots, Li2012 performed best in Plot 1, where the open clearcut structure matched the algorithm's design conditions of well-separated crowns. In denser Plots 2–4, both methods encountered increasing crown overlap and inter-tree competition for points. A 0.5 m CHM resolution is recommended for MKRF-wide Dalponte2016 segmentation, as it preserves the crown-scale structural detail necessary for accurate tree-top detection and crown boundary delineation.

References