3D Rotation around generic axis
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I want to rotate an image around a the y axis using Matlab, I expect to have a 3 dimensional matrix as output and each plane of the matrix should contain a small strip of the image.
I insert my image in a 3D array and then I apply the transformation matrix using affine3d and imwarp commands.
This is an example:
c = cos(theta); s=sin(theta);
ux =0; uy=1; uz=0;
tx =0; ty=0; tz=0;
tt = [(1-c)*ux^2+c (1-c)*ux*uy-s*uz (1-c)*ux*uz+s*uy tx;...
(1-c)*ux*uy+s*uz (1-c)*uy^2+c (1-c)*uy*uz-s*ux ty;...
(1-c)*ux*uz-s*uy (1-c)*uy*uz+s*ux (1-c)*uz^2+c tz; 0 0 0 1];
tform = affine3d(tt);
R = imref3d(size(image));
imrot = imwarp(image,R,tform);
In this way I get a rotation around the origin axis, but I want the rotation around the centre of the image so I change the value of ty.
ty=128
But affine3d wants only [0 0 0 1] as last column. Is there a way to rotate using these commands or do I have to find another way?
0 comentarios
Respuestas (2)
Alex Taylor
el 26 de Nov. de 2013
The Image Processing Toolbox uses a different convention for the transformation matrix than the one you are expecting. This is discussed here:
The form used by IPT is:
[A B C 0;...
D E F 0;...
G H I 0;...
Tx Ty Tz 1];
In other words, its the transpose of what you are expecting.
0 comentarios
Matt J
el 26 de Nov. de 2013
In addition to what Alex said, changing the translation parameters to the location of the image center is not equivalent to making that the center of rotation. You can use this tool
to get the R,t data for a rotation about the axis you want. Then feed [R,t].' to maketform.
0 comentarios
Ver también
Categorías
Más información sobre Geometric Transformation and Image Registration en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!