Diameter at Breast Height Retrieval from Mobile Mapping System Point Cloud using Slicing technique

Yu Kai Him Otto
Forestree
Published in
5 min readJan 20, 2024

Diameter at Breast Height (DbH) is an important tree metric and metadata for tree inventory survey, it can indicate the tree’s relative age, size, and stage for forestry development. In the MMS (Mobile Mapping System) LiDAR point cloud, the collection has been rapidly growing in recent years. In this pilot study, we are going to utilize those collected point clouds for urban forestry and remote sensing by slicing those target tree groups along the roadside.

Target tree with Segmented DbH

During the MMS data capturing process, both ground and non-ground points will be collected with multiple returns, and then the collected data can be used for tree counting and DbH retrievals using the DTM (digital terrain model) and slicing techniques. The Digital terrain model was generated by the Cloth simulation filtered ground points. The terrain model was majorly the ground surface, such as asphalt, cement, and bare soil. There will be some detailed surfaces, like grassland, shrubs and man-made features (like kerb) that were distinguished differently from the true ground surface. Those detailed surfaces will be classified as non-ground points. Therefore, there are still some so-called “ground” elements after the cloth simulation filter was applied.

Ground (white) and Non-ground (elevation color) Point Cloud after Cloth Simulation Filter

Digital terrain model for DbH retrieval with slicing

Based on the DbH measured guideline, it should measure from the above 1.3 meters ground level, then we can use the generated DTM to slice the scanned trees with 1.3 meters + DTM meters level. Unlike the normal slice with designated elevation, it was sliced according to the terrain, so there will be some level difference among the tree-sliced DbH. The slicing will result in three general conditions, (1) sliced with trunk and branches, (2) sliced with trunk and leaves, (3) sliced with shrubs.

Digital Terrain Model (White), 1.3 meter + DTM (elevation color from red to blue) and target trees (elevation color from red, white and blue)

The first slice condition with trunk and branches will be the best and assumed scenario since the measurement of the DbH has counted both trunk and branches, then we can generally retrieve the DbH by minimum bounding box computation. The MBB (minimum bounding box) computation was based on the maximum and minimum x and y coordinates with the sliced segmented point cloud. DbH can be derived from the MBB (length + width) divided by 2. The MBB process should be applied after the clustering-based segmentation for individual tree DbH retrieval.

The second sliced result with trunk and leaves will be a more complex scenario for DbH computation since the DbH measurement only counts for the wood bodies (both trunk and branches), those leaves partials should be segmented out with intensity thresholding to avoid miscalculation. The trunk and leaves condition usually happens in some roadside tree decay replacement cases, those planted trees are small and tiny, then both leaves and trunk will be included in the 1.3 meters above the ground.

Intensity thresholding for leaf-on and leaf-off segmentation

For the third sliced result with shrubs, those results will be ignored and filtered out. Since shrubs have insignificant scanned parts (footprint) scanned from the ground. Then, it is hard to segment those shrubs with an MMS point cloud, more dense point density is needed for shrub DbH detection. On the other hand, in Hong Kong only trees larger than 90 mm (9 cm) will be regarded as trees, for those shrubs they are usually 50 to 70 mm. So, the small tree and shrub may not be the target of the tree inventory and DbH retrieval process.

Clustering-based segmentation

Segmented DbH and target tree species (bottom up viewing)

After the slicing process, most of the tree point cloud was aggregated individually. Based on the point density and arrangement, we can segment the tree DbH by a point-dense clustering method (such as Density-Based Spatial Clustering of Applications with Noise). As the DBSCAN can group with the co-dominate/multi-trunk and branches together with the given sample distance and octree, then the DbH can proceed to batch MBB computation with Python.

Some sample case of the DBSCAN

Minimum bounding box computation and cases

Finally, for the most important part, compute the DbH by minimum bounding box (MBB). There will be three conditions that will happen in the cluster-segmented DbH point cloud, which are (1) partially covered, (2) half/side covered, and (3) fully covered.

The first case were the most common cases with only partial coverage, since the MMS has not fully coverage to the forested areas along the roadside, the scanner was to travel across the side of the tree. Then, around 25% trunk area will be covered, also there is overlap in the congested roadside area, those overlapping will reduce the laser penetration toward the inner side of the forested areas along the road.

The second with half/ side coverage is also common on the roadside, especially for those surrounding (near) the road kerb. As most of the MMS can only scanned in two directions, the inner part of the trunk will not be covered, in around 50% coverage.

The most ideal case is the third full coverage case, still, it only happens along the safety island on the roundabout. Due to the MMS traveling across the whole roundabout multi-direction scanning will result in the point cloud that covers almost 100% of the tree trunk for DbH delineation and computation.

Python code for the DbH MBB computation:

import os
import csv
import numpy as np
from scipy.spatial import ConvexHull

folder_path = r'D:\MMS_LiDAR_TaiPo'
output_csv_path = r'D:\MMS_LiDAR_TaiPo\DbH.csv'

with open(output_csv_path, 'w', newline='') as csv_file:
writer = csv.writer(csv_file)
writer.writerow(['File', 'DbH'])

for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
file_path = os.path.join(folder_path, filename)
data = np.genfromtxt(file_path, delimiter=' ', skip_header=1)
points = data[:, :3]
hull = ConvexHull(points)
vertices = hull.vertices
bounding_box_points = points[vertices]
min_x, max_x = np.min(bounding_box_points[:, 0]), np.max(bounding_box_points[:, 0])
min_y, max_y = np.min(bounding_box_points[:, 1]), np.max(bounding_box_points[:, 1])
min_z, max_z = np.min(bounding_box_points[:, 2]), np.max(bounding_box_points[:, 2])
avg_xy_difference = (((max_x - min_x) + (max_y - min_y)) / 2)
writer.writerow([filename, avg_xy_difference])
Sample of the Slicing workflow and segmentation

Reference

Forest Inventory and Analysis (FIA), US Department of Agriculture (USDA) Forest Service http://fia.fs.fed.us/library /field-guides-methods-proc/

International Society of Arboriculture (ISA) http://www.isa-arbor.com/publications/tree-ord/measuringdbh.aspx

Acknowledgments

This is a volunteering pilot study from the Team of Forestree, Remote Sensing and Forestry, used to study the close-ranging photogrammetry, image processing and computer vision.

--

--

Yu Kai Him Otto
Forestree

Student from Hong Kong, studying in Land Surveying and Geo-informatics, PolyU.