Description 
ABSOR  a tool for solving the absolute orientation problem using Horn's
quaternionbased method, that is, for finding the rotation, translation, and
optionally also the scaling, that best maps one collection of point coordinates
to another in a least squares sense. The function works for both 2D and 3D
coordinates, and also gives the option of weighting the coordinates nonuniformly.
The code avoids forloops to maximize speed.
DESCRIPTION:
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 syntax
[regParams,Bfit,ErrorStats]=absor(A,B)
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.
This is a special case of 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 usersupplied length N vector of weights. One can include either
s or w or both in the problem formulation using the syntax,
[regParams,Bfit,ErrorStats]=absor(A,B,'param1',value1,'param2',value2,...)
with parameter/value pair options
'doScale'  Boolean flag. If TRUE, the global scale factor, s, is included.
Default=FALSE.
'weights'  the length N vector of weights, w. Default, no weighting.
OUTPUT:
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 (set to 1 if doScale=false).
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 counterclockwise 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)
