Roadmap¶
v0.1.0 — Initial Release (current)¶
Goal: Working CLI and Python API for single-pair boresight calibration.
- Planar-neighbourhood feature extraction (k-NN PCA + Weinmann planarity filter)
- Point-to-plane ICP with Levenberg–Marquardt optimisation (6-DOF: Δω, Δφ, Δκ, Δx, Δy, Δz)
- LAS/LAZ I/O via laspy (preserving all non-XYZ attributes)
- RMSE/MAE metrics with coverage fraction reporting
- CLI:
lidar-strip-adjust reference.las target.las -o corrected.las - Unit + integration tests, CI via GitHub Actions
- MIT licence, CITATION.cff, mkdocs documentation
v0.2.0 — Multi-strip Network Adjustment¶
Goal: Simultaneous least-squares adjustment across N ≥ 3 flight strips.
- Strip graph construction: pair all overlapping strip combinations automatically
- Weighted global normal-equations solver (scipy sparse + LSQR)
- Per-strip residual report and blunder detection (3σ rejection)
- Tie-point / control-point injection (optional ground-truth LAS)
- Parallelised pairwise feature extraction (
concurrent.futures) --networkCLI subcommand for batch input- Benchmark: ≥10 strips, ≥5M points each, wall time < 60 s on 8 cores
v1.0.0 — Production-Ready SDK¶
Goal: API stability, cloud-native support, and ecosystem integrations.
- Stable public API with semantic-versioning guarantees
- PDAL pipeline integration:
lidar_strip_adjustfilter stage (JSON pipeline) - Cloud I/O: direct read/write from S3, Azure Blob, GCS via
fsspec - LAZ compression support via lazrs/laszip backend
- Per-point confidence scores written back to LAS extra bytes
- Full type stubs (
py.typed, mypy strict) - Sphinx/ReadTheDocs hosted documentation
- Conda-forge package