Separate leaf and wood¶
For plant-architecture work — skeletons, QSMs, branch geometry — the woody structure (trunk and branches) needs to be separated from the leaves. Phytograph classifies each point as wood or leaf locally, on any ground-cropped cloud.
There are four methods (see Method below):
- Machine learning (the default, recommended) runs a PointNeXt network trained on about 180 hand-labeled real trees, including dense-crowned and leaf-off orchard trees, plus Helios synthetic scans of every woody library species. It is the most accurate method on trees it has never seen (see How accurate is it? below) and has no tuning knobs. It uses an NVIDIA GPU (Windows/Linux) or Apple-silicon GPU when one is available, and otherwise runs on the CPU, at about a minute per 2 million points.
- Branch-segment builds a skeleton, breaks it into individual branch segments, and classifies each whole segment by how well it fits a cylinder — a real branch wraps a tight cylinder, a clump of leaves does not. Classifying segments rather than individual points recovers the thin branches a point-wise method drops, without over-segmenting the leaves around them. It requires the ground to be removed (the skeleton roots at the lowest points).
- Connectivity roots a skeleton at the trunk base and traces each branch back to it (wood = on a continuous path to the trunk). Also needs the ground removed.
- Geometric is the original point-wise classifier — each point judged by its local 3-D shape (vertical and compact = wood; scattered = leaf). Use it when the cloud can't be cleanly ground-removed.
Segment¶
- Crop the ground first (see Segment ground points) — the tool expects a cloud of plant material, not soil.
- Select the point cloud (or clouds) you want to segment.
- Click Segment Wood / Leaf (the icon showing a bare forked branch and a leaf either side of a dashed split, in the Tools › Segmentation group), or open the command palette and choose Segment Wood / Leaf. Under Clouds, the panel lists every point cloud in the scene with the ones you had selected checked; check or uncheck them there. Once the panel is open, clicking in the Scans pane no longer changes the set, and a hidden cloud you check is shown for as long as it stays checked.
- Choose the method and adjust the parameters if needed (the defaults work
across broadleaf and conifer scans; the sensitivity, neighborhood, smoothing
and reflectance settings belong to the geometric methods and are hidden for
Machine learning):
- Method — Machine learning (default; a trained network, no other settings apply, and the panel shows a GPU/CPU pill for where it will run), Branch-segment (segment-wise cylinder-fit, needs the ground removed), Connectivity (skeleton backbone), or Geometric (local shape only). When more than one model is installed, a model picker appears under the method. Use Geometric if the cloud can't be cleanly ground-removed, or for a quick shape-based pass on a partial/disconnected cloud where a single rooted tree can't be traced.
- Wood sensitivity (0–1) — the wood/leaf decision threshold. Raise it to classify more points as wood (catches thin twigs at the cost of some leaf bleed); lower it to be stricter about what counts as wood.
- Neighborhood size — how many neighbors define each point's local geometry. Larger is smoother but slower; the default suits typical TLS densities.
- Smoothing — how aggressively isolated misclassifications are cleaned up by a majority vote over neighbors. 0 disables it.
- Use reflectance assist — only shown when the cloud carries a
reflectance or intensity value per point (e.g. a Riegl
Reflectancecolumn, auto-detected on import). When ticked, the brightest returns — which at the scanner wavelength are almost always wood — are recovered as wood even where the geometry alone missed them. It is ticked on by default when available; see the note below for when to turn it off.
- Choose the Output:
- Label in place — keep every point, add a Wood Class attribute, and recolor by it.
- Split into wood + leaf clouds — additionally emit two new clouds,
… (wood)and… (leaf), alongside the classified original. The two child clouds are built after the classification lands, so a progress pill appears at the top of the viewer while they're prepared (with its own Cancel). - Remove wood (keep leaves only) — drop the wood points, leaving a leaf-only cloud (the classic "wood removal" result).
- Click Segment Wood / Leaf. While it runs, the button shows a spinner and a Cancel button appears beside it — click Cancel to stop a long or stuck run immediately (the computation is killed and the cloud is left unchanged).
Multiple scans¶
If more than one cloud is checked under Clouds, a chooser appears:
- Segment scans together — the checked scans are combined into one dense cloud, segmented once, and the wood/leaf labels are written back to each scan in place. Use this for several views of a single tree: merging the views gives each point a fuller local neighborhood, which the classifier reads more reliably than a thin single-view cloud. The scans must already be in a common coordinate frame — register them first if they aren't. (In-memory clouds only; if a checked cloud streams from an octree, each is segmented separately.)
- Segment each scan separately — classify every checked scan independently, in sequence. Use this for separate trees, where each scan is already a complete cloud.
When it finishes, the cloud is recolored by the Wood Class attribute (dark brown for wood, green for leaf) with a legend in the corner. In Label and Split modes the original points are never deleted.
Inspect and use the result¶
The classification is stored as a scalar attribute named Wood Class. Switch back to it any time from the Color by picker in the Display panel — it shows discrete colors, not a continuous gradient.
If you chose Split, the classified original is hidden automatically — it
still holds every point, so you'd otherwise see all three clouds drawn on top of
each other. Tick its eye icon in the scan list to bring it back. Run skeleton
extraction or QSM building on the … (wood) cloud alone; if you chose Remove
wood, the surviving cloud is the leaves, ready for leaf-area analysis.
How accurate is it?
Measured on 59 hand-labeled real trees that no method was tuned or trained on (tropical, temperate and boreal), Machine learning labels wood with an intersection-over-union of about 0.80, against 0.61 for Branch-segment. On leaf-off almond trees, where every point is wood, it keeps essentially all of the wood where Branch-segment keeps under half.
In a dense crown where little or no wood is visible (a thick outer leaf layer hides the branches), it labels the crown leaf and marks only the trunk and the branches you could actually see and follow, the way a careful person labeling the scan would. Branches hidden inside the foliage are not reported as wood, because nothing in the scan shows them.
It still leads on clouds thinned to 3 cm point spacing, but by less, and on a very sparse cloud a geometric method can occasionally do better, so segment before decimating when you can.
Among the geometric methods, on the same kind of scans (oak, beech, maple, pine, spruce) Geometric and Connectivity reach roughly 80–90 % overall accuracy; Branch-segment, which fits cylinders per skeleton segment, is generally the most reliable of the three, and is the one to reach for when a cloud is too sparse for the model. Fine twigs embedded in dense foliage are the usual error source — and that is exactly where Connectivity helps: by tracing branches back to the trunk it recovers thin twigs the geometric method drops, which matters most when the result feeds skeleton/QSM extraction (a missed twig breaks a branch). The trade is that on very dense crowns it can be slightly less precise overall, so if you only need a coarse leaf-removal, Geometric can be a touch cleaner. Run wood/leaf separation before skeleton/QSM extraction and spot-check in the viewer either way.
Reflectance assist — when it helps
Many terrestrial scanners (e.g. Riegl, 1550 nm) record a reflectance or intensity value per return, and at that wavelength wood reflects more strongly than foliage. When the cloud carries that value, the optional reflectance assist uses only the brightest returns — the part of the range that is reliably woody — to recover wood the geometry missed (thin branches and twigs especially). It never reclassifies a point away from wood, so it can only help, not flood the result.
The catch is species: the wood-vs-leaf brightness gap is large for some species (oak, beech) and weak for others (almond, redbud). On weak-contrast species the assist has little signal to work with — it stays mild rather than helping, and you may prefer to untick it. The classifier auto-limits its influence so it is safe to leave on by default, but for a species you know to be low-contrast, geometry alone is the better choice. It is not a substitute for geometry — it supplements it.
Large clouds
Large clouds stream to the viewer as an octree, but the data lives in an in-memory session that holds every point. Wood/leaf segmentation runs on that in-RAM array — the source file is never re-read — so the classification covers every point, not a downsampled subset. For very large clouds the backend can voxel-downsample, classify, and propagate labels back to full resolution. The Connectivity method builds its skeleton on that reduced set, so on very heavily downsampled clouds the traced backbone is coarser; for the finest twig recovery, segment before any aggressive decimation.
See also¶
- Fit a crown & metrics — fits the crown to the leaf points once wood/leaf is labeled.