2026-07-05 · paper
Three points, one world: notes on 3-point similarity calibration
Working notes — this will grow into the full write-up of the calibration method used in the passthrough headset and HoloLens registration work.
The problem
You have three points measured in two coordinate frames: the tracker's frame and the world you want to draw in. You need the rigid transform (plus uniform scale) that maps one onto the other, so a virtual object placed on a real table stays on the table.
Formally: given correspondences pᵢ ↔ qᵢ (i = 1..3), find scale s,
rotation R, translation t minimizing
E = Σᵢ ‖ qᵢ − (s·R·pᵢ + t) ‖²
The closed form
Three non-collinear points fully determine the similarity transform. The classical route (Horn 1987; Umeyama 1991):
- Center both point sets on their centroids.
- Scale from the ratio of RMS radii.
- Rotation from the SVD of the cross-covariance matrix, with the determinant guard so you get a rotation, not a reflection.
- Translation falls out:
t = q̄ − s·R·p̄.
What actually goes wrong
- Near-collinear pick points. The rotation about the points' common axis is unobservable; conditioning explodes. Users pick three points on the edge of a table more often than you'd think.
- Anisotropic measurement noise. The tracker is worse along depth; a least-squares fit that assumes isotropic noise silently tilts the world.
- The residual is the product.
residual < εis not a debug metric — it is the honest advertisement of registration quality, and it belongs in the UI.
More to come: pick-point UX that avoids degenerate configurations, and a comparison against 4+ point over-determined fits.