
Phytograph¶
A desktop application for measuring, comparing, and modeling plant architecture from LiDAR scans — built for plant scientists who work with point clouds, meshes, skeletons, and procedural plant models.
-
Import LiDAR scans
Drag and drop
.las,.laz,.e57,.ptx,.ply,.pcd, or ASCII (.xyz,.txt,.csv,.pts,.asc,.ascii) point clouds into a 3D viewer that handles tens of millions of points. RIEGL.riprojectand.PROJscanner projects import directly, and an SBET trajectory places a moving-platform scan. Save the whole scene as a.phytoproject. -
Clean and prepare
Transform, crop, erase, filter, resample, and cross-section a cloud, compute normals and new scalar fields — then backfill the sky/miss rays that leaf area density depends on.
-
Register and compare
Auto-register rotated scans, refine with ICP, and stitch overlaps into one cloud — with cloud-to-mesh distance statistics (mean, median, percentiles, and coverage at fractions of the bounding-box diagonal).
-
Segment scans
Classify ground with a cloth simulation filter, separate wood from leaf with a machine-learning model, split a terrestrial or airborne plot into individual trees, and label a herbaceous plant's soil, stem, and individual leaflets — then carry the labels through the rest of the pipeline.
-
Label points by hand
Paint your own classes with a lasso or brush to correct a classifier or build ground truth, with per-class counts and undo.
-
Measure leaf angles
Triangulate a leaf-on scan into leaf surfaces and read their orientations — inclination and azimuth distributions, canonical de Wit fits, and the G(θ) that leaf area density depends on. The same triangulation also reconstructs branch and canopy surfaces.
-
Extract skeletons
Pull topological skeletons out of woody scans, with branch order colored by Strahler number and total length reported.
-
Build QSMs
Reconstruct dormant trees as connected cylinders with fitted radii, segment continuous shoots, and classify them by shoot rank — with woody volume, trunk diameter, and per-rank metrics. Add leaves by phyllotaxis and match a measured leaf-angle distribution.
-
Run a tree inventory
Turn a segmented plot into a tree list — stem position, DBH, stem curve, height, crown base, and crown size — summarize the stand (stems/ha, basal area, QMD, Lorey's height, canopy cover, biomass), and build a QSM for every tree in one run.
-
Measure canopy structure
Invert overlapping scans into a voxel grid of leaf area density (m²/m³) with its vertical profile and LAI, and fit crown shapes (ellipsoid, prism, cone, alpha shape) for height and volume.
-
Model the terrain
Grid classified ground returns into a bare-earth DEM/DTM — with hillshade, slope, and aspect layers — plus the top-of-canopy DSM and the canopy height model that comes from subtracting them.
-
Generate procedural plants
Grow Helios plant models — trees, vines, cereals, vegetables, weeds — to a target age, then morph their parameters interactively.
-
Simulate a scan
Place virtual scanners (static or moving-platform) around a plant and synthesize the point cloud they would produce, with full control over beam geometry.
Start the User Guide → Browse workflows
Phytograph is developed at the Bailey Lab at UC Davis. Source code at github.com/PlantSimulationLab/Phytograph.