Rotation, Translation, Scaling of 2 clouds of 3D points

28 views (last 30 days)
Hi
I have two sets of corresponding 3D points and want to calculate the rotation, translation and scaling between those two sets. The scaling is a result of errors made while placing the points (so the points are not scaled "in general").
My test data:
The sets each contain of 6 corresponding points which are a generating set of the R^3. They are transformed by a rotation matrix which consists of 3 rotations around the x, y and z axis:
The rotation matrix is then multiplied with a scaling matrix:
I'm not applying a translation since I've problems already using just a rotation and scaling.
I've tried to use the following matlab function but I don't get the expected results for my test data: http://www.mathworks.com/matlabcentral/fileexchange/26186-absolute-orientation-horns-method
My second approach was to use the methods described in the following publication but the results also differ from the expected results: http://cis.jhu.edu/software/lddmm-similitude/umeyama.pdf
My last approach was to solve 3 sets of linear equations to get the transformation coefficients for the transformation matrix. This approach results in the expected values but I can't find any publication or whatsoever which describes (and therefore validates) this approach.
My first question is, why the first methods calculate a single scaling value instead of 3 values (for each of the coordinate axis). Do these methods assume that the points are scaled in general? My second question would be how to solve my problem and have a publication which validates my results.
Thanks in advance. Edit: Fixed the link to the paper.
  1 Comment
Matt J
Matt J on 4 Sep 2013
My second approach was to use the methods described in the following publication
The link to the "publication" is the same as the link to the first method.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 4 Sep 2013
Edited: Matt J on 4 Sep 2013
My first question is, why the first methods calculate a single scaling value instead of 3 values
Because that is the scope of the absolute orientation problem. If you know your transformation has isotropic scaling, a single scaling value is a desired assumption of the transformation model.
My second question would be how to solve my problem and have a publication which validates my results.
If you have the Image Processing Toolbox, use CP2TFORM with the 'affine' transform type. Publications are referenced in the References section of "doc cp2tform".
  7 Comments
Matt J
Matt J on 4 Sep 2013
Edited: Matt J on 4 Sep 2013
Scaling = S Rotation = L * R^T
I don't see the logic behind this. You were looking for a decomposition M=Scaling*Rotation and you say you've decided to do this as
M=S*(L*R^T)
but since the SVD also says that M=L*S*R^T it means you're hypothesizing an equivalence
L*S*R^T = S*L*R^T
which would be satisfied if L*S=S*L, but I'm not sure why you think the order of the multiplication doesn't matter.
I can't believe that I'm the first person facing this problem...
Obviously, you aren't the first person by far because, as we've been saying, cp2tform already does what you want. You just lack the Toolbox containing it. However, you could still read the references in "doc cpt2form"
and see what you can implement yourself.
Aside from that, Google shows a lot of references to 3D affine point matching. This one looks promising
but i haven't read it.
Matthias
Matthias on 5 Sep 2013
Regarding the SVD: I don't think that L*S equals S*L. I just tried to calculate the rotation and scaling component in this way ("trial and error") and the results matched with the expected results (aside from a permutation of the diagonal elements of the scaling matrix which I don't care about).
I read the references in doc cpt2form but they don't really match with my problem (they refer to other sections of the doc than the affine transformation). I also read the paper you found (<http://www.ncbi.nlm.nih.gov/pubmed/20635158> - thanks for the link) but it's using an affine transformation with isotropic scaling (basically it's almost the same as "Least squares estimation of transformation parameters between to point patterns").
I just found the following modified version of the ICP algorithm which seems to use an anisotropic scaling but I haven't figured out yet how to implement this method: http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4379798 It does look promising to me...

Sign in to comment.

More Answers (1)

Matt J
Matt J on 4 Sep 2013
You've said you don't have the Image Processing Toolbox, but if you have the Optimization Toolbox, you could use LSQNONLIN to solve it.
If you don't have any toolboxes at all, there are some nonlinear solvers on the FEX that don't seem to require anything but core MATLAB, e.g.,

Community Treasure Hunt

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

Start Hunting!