"CHM with Detected Tree Tops" shows lack of trees

1 view (last 30 days)
Pedro
Pedro on 15 Sep 2023
Answered: Rahul on 12 Aug 2025
Hi there
I'm using the following code to calculate tree heights.
The issue I'm facing is that some trees are not being recognized/segmented, i.e. there are gaps. The image "CHM with Detected Tree Tops" shows the CHM with the canopys which are recognizable by human eye, but for some reason the detect tree tops code doesn't put the red dots on all the trees. It seems like the segmentation is considering a cluster of trees as one. I tried several grid resolutions and the smaller the number, the better the results. But it is still missing some trees. I also tried a mintreeheight of 2 meters (the trees of the terrain where way above this number).
What are the possible causes for this lack trees? Besides this parameters, the code is the same as in the link above.
Thanks

Answers (1)

Rahul
Rahul on 12 Aug 2025
Hi Pedro,
I understand that you are working with the Extraction of Forest Metrics and Individual Tree Attributes example to detect tree tops from a Canopy Height Model (CHM), and that certain trees which are visually distinct are not being marked by the 'detectTreeTops' function. It is observed that varying 'gridResolution' and 'MinTreeHeight' improves results to some extent, yet some trees remain undetected, particularly when multiple canopies are close together and are segmented as one.
You can consider the following possible influencing factors while working with LiDAR-based tree segmentation workflows in MATLAB:
  • CHM resolution: Coarser resolutions can merge nearby canopy peaks, while overly fine grids may introduce noise.
  • 'WindowSize' parameter in 'detectTreeTops': Larger values merge adjacent trees, whereas smaller values can detect noise as trees.
  • Smoothing or filtering: Excessive smoothing on the CHM can remove smaller peaks before detection.
  • Local maxima detection limitations: Overlapping crowns may not produce distinct peaks in the CHM, causing under-detection.
It could be a good practice to experiment with smaller 'WindowSize' values and different CHM resolutions to better separate adjacent trees. Preprocessing the CHM with lighter smoothing or applying segmentation algorithms such as 'watershed' on the CHM can also improve results.
For example:
% Example: Adjusting detection parameters
% chm: Canopy Height Model raster
treeTops = detectTreeTops(chm, ...
'MinTreeHeight', 2, ...
'WindowSize', 3); % smaller window to separate nearby peaks
If you have control over CHM preprocessing, you can also try the following snippet:
% Optional: Light smoothing to reduce noise while keeping peaks
chmFiltered = imgaussfilt(chm, 0.5);
treeTops = detectTreeTops(chmFiltered, ...
'MinTreeHeight', 2, ...
'WindowSize', 3);
Fore more information regarding various functions and parameters mentioned in the given code snippet, you can refer to the following documentation links:

Categories

Find more on Electrophysiology in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!