v1.2.0 — SH Wigner rotation · exposure compensation · render ladder · pose covariance
splatreg 1.2.0 — the correctness release.
Spherical harmonics now rotate correctly. Real-basis Wigner-D rotation (any degree; Ivanic–Ruedenberg recurrence with the 1998 erratum corrections, conjugated into the 3DGS f_rest sign convention) is baked into apply_transform, merge, and the align CLI. Verified renderer-free to 2.4e-15: evaluating rotated coefficients at d equals evaluating the originals at R⁻¹d, plus closed-form l=1, composition, and PLY round-trip tests. To our knowledge splatreg is the only splat registrar that rotates view-dependent color correctly. Also exported standalone: splatreg.rotate_sh / sh_rotation_matrix.
Photometric refine upgrades
- Per-pair exposure compensation (closed-form gain/bias, clamped, alternated with the pose LM, default ON): a ×1.3 tint that silently corrupted the recovered Sim(3) scale (0.10% → 3.99% error) is absorbed back to 0.47%, harmless on clean pairs.
- Coarse-to-fine render ladder (
refine_kwargs["ladder"]): at equal budget, 5.61° (single rung) → 2.55°.
New API
RegisterResult.info["information"]/["covariance"]— JᵀWJ and σ̂²(JᵀWJ)⁻¹ at convergence (6×6 SE(3) / 7×7 Sim(3));Nonewhen singular, never faked. Unlocks pose-graph / submap fusion use.apply_transform()— align scans without merging: bake the recovered transform into the source and save each scan as its own PLY (mirrorssplatreg align).validate_recovery.py --fast(6 cells, ~41 s CPU).
Test suite: 105 → 126 passed. Docs updated throughout.
pip install -U splatreg