将3d变换应用于长方体

时间:2017-07-14 10:55:18

标签: matlab 3d affinetransform

enter image description here我有一个长方体(红点)(XYZvox)的8个顶点,每个顶点之间的距离以毫米为单位(vox到mm),我使用4d变换矩阵(M)在3d空间中进行变换。我真的很难为变换的顶点计算出新的体素到毫米转换。我该如何解决这个问题?我认为它应该相对简单:

XYZvox =[ 1     1     1     1   409   409   409   409
     1     1   389   389     1     1   389   389
     1   162     1   162     1   162     1   162]

M =[0.0337    0.0958   -0.9616   -2.5360
    0.3706    0.0107    0.1012 -150.2009
    0.0201   -0.3571   -0.2550 -231.0513
         0         0         0    1.0000]

for i=1:8
    poi1=XYZvox(:,i);
    poi2=[XYZvox(:,i)];
    poi2(4,1)=1;

    poi_trans=M*poi2;

    poi_trans=poi_trans(1:3);

    scatter3(poi1(1),poi1(2),poi1(3),'red','filled'); xlabel('x'); hold all;
    scatter3(poi_trans(1),poi_trans(2),poi_trans(3),'green','filled'); xlabel('x'); ylabel('y'); zlabel('z'); 
end

编辑:原始顶点是成像仪坐标中3d成像数据堆栈的限制,转换后的数据是世界坐标。如果没有旋转,只有缩放和平移,我可以计算出新的pix / vox-> mm转换,但因为音量也是旋转的,这使得它变得更加困难

0 个答案:

没有答案