【问题标题】:Turn a 2D Image into a rotating 3D image on Matlab在 Matlab 上将 2D 图像转换为旋转的 3D 图像
【发布时间】:2017-01-08 05:29:20
【问题描述】:

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

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

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

现在,90°:

请问您是否可以在 Matlab R2016b 中执行相同的操作?

非常感谢您的帮助

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

【问题讨论】:

  • 是的,这是可能的。甚至还有一个答案,详细说明了如何在此站点上执行此操作,但不幸的是,该问题被搁置了。你的研究结果是什么?你试过什么?
  • 嗨,谢谢你的回答:) 真可惜......这个答案现在会非常有用。我尝试使用投影变换,但它没有按预期工作。此外,我想检索使用 Matlab 中的投影变换不可能的旋转角度。我能做什么?
  • 如果您对如何不使用 3-D 绘图而仅使用图像转换感兴趣,请参阅this question
  • 您好新手,谢谢您的回答。这个链接很有帮助!

标签: image matlab image-processing rotation


【解决方案1】:

是的,这是可能的。最简单的做法是将图像以 3D 形式映射到 y = 0 平面上,然后将相机旋转到所需的方位角或相对于 y 轴的角度。完成此操作后,您可以使用 getframe / cdata 习惯用法实际捕获变量本身中的实际图像数据。您对y 平面执行此操作的原因是因为我将用来呈现图像的方法是通过surf 命令绘制3D 曲面图,但这里的y 轴是进出屏幕的轴。在显示数据时,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

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 2012-12-03
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2013-06-16
    相关资源
    最近更新 更多