将变换矩阵应用于meshgrid

时间:2016-04-11 14:20:07

标签: matlab

对于我的应用程序,我创建了一个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。 所以我想到了两个可能的解决方案:

  1. 有没有办法将新的点云转换回网格?
  2. 有没有办法直接在meshgrid - 格式化数据上应用转换而不转换为Nx3点云?

1 个答案:

答案 0 :(得分:2)

直接回答您的问题:

  1. 是的,您可以在转换后使用reshape使形状与输入相同(下面有更多信息)。
  2. 技术上是,但不推荐。要做到这一点,你必须乘以旋转矩阵的不同项,这最终会导致更多的代码,并且更难以阅读。
  3. 你的方法实际上很好。如果您愿意,可以在转换后执行另一个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));