繁体   English   中英

三维图像旋转(Matlab)

[英]Image Rotation in Three Dimensions (Matlab)

我正在尝试在Matlab xyz 3-D空间中旋转2D图像。 我想将图像I围绕x轴旋转角度θ= i 我用旋转矩阵乘法的方式这样做(定义在这里 ):

这是我的代码:

x = linspace(-1,1,size(I,1));
[x0,y0,z0] = meshgrid(x,x,1);
R = [1 0 0; 0 cosd(-i) -sind(-i); 0 sind(-i) cosd(-i)];
xy = [x0(:),y0(:), z0(:)]*R';
X = reshape(xy(:,1),size(x0));
Y = reshape(xy(:,2),size(y0));
Z = reshape(xy(:,3),size(z0));
rotatedI = interp3(x0,y0,z0,I,X,Y,Z, 'nearest');
rotatedI(isnan(rotatedI)) = 0;

我得到的错误是在插值行中:

Error using griddedInterpolant
Interpolation requires at least two sample points in each
dimension.

那么问题到底是什么,我该如何解决呢?

我很困惑,因为这个代码适用于二维时工作正常。 任何解释都非常感谢。

问题是你的输入z网格z0包含单个值( 1 ),而你想要的z网格Z包含多个值。 因此无法将此单个值插入多个值。

您可以为输入z网格分配多个值,以便可以进行插值。

I = im2double(imread('cameraman.tif'));
I = cat(3,I,I,I);
i = 10;
x = linspace(-1,1,size(I,1));
[x0,y0,z0] = meshgrid(x,x,-1:1); % 3 z values
R = [1 0 0; 0 cosd(-i) -sind(-i); 0 sind(-i) cosd(-i)];
xy = [x0(:),y0(:), z0(:)]*R;
X = reshape(xy(:,1),size(x0));
Y = reshape(xy(:,2),size(y0));
Z = reshape(xy(:,3),size(z0));
rotatedI = interp3(x0,y0,z0,I,X,Y,Z, 'nearest');
rotatedI(isnan(rotatedI)) = 0;
imshow(rotatedI);

在此输入图像描述

此外,您可以使用rotxrotyrotz轻松生成旋转矩阵。

UPDATE

如果要在3D空间中旋转图像2D平面,则不需要使用插值,可以执行以下操作:

I = im2double(imread('cameraman.tif'));
i = 10;
x = linspace(-1,1,size(I,1));
[x0,y0,z0] = meshgrid(x,x,-1:1); % 3 z values
[x0,y0,z0] = meshgrid(x,x,1); % 3 z values
R = [1 0 0; 0 cosd(-i) -sind(-i); 0 sind(-i) cosd(-i)];
xy = [x0(:),y0(:), z0(:)]*R;
X = reshape(xy(:,1),size(x0));
Y = reshape(xy(:,2),size(y0));
Z = reshape(xy(:,3),size(z0));
warp(X,Y,Z,I);
grid on

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM