模拟3D旋转

时间:2015-12-23 10:23:14

标签: matlab 3d rotation

有了图像,我想以3D方式旋转它,我使用了3D旋转矩阵定义:line 1:5731: unexpected token: new R= Rx*Ry*Rz是旋转矩阵,角度围绕Rx (Ry,Rz)轴。所以作为输入,我只给出3个角度,作为输出我得到变形的图像。 MATLAB代码是:

x (y,z)
不知怎的,围绕x轴和y轴的角度并没有给我预测的结果,我做错了什么但是我不知道它是什么,请帮助我。

1 个答案:

答案 0 :(得分:1)

我尝试在没有图像处理工具箱的情况下解决问题。有关3D空间旋转的大量信息可以找到here

我使用了此页面中的一些内容来旋转图像。然后我只需设置绘图的视图属性,以模拟XY平面上的投影。

以下是原始图像和旋转图像:

enter image description here

以下是代码:

path = 'https://www.petfinder.com/wp-content/uploads/2012/11/140272627-grooming-needs-senior-cat-632x475.jpg';
[I, map]=imread(path,'jpg');

x_size = size(I, 2);
y_size = size(I, 1);

[X,Y] = meshgrid(1:x_size, 1:y_size);
x_coord = X(:);y_coord = Y(:);

red = reshape(I(:,:,1), [], 1);
green = reshape(I(:,:,2), [], 1);
blue = reshape(I(:,:,3), [], 1);

%Set the rotation angles
theta = pi/3; beta = pi/4; phi = pi/6;

%Define the rotation matrices
Rx = [1 0 0; 0 cos(theta) -sin(theta); 0 sin(theta) cos(theta)];
Ry = [cos(beta) 0 sin(beta); 0 1 0; -sin(beta) 0 cos(beta)];
Rz = [ cos(phi) -sin(phi) 0; sin(phi) cos(phi) 0; 0 0 1];
R = Rx * Ry * Rz;

%Apply the rotation
Pout = R*[x_coord.'; y_coord.'; zeros(1,numel(x_coord))];
scatter3(Pout(1,:), Pout(2,:), Pout(3,:), 2, double([red green blue])/255);

%change the direction of the Y-axis
axis ij; 
%set the axes to the same scale
axis equal; 

%Add axes-labels if needed
%xlabel('X'); ylabel('Y'); zlabel('Z');

%Simulate the 2D-Projection on the XY-plane by setting the view
view(0,90);

%Turn off the grid and the background
grid off;
set(gca,'visible','off');