Sylva¶
NOTE: This software is still in ALPHA development.
Terrestrial (TLS) and airborne (ALS) laser scanning processing for forest
ecology and remote sensing. A Rust core (the sylva-rs crate) does the work; Python gets a
numpy-friendly API (import sylva) and a sylva command.
pip install maturin && maturin develop --release
import sylva
from sylva import ground, trees
cloud = ground.classify_ground_csf(sylva.read("plot.laz"))
cloud = ground.normalize_height(cloud, ground.make_dtm(cloud, resolution=0.5))
stems = trees.detect_stems(cloud) # positions and DBH
labels = trees.segment_trees(cloud, stems) # tree_id per point
What is in it¶
| Module | What it does |
|---|---|
sylva.io |
LAS/LAZ (typed extra bytes, CRS), PLY (incl. raycloudtools ray clouds), XYZ/CSV/PTS, RIEGL .rxp via RiVLib and .rdbx via librdb, RiSCAN project parsing |
sylva.geo.coords |
translation, rotation, recentring, reprojection between CRSs, applying transform files to many scans |
sylva.filters |
voxel / random / Poisson-disk subsampling, box & cylinder crops, statistical & radius outlier removal, PCA normals, planarity, Euclidean clustering, kNN |
sylva.ground |
Cloth Simulation Filter and Progressive Morphological Filter ground classification, DTM (lowest point, TIN, natural neighbour or IDW), height normalisation, CHM |
sylva.geo.interpolate |
attributes carried between clouds, grids from points (IDW, TIN, natural neighbour), rasters sampled onto points |
sylva.geo.masks |
masks and crops by polygons, rasters, attribute expressions and distance to another cloud |
sylva.trees |
RANSAC circle fitting, stem detection & DBH, basal area, taper profiles, graph-based tree segmentation, tree heights, crown metrics |
sylva.canopy |
voxel grids, contact-frequency PAD profiles, zenith-ring gap fraction, hinge/Miller LAI, ray-traced density grids from pulse data |
sylva.voxels |
ray-traced voxels (port of raycloudtools rayvoxel): echo-weighted free / potential path lengths, FPL / PPL / transmittance / Bailey attenuation, analytic or estimated leaf-angle G, PAD / LAD / WAD, occlusion, sub-voxel exploration, QSM wood volume, .vox export |
sylva.registration |
Kabsch, point-to-point / point-to-plane (trimmed) ICP, scan merging |
sylva.coreg |
marker-free coregistration of scan positions from the trees and the ground, with reflectors where present, and a report of the stem agreement |
sylva.qsm |
cylinder fitting, geodesic skeletonisation, cylinder QSMs with volumes and branch orders, a QSM for every tree of a plot, buttress meshes, _trees.txt export |
sylva.change |
change between two epochs of a plot: alignment, tree matching and increments, plot summaries, point change (C2C, M3C2, DEM of difference, voxel occupancy), QSM change, each labelled trusted or not |
sylva.als |
airborne lidar over tiled areas: catalogues and buffered chunks, ground, DTM, CHM, normalisation, filtering, retiling and thinning |
sylva.als.metrics |
area-based metrics (the standard height, intensity and return-number set, cover, gap fraction) as rasters or plot tables |
sylva.als.trees |
tree tops, crowns (watershed, Dalponte 2016, Li 2012), crown outlines and labelled tiles |
sylva.als.canopy |
pulses from the flight trajectory, gap-fraction and PAD profiles corrected for beam angle, ray-traced voxels |
sylva.fusion |
TLS and ALS together: a plot registered on a survey, stems linked to airborne trees, merged clouds and plant area profiles, plot values upscaled with leave-one-out checks |
sylva.waveform |
LAS wave packets and PulseWaves, Gaussian decomposition into echoes, waveforms to pulses |
sylva.Shots |
pulse-centric data (origin, direction, CSR echoes) for ray-based metrics, with a compact Parquet file format that stores misses without far points and streams into the voxeliser |
sylva.leaves |
graph-based leaf/wood separation, leaf angle distributions, leaf area density from points or voxels, leaf meshes placed on a QSM |
sylva.quality |
scan noise and per-scan registration offsets measured on tree stems |
sylva.synthetic |
small synthetic trees, plots, scans, repeat surveys, airborne flights and waveforms with known answers, for examples and tests |
Where to start¶
- Install, then the plot workflow: ground, stems, segmentation, crowns.
- Point clouds and files, filtering and registration and trees and crowns: each stage and its settings.
- Operational use: batch processing, quality flags, reproducibility and what has been validated.
- Pulse data:
Shots, RiSCAN projects, gap fraction, and the Parquet shots file format. - Ray-traced voxels: echo-weighted attenuation and plant area density.
- QSMs: wood filtering and cylinder models of single trees.
- Coordinates, interpolation and masking: moving clouds between frames and coordinate systems, carrying values between clouds and grids, and selecting points by area, raster, expression or proximity.
- Change detection: two epochs of a plot, from alignment and matched trees to point, voxel and QSM change, with what can and cannot be trusted.
- Airborne lidar: tiles (ground, DTM, CHM over large areas), area-based metrics, trees, canopy structure from the pulses and full waveforms.
- Example notebooks, one per stage, on a tile of the TERN Litchfield plot and on synthetic data.
- Benchmarks against reference plots, felled trees and raycloudtools.
- The function index lists every public function; the API reference pages hold each one's parameters with units, return values and exceptions, generated from the docstrings.
- Command line: the
sylvacommand for shell pipelines.
Related tools¶
- Segfix: a GUI for correcting the
instance segmentation of a plot; it reads and writes the
tree_idcolumn Sylva produces,-1and all (how). - raycloudtools: ray
clouds, which
sylva.readandShots.from_ray_cloudaccept. - Everything Sylva ports or takes influence from is cited on the references page.
Author and licence¶
Tim Devereux, The University of Queensland.
Free software under the GNU General Public License v3.0 or later: you may use, study, change and share it, and anything you distribute that builds on it carries the same licence. See the LICENSE file in the repository.
Cite it as: Devereux, T. (2026). Sylva: terrestrial and airborne laser scanning processing for forest ecology (version 0.2.1) [Computer software]. The University of Queensland. https://github.com/UQ-EORC/Sylva
@software{sylva,
author = {Devereux, Tim},
title = {Sylva: terrestrial and airborne laser scanning processing
for forest ecology},
year = {2026},
version = {0.2.1},
organization = {The University of Queensland},
url = {https://github.com/UQ-EORC/Sylva}
}