Segment 085 volumetric ground-truth transfer plan

8 September 2026 · technical operator · generated by Codex

Summary

plan only No point-cloud processing or upload has started.

After approval, the work will run entirely on Battlebox. The human-annotated LAZ will act as a 3-D class-mask source. The current segmentation pipeline will produce the dense cloud's full-resolution baseline classes. Human labels will then replace that baseline only inside conservatively matched 3-D annotation volumes; every other point will keep its baseline class. A verified full-resolution LAZ and audit report will be copied to the annotated N-drive folder.

Observed inputVerified factConsequence
Human annotationLAS 1.4, point format 7, 1 mm scale, 1,872,942 pointsTreat it as a sparse/voxelized mask, not as the output point set.
Dense targetEight run3 NPZ shards, 47,847,093 pointsTransfer and export must be chunked and must preserve all rows.
Coordinate frameApplying the recorded run3 geoshift places the dense bounds around and over the annotated bounds; their minimum Z agreesNo ICP is planned. The known geoshift is the authoritative transform.
Existing exporterThe standard repo writer exports only 1 cm representativesReuse fusion and conventions, but use a full-resolution streaming LAZ writer.

Key decisions

Repo code to reuse

ComponentUseBoundary
fuse_segmentGenerate full-resolution baseline class and point orderDo not pass the final cloud through the decimating standard writer.
recap_import reader/frame logicRead the annotated class field and follow the existing geoshift/1 mm conventionsIts 1 mm hash plus 2 mm fallback is identity correction, not dense volumetric transfer.
voxel conventionBuild deterministic 1 cm 3-D annotation cellsThe old voxel-map sidecar is absent, so the dense mapping must be reconstructed.
writer header conventionsLAS 1.4 PDRF7, 1 mm scale, EPSG:25832 WKT, class codesUse a new chunked LAZ path because the existing writer decimates and emits LAS.

Phases

Phase 1 Stage and fingerprint inputs
  • Copy the annotated LAZ from the N drive to a dedicated Battlebox D-drive workspace through Windows PowerShell; N is not mounted inside WSL.
  • Record SHA-256, point count, LAS version/format, scales, offsets, CRS, bounds, dimensions, and per-class counts before doing any transfer.
  • Inventory the eight dense NPZ shards in deterministic filename order and record their hashes, shapes, bounds, and total point count.
  • Fail before processing if the annotated file changed since this plan's inspection or any expected shard is missing.
Phase 2 Reproduce the dense baseline classification
  • Run the checked-out segmentation fusion at recorded commit/config against segment 085, using only detector artifacts whose manifests and point-row contracts align with this target.
  • Capture the resolved configuration, stage skips, class histogram, input records, runtime, and commit/package versions.
  • Keep the full FuseResult.classification array aligned to all 47,847,093 source rows. This is the immutable baseline for unmatched points.
  • Write work products to a new staging folder so the repo's stale-output sweep cannot touch earlier deliveries or human annotation.
Gate Prove coordinate and mask compatibility
  • Subtract the recorded run3 geoshift from annotation XYZ and compare world/local bounds.
  • Measure 1 mm hash matches and nearest dense-point distances for every annotated point, split by class and connected component.
  • Confirm the old cloud is consistent with the expected 1 cm decimation grid. A systematic offset, rotation, CRS disagreement, or unexpectedly low support stops the run for review; no automatic ICP correction is allowed.
  • Identify explicit annotation class codes from the histogram. Unclassified/background points define no paint volume unless deliberately selected.
Phase 3 Transfer class masks in 3-D
  • Convert annotated points to geoshift-relative 1 cm voxel keys and build a per-class occupied-voxel map. Split disconnected components so nearby objects cannot bridge.
  • Stream each dense shard in original row order. Points whose XYZ fall in one unambiguous annotated voxel inherit that voxel's human class.
  • Optionally fill only a one-voxel gap when enabled: require a nearest annotated point within a hard 15 mm 3-D radius and unambiguous class support. Otherwise retain the baseline.
  • Record, for every class, exact 1 mm matches, same-voxel additions, optional gap-fill additions, ambiguous points, and untouched points.

This paints the full dense contents of annotated 3-D cells while keeping expansion tightly bounded. It does not turn a 2-D footprint into a vertical prism.

Phase 4 Stream a full-resolution LAZ
  • Write LAS 1.4 point format 7 with 1 mm XYZ scale, the known world geoshift, EPSG:25832 WKT, intensity, sensor RGB, scan angle, return-count data, and final classification.
  • Use chunked LAZ compression so the 47.8M-point cloud is never duplicated unnecessarily in memory or staged as a multi-gigabyte uncompressed LAS.
  • Preserve deterministic NPZ shard order and within-shard row order. The standard repo writer is not used for this file because it selects only voxel representatives.
  • Write an adjacent JSON audit report with provenance, hashes, algorithms/thresholds, counts, bounds, and class deltas.
Phase 5 Verify, preview, and publish to N
  • Reopen the LAZ and require exactly 47,847,093 points, expected bounds/CRS, valid classifications, and the same non-class attributes after LAS quantization.
  • Prove by index that every point outside the accepted 3-D mask has the same class as the baseline.
  • Generate class-count and top/side component QC summaries; sample boundaries and all ambiguity cases before upload.
  • Copy the LAZ and report from WSL staging to a .partial name on N through Windows, verify size and SHA-256 on both sides, then rename to the final filename.
  • Report the final N-drive path, hashes, point count, changed/unchanged counts, class deltas, transfer coverage, and any rejected regions.

Risks

RiskControl
high Baseline config does not match the intended new segmentationResolve and record every fusion input/config before transfer; stop on incompatible manifests instead of silently skipping an expected detector.
high 3-D propagation leaks into an adjacent object/classSame-voxel transfer by default, connected-component isolation, ambiguity rejection, and a hard 15 mm limit for any optional gap filling.
medium Coordinate or decimation grid mismatchWorld/local bounds, 1 mm hashes, distance distributions, and voxel-phase checks are mandatory gates. No automatic rigid registration.
medium Standard export accidentally drops most pointsDo not use the decimating repo writer; verify the exact full-resolution point count after reopening the LAZ.
medium N-drive sync receives a partial fileUpload under a temporary name, compare hashes, then rename only after validation.
low Source color is lostPreserve sensor RGB by default and carry semantic color through standard LAS classification.

Open questions

  1. Which dense baseline should define “remain the same class”?

    default Re-run the current Battlebox checkout at its recorded commit with packaged defaults and every manifest-compatible detector artifact discoverable for this target; record all resolved inputs and stop if an expected detector cannot be identified.

    alt Supply the exact earlier fusion command/config or an existing full-resolution classification artifact, if one exists elsewhere.

  2. How conservative should the volumetric mask be?

    default Paint every dense point in the exact 1 cm 3-D voxels represented by annotated points; do not expand into neighbouring voxels.

    alt Permit the documented one-voxel / 15 mm gap fill after reviewing the direct-transfer QC counts.

  3. Should RGB be changed as well as LAS classification?

    default Preserve sensor RGB and update only classification; use the viewer's classification palette.

    alt Bake the final class palette into RGB for immediate display, accepting loss of sensor color.

  4. What should be published to N?

    default segment_085_dense_gt_transferred.laz plus segment_085_dense_gt_transfer_report.json beside the existing annotated file.

    alt Use a different destination folder or filename supplied before execution.

Reply “approve defaults” to authorize processing, or answer only the question numbers you want to change.