对于我的应用程序,我创建了一个meshgrid
的3D图像坐标。
因此,代码如下所示:
Nx=50;
Ny=50;
Nz=100;
xgv=1:Nx;
ygv=1:Ny;
zgv=1:Nz;
[X,Y,Z] = meshgrid(xgv,ygv,zgv);
在下一步中,我想通过添加变换矩阵来重新计算坐标。我想过将meshgrid
转换为Nx3点云,所以我执行了这一步:
x=reshape(X, numel(X), 1);
y=reshape(Y, numel(Z), 1);
z=reshape(Y, numel(Z), 1);
points=[x,y,z];
并向他们申请轮换:
points_new = R*points';
如需进一步的操作,我需要meshgrid
- 格式的三维坐标才能使用interp3
。
所以我想到了两个可能的解决方案:
meshgrid
- 格式化数据上应用转换而不转换为Nx3点云?答案 0 :(得分:2)
直接回答您的问题:
reshape
使形状与输入相同(下面有更多信息)。你的方法实际上很好。如果您愿意,可以在转换后执行另一个reshape
以获得meshgrid
形状。
[X,Y,Z] = meshgrid(xgv,ygv,zgv);
original_size = size(X);
%// Then after transformation
Xnew = reshape(points_new(1,:), original_size);
Ynew = reshape(points_new(2,:), original_size);
Znew = reshape(points_new(3,:), original_size);
但是 interp3
输入坐标的形状实际上并不重要(只是值),所以你可以保留它们的方式转换后(作为列向量)。
[X,Y,Z] = meshgrid(xgv,ygv,zgv);
%// Create an N x 3 matrix of coordinates
points = [X(:), Y(:), Z(:)];
%// Transform the coordinates
points_new = points * R;
%// Use the result *directly* in interp3
interp3(data, points_new(:,1), points_new(:,2), points_new(:,3));