Matlab - 围绕通用轴旋转

时间:2013-11-17 11:32:30

标签: matlab rotation

我需要使用Matlab围绕y轴旋转图像。

我将图像插入3D数组,然后使用affine3d和imwarp命令应用转换矩阵。

这是一个例子:

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);

通过这种方式,我可以围绕原点轴进行旋转,但我希望围绕图像中心旋转,以便更改ty的值。

ty=128

但是affine3d只想要[0 0 0 1]作为最后一栏。

有一种方法可以使用这些命令旋转,还是我必须找到另一种方法?

1 个答案:

答案 0 :(得分:0)

我在这里回答了一个非常相似的问题:Homographic image transformation distortion issue

通过该答案,您可以围绕任何轴旋转,并以任何点作为原点。

修改

你可以在这里使用仿射矩阵形式([0 0 0 1]作为最后一行),你只需要为每个列索引添加一个“1”(即代替< 3x3> { {1}},您需要使用< 4x4> R*[x y z]'。(注意转置以使该行成为一列。)