"CHM with Detected Tree Tops" shows lack of trees

3 visualizzazioni (ultimi 30 giorni)
Pedro
Pedro il 15 Set 2023
Risposto: Rahul il 12 Ago 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

Risposte (1)

Rahul
Rahul il 12 Ago 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:

Categorie

Scopri di più su Electrophysiology in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by