Skip to content

Segment ground points

Terrestrial scans of plants capture the soil surface alongside the plant. Those ground points contaminate downstream steps — triangulation, skeleton extraction, cloud-to-mesh distance — so it helps to separate ground from plant first. Phytograph does this with the Cloth Simulation Filter (CSF): it drapes an inverted cloth over the cloud and labels the points the cloth settles onto as ground.

Segment

  1. Select the point cloud (or clouds) you want to segment.
  2. Click Segment Ground (the points-split-by-a-ground-plane icon in the tool column), or open the command palette and choose Segment Ground. Under Clouds, the panel lists every point cloud in the scene with the ones you had selected checked; check or uncheck them there (see Segment several clouds).
  3. Adjust the parameters if needed (hover the ? beside any parameter for a quick explanation). The parameters are seeded automatically from the cloud's size and shape each time you open the panel — a few centimeters of cloth resolution for a pot/plot-scale scan, scaling up to tens of centimeters for a field- or orchard-scale scan. The seed also reads the cloud's vertical relief: a large flat field gets a coarse, stiff cloth, but a large sloped tile (e.g. an aerial scan of a hillside forest) gets a finer cloth, low rigidness, and slope smoothing on so the cloth can bend to follow the slope instead of draping flat and catching only the valley floor. Relief that is very large compared with the footprint — a single tall tree standing on flat ground, say — is read as vegetation rather than terrain, and keeps the flat-ground recipe: a conforming cloth would climb the trunk. Airborne (ALS) scans get a different recipe entirely. Phytograph recognizes them by their point spacing — meters apart, against millimeters for a tripod scan — and switches to a fixed 0.75 m cloth with slope smoothing on, rather than scaling the cloth from the tile's width. Scaling it up is actively wrong on airborne data: on a 400 m tile the size-based rule asks for a cloth several meters across, which is coarser than the terrain yet, once clamped, still finer than the points can support, so it settles onto sampling noise. Measured on the standard ISPRS ground-filtering benchmark, the fixed airborne recipe raises mean accuracy from 0.76 to 0.86. Expect an airborne tile to take noticeably longer than before — a finer cloth over a wide tile is far more simulation work, and that cost is what buys the accuracy. (CSF's parameters are absolute distances, so a fixed default that suits a 1 m plant scan would label nearly everything as non-ground on a 50 m field — and a coarse, stiff cloth tuned for a flat field bridges over a steep tile, labeling the whole uphill slope non-ground. The seeded values are a starting point — override them freely.)
    • Cloth resolution (m) — the cloth grid cell size. Smaller follows finer ground relief but is slower; for pot/plot-scale scans a few centimeters works well.
    • Ground tolerance (m) — how far a point can sit above the draped cloth and still count as ground. The box is grayed out while Measure from the scan (below) is ticked, which it is by default; untick that to set the tolerance by hand. Raise it to pull low plant material — weeds, ground cover, inter-row vegetation — into the ground class; lower it to keep more of the plant base separate. Because it's an absolute height above the cloth, field- or orchard-scale scans need larger values than pot-scale ones: e.g. on a 50 m orchard tile a tolerance around 2 m absorbs the inter-row weeds while leaving the tree canopy as non-ground, whereas the seeded ~0.5 m keeps them separate. Nudge it up until the weeds flip to ground without the trees following.
    • Measure from the scan — on by default: the tolerance is measured from your data instead of seeded from the cloud's size, and see below for why. The measured value is reported when the run finishes and filled into the tolerance box, so you can untick this and nudge it from there on a later run.
    • Rigidness (1–3) — cloth stiffness. Use 3 for flat ground, lower (down to 1) for undulating or sloped terrain so the cloth can bend to follow the slope instead of bridging over it.
    • Slope smoothing — enables CSF's slope-handling pass. Leave it off for flat ground; turn it on (together with a low rigidness) for undulating or steep terrain. It's auto-enabled when the cloud's vertical relief is large relative to its footprint — but not when it's so large that the height clearly comes from vegetation rather than terrain.
  4. (Optional) Tick Split into ground + plant clouds to also produce two new clouds — ground and non-ground — 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).
  5. Click Segment Ground. 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).

When it finishes, the cloud is recolored by a new Ground Class attribute, with a legend in the corner showing which color is which. The original points are never deleted.

Ground vs non-ground, not ground vs plant

CSF only separates the ground from everything above it. The above-ground class is labeled Non-ground because the filter can't tell a plant from any other object sitting on the ground — a person, a building, a tripod. In a clean plant scan the non-ground class is the plant, but if the scene contains other above-ground objects they'll land in the same class. Crop them out first (see Clean a point cloud) if you need a plant-only result.

Segment several clouds

The Clouds list at the top of the panel decides what is segmented. It starts with the clouds selected in the Scans pane checked — with nothing selected, nothing is checked and the panel asks you to check one. Once the panel is open, clicking in the Scans pane no longer changes the set; only the checkboxes do. Checking a hidden cloud shows it for as long as it stays checked.

With more than one checked, the button reads Segment N Clouds and the run works through them one after another:

  • Each cloud is segmented on its own, with its own cloth. They are not merged, and each gets its own Ground Class column (and its own ground and non-ground clouds when Split is on).
  • One set of parameters runs on all of them. The values are seeded from the widest checked cloud, so check clouds of a similar scale together; a pot scan and an orchard tile want different cloths and are better run separately. With Measure from the scan on, each cloud still measures its own tolerance.
  • The panel names the cloud it is on, and each one is unchecked as it finishes. Cancel stops the current cloud and skips the ones not started; the ones already finished keep their result.
  • A cloud that fails does not stop the others. The panel stays open with the failed clouds still checked and says what went wrong with each.
  • The large-cloud advisory is raised per cloud: the run pauses at the cloud that needs it, and Segment Anyway carries on from there without redoing the clouds already finished.

Large clouds

Before it starts, Phytograph estimates how long the run will take on this cloud — the cloth filter plus the octree rebuild that follows it (two extra rebuilds when Split into ground + plant clouds is on) — and how much memory it needs. When the estimate is past about a minute and a half, or the memory needed is more than this machine's budget, the panel shows an amber advisory with the estimate instead of starting, and the button becomes Segment Anyway. Click it to run regardless; Cancel still works once the run is under way. A cloth resolution far too fine for the cloud's extent (tens of millions of cloth cells) is refused with the coarsest resolution that would work — that combination hangs rather than merely slows.

Very large clouds (above a few million points) are segmented in overlapping tiles behind the scenes, so the memory the run needs no longer grows with the cloud. The result is the same as an untiled run to within a fraction of a percent, including along tile edges; with Measure from the scan on, the tolerance is measured once for the whole cloud rather than per tile. The memory the estimate is judged against is Settings → Performance → Memory budget (MB) (automatic by default: half of this machine's RAM — the setting shows what it detected, so you can see the figure being used).

Inspect and use the result

The classification is stored as a scalar attribute named Ground Class. You can switch back to it any time from the Color by picker in the Display panel — it shows discrete colors (brown for ground, green for non-ground), not a continuous gradient.

If you ticked Split, two extra clouds appear in the scan list — … (ground) and … (non-ground) — and the classified original is hidden automatically, so you see the two halves rather than all three clouds drawn on top of each other. Tick its eye icon in the scan list to bring it back. Delete the ground cloud, or run skeleton extraction / triangulation on the non-ground cloud alone.

Large clouds

Large clouds stream to the viewer as an octree, but the data lives in an in-memory session that holds every point at full precision. Ground segmentation runs on that in-RAM array — the source file is never re-read — so the classification covers every point, not a downsampled subset.

Why ground points come out as non-ground

The most common surprise is patches of obviously-flat ground labeled non-ground, sitting right next to ground points at what looks like the same height. Raising the Ground tolerance fixes it, which feels wrong when the terrain is visibly flat.

It isn't the terrain. Ground returns don't form a thin sheet — they form a band several tens of centimeters thick, because of the scanner's range noise plus soil roughness. The cloth settles onto the bottom of that band, and the tolerance is measured upward from the cloth, so it has to clear the band's full thickness. On a real aerial orchard scan that band measured ~0.5 m thick even over the flattest bare patches, so a 0.5 m tolerance cut straight through the middle of it and rejected tens of thousands of genuine ground points — in patches, because the band is thicker under canopy than in the open.

The seeded tolerance scales with how wide your scan is, which has nothing to do with how thick the band is. That's fine at pot scale, but the two can disagree badly on field-scale tiles.

Measure from the scan removes the guesswork: it measures the band directly off the draped cloth and cuts where the ground returns end and vegetation begins. Because the measurement is taken relative to the cloth, terrain slope is already accounted for — it works the same on a hillside as on flat ground.

It also handles the opposite extreme. On a clean scan of a single tree over flat ground the ground returns form a very thin band with empty air above it, and the nearest thing that looks like the "top" of the band is the canopy meters overhead — which would place the cut far too high and swallow the bottom of the trunk into the ground class. The measurement recognizes that shape and keeps the cut on the ground band where it belongs.

If you'd rather set it by hand, look at the point where the ground stops and the canopy starts: a tolerance anywhere in that empty gap gives the same result, so aim for the middle of it rather than the smallest value that seems to work.

See also