Tree instance splitter — visual results

2026-08-15 · A1B0, 24 segments, producer tree-instances-0.3.1 · renders from the battlebox run

164 detected tree clusters → 223 tree instances + 5 hedges. Full-resolution point clouds for CloudCompare: D:\ai3d-ply\tree_instances_v4\ on battlebox — one PLY per segment, RGB = the same coloring as below, plus scalar fields instance_id (−1 = abstained) and abstain_reason (1 no stem seed · 2 hedge · 3 unreachable · 4 low evidence · 5 too small).

one color per tree instance  ·  hedge class  ·  abstained  ·  seed (S = stem, A = crown apex, – = seedless)

Before / after — the flagship merged blob fixed

v1 before
segment_014 cluster 2 — v1 (stem seeds only). 238k points, 47×38 m merged vegetation complex. Only 4 seeds; blue and red each swallow 20 m spans of several crowns, half the canopy abstains gray.
v4 after
Same cluster — v4 (hybrid seeding). ~13 crown-scale instances; the crown-apex fallback recovers the bushy vegetation that has no clean trunks. Remaining gray is sparse scatter and one heavily occluded crown.
segment 014 overview
segment_014 full overview (v4). All tree detections of the segment after splitting.

Where the method is at its best good

segment 087 stems
segment_087 cluster 0. 120k points, 12 instances, all stem-seeded — mature trees with visible trunks (right panel: distinct vertical columns). This is the treeX-style textbook case and it works.
segment 113
segment_113 cluster 0 (v4). Merged roadside row split along plausible crown boundaries.

Hedge class firing new

hedge 023
segment_023 cluster 3 → hedge. 21k points, 12 m grounded continuous band, flat top, no strong stems — whole cluster classified hedge (orange), no fake tree slabs.
hedge 049
segment_049 cluster 4 → hedge (one of two hedges in this segment).
hedge 109
segment_109 cluster 1 → hedge. 15 m band.

Junk refusal guarded

junk 051
segment_051 overview. The 5.4M-point detector mask leak (contains road strips and a building roof) stays overwhelmingly gray — planarity/megacluster guards refuse to paint trees on it; only stem-evidenced vegetation gets instances.

Known-hard cases, honestly abstained or flagged open

band 050
segment_050 cluster 1. 110k-point, 26 m vegetation band with an undulating top: three stem-seeded instances with straight cut boundaries. Genuinely ambiguous between "three large shrubs" and "hedge" — the gold set must settle the ontology. Verdict merged with mid confidences.
wall 070
segment_070 cluster 2. 42 m continuous vegetation wall, 7.9 m tall — just above the hedge height cap. 11 instances, cluster verdict uncertain (the honest label for a treeline that one-sided MLS cannot decompose).
sparse 092
segment_092 cluster 2. Distant, sparsely scanned canopy: the crown top stays disconnected from the understory even at a 1.25 m gap budget → abstains as partial rather than guessing.

The recall opportunity (Phase R evidence) ≈3× recall

These clusters were rejected by the tree path (reject_rf_below_threshold) yet are clearly real vegetation — RGB renders from raw records. ~480 such green rejects vs only 233 emitted trees on A1B0.

reject 038
segment_038 cluster 1 (rejected). 27k-point dense scrub wall behind a fence.
reject 029
segment_029 cluster 0 (rejected). Sapling stand with visible thin stems + a ~5 m tree — the exact conifer/small-tree failure mode from the 2026-07-17 note.
reject 028
segment_028 cluster 0 (rejected). 77k-point embankment bush field under a guardrail.

Plan & status: tree-instance-separation-20260815 · commit 85f97f1