Image 在Matlab上将二维图像转换为旋转三维图像

Image 在Matlab上将二维图像转换为旋转三维图像,image,matlab,image-processing,rotation,Image,Matlab,Image Processing,Rotation,我想知道如何使用MatlabR2016B沿Z轴旋转2D图像,并在执行此过程后获得图像 例如,让我们以这个2D图像为例: 现在,我将其大致旋转45°: 现在,90°: 您知道在Matlab R2016b中是否可以执行相同的操作吗 非常感谢你的帮助 图片来源:是的,这是可能的。最简单的方法是将图像映射到三维y=0平面上,然后将相机旋转到所需的方位角或相对于y轴的角度。一旦您这样做了,您就可以使用getframe/cdata习惯用法来实际捕获变量本身中的实际图像数据。之所以对y平面执行此操作,是因为我

我想知道如何使用MatlabR2016B沿Z轴旋转2D图像,并在执行此过程后获得图像

例如,让我们以这个2D图像为例:

现在,我将其大致旋转45°:

现在,90°:

您知道在Matlab R2016b中是否可以执行相同的操作吗

非常感谢你的帮助


图片来源:

是的,这是可能的。最简单的方法是将图像映射到三维y=0平面上,然后将相机旋转到所需的方位角或相对于y轴的角度。一旦您这样做了,您就可以使用getframe/cdata习惯用法来实际捕获变量本身中的实际图像数据。之所以对y平面执行此操作,是因为我将使用的显示图像的方法是通过在3D中打印曲面的命令,但此处的y轴是进出屏幕的轴。显示数据时,x轴为水平轴,z轴为垂直轴

首先使用类似的方法读入图像,然后需要定义映射到3D平面的图像的4个角,然后旋转相机。通过调整azimuthal angle first(方位角第一)参数并将仰角保留为0,可以使用该功能帮助旋转摄影机

像这样的东西可能有用。我将使用图像处理工具箱中的peppers图像:

im = imread('peppers.png'); % Read in the image
ang = 45; % Rotate clockwise by 45 degrees

% Define 4 corners of the image
X = [-0.5 0.5; -0.5 0.5];
Y = [0 0; 0 0];
Z = [0.5 0.5; -0.5 -0.5];

% Place the image on the y = 0 plane
% Turn off the axis and rotate the camera
figure;
surf(X, Y, Z, 'CData', im, 'FaceColor', 'texturemap');
axis('off');
view(ang, 0);

% Get the image data after rotation
h = getframe;
rot_im = h.cdata;
rot_im包含旋转的图像。为了欣赏图像的旋转,我们可以实时循环从0到360的角度。在每个角度,我们都可以使用view动态旋转相机,并使用drawnow更新人物。我还更新了人物的标题,以显示每次更新时的角度。下面是代码以及保存为动画GIF的输出:

for ang = 0 : 360
    view(ang, 0);
    pause(0.01);
    drawnow;
    title(sprintf('Angle: %d degrees', ang));
end

是的,这是可能的。最简单的方法是将图像映射到三维y=0平面上,然后将相机旋转到所需的方位角或相对于y轴的角度。一旦您这样做了,您就可以使用getframe/cdata习惯用法来实际捕获变量本身中的实际图像数据。之所以对y平面执行此操作,是因为我将使用的显示图像的方法是通过在3D中打印曲面的命令,但此处的y轴是进出屏幕的轴。显示数据时,x轴为水平轴,z轴为垂直轴

首先使用类似的方法读入图像,然后需要定义映射到3D平面的图像的4个角,然后旋转相机。通过调整azimuthal angle first(方位角第一)参数并将仰角保留为0,可以使用该功能帮助旋转摄影机

像这样的东西可能有用。我将使用图像处理工具箱中的peppers图像:

im = imread('peppers.png'); % Read in the image
ang = 45; % Rotate clockwise by 45 degrees

% Define 4 corners of the image
X = [-0.5 0.5; -0.5 0.5];
Y = [0 0; 0 0];
Z = [0.5 0.5; -0.5 -0.5];

% Place the image on the y = 0 plane
% Turn off the axis and rotate the camera
figure;
surf(X, Y, Z, 'CData', im, 'FaceColor', 'texturemap');
axis('off');
view(ang, 0);

% Get the image data after rotation
h = getframe;
rot_im = h.cdata;
rot_im包含旋转的图像。为了欣赏图像的旋转,我们可以实时循环从0到360的角度。在每个角度,我们都可以使用view动态旋转相机,并使用drawnow更新人物。我还更新了人物的标题,以显示每次更新时的角度。下面是代码以及保存为动画GIF的输出:

for ang = 0 : 360
    view(ang, 0);
    pause(0.01);
    drawnow;
    title(sprintf('Angle: %d degrees', ang));
end

是的,这是可能的。在这个网站上甚至有一个关于如何做的详细描述的答案,但不幸的是,这个问题被搁置了。你的研究结果是什么?你试过什么?嗨,谢谢你的回答:真遗憾。。。这个答案现在会非常有用。我试着使用投影变换,但它并没有达到预期效果。此外,我想用Matlab中的投影变换来检索旋转角度,这是不可能的。我能做什么?如果有人想知道如何在不使用三维绘图的情况下解决这个问题,而只使用图像变换,请参阅Hi-gnovice,谢谢你的回答。这个链接非常有用!是的,这是可能的。在这个网站上甚至有一个关于如何做的详细描述的答案,但不幸的是,这个问题被搁置了。你的研究结果是什么?你试过什么?嗨,谢谢你的回答:真遗憾。。。这个答案现在会非常有用。我试着使用投影变换,但它并没有达到预期效果。此外,我想用Matlab中的投影变换来检索旋转角度,这是不可能的。我能做什么?如果有人想知道如何在不使用三维绘图的情况下解决这个问题,而只使用图像变换,请参阅Hi-gnovice,谢谢你的回答。这个链接非常有用!