在Matlab上将2D图像转换为旋转的3D图像

时间:2017-01-08 05:29:20

标签: image matlab image-processing rotation

我想知道如何使用Matlab R2016b沿其Z轴旋转2D图像,并在执行此过程后获取图像。

例如,让我们拍摄这张2D图像:

enter image description here

现在,我大致旋转45°:

enter image description here

现在,90°:

enter image description here

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

非常感谢您的帮助

图片来源:https://www.youtube.com/watch?v=m89mVexWQZ4

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。最简单的方法是将图像映射到y平面上的3D,然后将相机旋转到所需的方位角或相对于getframe / cdata轴的角度。完成后,您可以使用y惯用法实际捕获变量本身的实际图像数据。您对y平面执行此操作的原因是因为我将用于显示图像的方法是通过surf命令绘制3D中的曲面图,但是{{1这里的轴是进出屏幕的轴。 x轴是水平的,z轴在显示数据时是垂直的。

首先使用类似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