本文共 2411 字,大约阅读时间需要 8 分钟。
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. 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 basic 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. 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, [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. 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. OUTPUTS: 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)转载地址:http://bzdab.baihongyu.com/