Proper Orthogonal Procrustes Alignment
Align labeled point pairs using a rotation and translation while exposing reflection error and nonunique fits.
By Riano · Published · Updated · Report a correction
Proper Orthogonal Procrustes Alignment
The Proper Orthogonal Procrustes problem finds the special orthogonal rotation matrix R (satisfying RTR = I and det(R) = +1) and translation vector t that minimize the sum of squared Euclidean distances between labeled source points and target points.
Proper Rotation vs Reflection
Unconstrained orthogonal Procrustes allows both proper rotations (det(R) = +1) and improper reflections (det(R) = -1). When aligning physical rigid bodies in 2D or 3D, reflections reverse chirality (handedness) and are physically unrealizable. Restricting the optimization to SO(2) guarantees an orientation-preserving rigid motion.
Centroid Decoupling and Planar Rotation Formula
Subtracting the source centroid cs and target centroid ct decouples translation from rotation, yielding centered vectors ui = xi - cs and vi = yi - ct. In 2D, writing R(θ) with entries R1,1 = cos(θ), R1,2 = -sin(θ), R2,1 = sin(θ), R2,2 = cos(θ) reduces the trace maximization tr(RTV UT) to maximizing c · cos(θ) + s · sin(θ), where c = Σ(ui,xvi,x + ui,yvi,y) and s = Σ(ui,xvi,y - ui,yvi,x). When (c, s) ≠ (0, 0), the unique optimal angle is θ = atan2(s, c) and optimal translation is t = ct - R cs. When c = s = 0, every rotation yields the exact same residual cost.
Worked Example
Align the source triangle (-1, 0), (1, 0), (0, 2) to the Quarter turn target shifted by (1, -2), giving target vertices (1, -3), (1, -1), (-1, -2):
- Centroids: Source centroid is cs = (0, 2/3) and target centroid is ct = (1/3, -2).
- Centered inner products: Summing over the 3 pairs gives c = 0 and s = 14/3 > 0.
- Rotation: θ = atan2(14/3, 0) = +90 degrees, giving R = [[0, -1], [1, 0]].
- Translation and error: t = ct - R cs = (1/3, -2) - (-2/3, 0) = (1, -2), achieving an exact fit with squared error 0.
Experiment
Compare exact rotations, reflections, noisy perturbations, and degenerate collapses in https://riano.app/module/orthogonal-procrustes:
- Select Reflection with shifts (-1, 1). Because vertices 1 and 2 are mirrored across the y-axis while det(R) = +1 forbids reflection, the best proper rotation stays at 0 degrees with squared fitting error 8.
- Select Perturbed with shifts (0, 0) to observe a least-squares compromise rotation of -12.5288 degrees and squared error 1.0406.
- Select Collapsed reference or Collapsed target to verify that c = s = 0 produces status
Nonunique; identity representative.
Limitations
Closed-form Procrustes alignment requires known one-to-one point correspondences and uniform isotropic error weighting. Unknown correspondences require iterative assignment schemes such as Iterative Closest Point (ICP), and heavy outliers can skew least-squares centroids.
Common Pitfalls
Forgetting to center both point clouds before computing the cross-covariance sums c and s couples rotation about the origin with translation, producing suboptimal fits whenever centroids are non-zero.
References
The SVD and planar Kabsch–Umeyama derivation for proper orthogonal Procrustes alignment follow standard numerical linear algebra references:
Experience it interactively
Adjust parameters, observe in real time, and build deep intuition with Riano’s interactive Proper Orthogonal Procrustes Alignment module.
Try Proper Orthogonal Procrustes Alignment on Riano →