1
我想在Matlab xyz三维空间中旋转2D图像。我想旋转图像我围绕x轴角度θ= i。我用旋转矩阵(定义here)乘法的方式这样做:三维图像旋转(Matlab)
这是我的代码:
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.
那么究竟是什么问题,我该如何解决?
我很困惑,因为这个代码工作很好,当专门到两个维度。任何解释都非常感谢。
谢谢你非常。但是由此产生的图像叠加在原始图像上。它并不真正在三维世界坐标中旋转。通过在Matlab的FEX上将代码与'image3'结合使用可以以某种方式实现这一点?到目前为止,这是图像的样子:https://i.stack.imgur.com/MDi9m.jpg – Ciprian
用'interp3'旋转的2D图像的z尺寸实际上是**颜色**尺寸(RGB) ,因此结果看起来像是“叠加”的图像。如果您想在3D空间中旋转图像2D平面,您可以查看我的编辑 – user2999345
谢谢。这很有道理。最后一个问题:当前代码将图像旋转到其边缘。是否有一个简单的修改,可以使图像围绕其中心点旋转?或者我们需要通过移动它们来手动对图像进行居中?例如,对于0°和90°,图像的中心不重合:https://i.stack.imgur.com/MM55y.jpg – Ciprian