Rotation, Translation, Scaling of 2 clouds of 3D points
28 views (last 30 days)
Show older comments
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
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.
Accepted Answer
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
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.
More Answers (1)
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.,
0 Comments
See Also
Categories
Find more on Geometric Transformation and Image Registration in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!