image thumbnail

Absolute Orientation - Horn's method

version (2.95 KB) by Matt J
Solves weighted absolute orientation problem using Horn's quaternion-based method.


Updated 02 Sep 2015

View License

ABSOR is a tool for least squares estimation of the rotation -- and optionally also the
scaling and translation -- that maps one collection of point coordinates to
another. It is based on Horn's quaternion-based algorithm. The function works for both 2D and 3D coordinates, and also gives the option of weighting the coordinates non-uniformly. The code avoids for-loops so as to maximize speed.


As input data, one has

A: a 2xN or 3xN matrix whos columns are the coordinates of N source points.
B: a 2xN or 3xN matrix whos columns are the coordinates of N target points.

The basic syntax


solves the unweighted/unscaled registration problem

min. sum_i ||R*A(:,i) + t - B(:,i)||^2

for unknown rotation matrix R and unknown translation vector t.

ABSOR can also solve the more general problem

min. sum_i w(i)*||s*R*A(:,i) + t - B(:,i)||^2

where s>=0 is an unknown global scale factor to be estimated, along with R and t,
and w is a user-supplied N-vector of weights. One can include/exclude any
combination of s, w, and translation t in the problem formulation. Which
parameters participate is controlled using the syntax,


with parameter/value pair options,

'doScale' - Boolean flag. If TRUE, the global scale factor, s, is included.
Otherwise, it is assumed that s=1. Default=FALSE.

'doTrans' - Boolean flag. If TRUE, the translation, t, is included. Otherwise,
zero translation is assumed. Default=TRUE.

'weights' - The length N-vector of weights, w. Default, no weighting.


regParams: structure output with estimated registration parameters,

regParams.R: The estimated rotation matrix, R
regParams.t: The estimated translation vector, t
regParams.s: The estimated scale factor.
regParams.M: Homogenous coordinate transform matrix [s*R,t;[0 0 ... 1]].

For 3D problems, the structure includes

regParams.q: A unit quaternion [q0 qx qy qz] corresponding to R and
signed to satisfy max(q)=max(abs(q))>0

For 2D problems, it includes

regParams.theta: the counter-clockwise rotation angle about the
2D origin

Bfit: The rotation, translation, and scaling (as applicable) of A that
best matches B.

ErrorStats: structure output with error statistics. In particular,
defining err(i)=sqrt(w(i))*norm( Bfit(:,i)-B(:,i) ),
it contains

ErrorStats.errlsq = norm(err)
ErrorStats.errmax = max(err)

Cite As

Matt J (2022). Absolute Orientation - Horn's method (, MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2009b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired by: Absolute Orientation

Inspired: microwae engineering

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!