Why the segment-wide ground union biased the DEM (Digital Elevation Model) downward
The DEM is seeded per 0.2 m cell with the lowest point in the cell. Below-ground noise points are rare in one drive pass, but merging seven passes multiplies their density, so most cells get one, min-Z takes it, and the whole surface is pulled down (measured: 5th percentile of z_ground −3.0 m, worst −8.1 m on 066). Real road surface then reads as 0.3 m+ "above ground" and enters the tree candidate slab. The fix keeps the segment scope but seeds each cell with the lowest 5 cm bin that holds at least 3 points: a surface always fills a bin, isolated noise never does; the union surface is additionally clamped to never sit below the record's own surface.
- Measured on real data (round 4): union kept only 0.37 / 0.52 / 0.63 / 0.75 of ground points on 066 / 085 / 060 / 018; a real 018 sign was lost on a 27 mm z_ground shift; the 066 lane-marking streaks got more tree paint, not less.
- Round 5 implements supported seeding + clamp behind
tcs_ground.per_segmentand re-runs the canaries (018 sign back, hard contamination ≤ 30k points, no crown hole, keep the 085 recall gain). - Same requirement recorded in the tablecloth handoff: segment-ground default.