我想知道如何使用Matlab R2016b沿Z轴旋转2D图像并在执行此过程后获取图像。在Matlab上将2D图像转换为旋转的3D图像
例如,让我们这个2D图像:
现在,我将其旋转45°大致为:
而现在,90°:
你知道是否可以在Matlab R2016b中执行相同的操作吗?
非常感谢您的帮助
图片来源:https://www.youtube.com/watch?v=m89mVexWQZ4
我想知道如何使用Matlab R2016b沿Z轴旋转2D图像并在执行此过程后获取图像。在Matlab上将2D图像转换为旋转的3D图像
例如,让我们这个2D图像:
现在,我将其旋转45°大致为:
而现在,90°:
你知道是否可以在Matlab R2016b中执行相同的操作吗?
非常感谢您的帮助
图片来源:https://www.youtube.com/watch?v=m89mVexWQZ4
是的,它是可能的。最简单的做法是将图像以3D形式映射到y = 0
平面上,然后将摄像机旋转到所需的方位角或相对于轴的角度。一旦你这样做了,你可以使用getframe/cdata
成语来实际捕获变量本身的实际图像数据。之所以这样做,是因为我将用于显示图像的方法是通过surf
命令绘制3D曲面图,但这里的轴是进出轴的轴的屏幕。轴x
轴是水平轴,当显示数据时轴将是垂直轴。
首先使用诸如imread
之类的东西读取图像,然后您需要定义映射到3D平面的图像的4个角,然后旋转相机。您可以使用view
功能帮助您通过调整方位角(第一个参数)并将仰角保持为0来旋转摄像头。
类似这样的东西可以起作用。我将使用辣椒形象,是图像处理工具箱的一部分:
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
是的,它是可能的。甚至有一个答案,并详细描述了如何在这个网站上做到这一点,但不幸的是,这个问题被搁置了。你的研究成果是什么?你有什么尝试? – beaker
嗨,谢谢你的回答:)真可惜...这个答案现在已经非常有用了。我尝试使用投影变换,但它没有按预期工作。此外,我想通过Matlab中的投影变换检索不可能的旋转角度。我能做什么 ? –
对于如何解决这个*如果没有* 3-D绘图,并改为使用图像转换,请参阅[这个问题](https://stackoverflow.com/q/47273993/52738) – gnovice