仿射矩阵适用于图像坐标,而不是图像本身。您需要将仿射矩阵与图像的坐标列表相乘,然后您将得到新的坐标,对应于原始坐标。此外,转换是通过将仿射矩阵的第 4 列与1
索引列表最后一行中的附加 ' 相乘来完成的(这些中的每个匹配,在该矩阵的单个向量乘法处)。
因此,您需要生成一个 3D 坐标列表,作为 3xn 矩阵,然后1
在底部添加一行 ',并将 4x4 仿射矩阵乘以 4xn 坐标矩阵。
例如,假设您的图像是 4x4x4:
[X Y Z]=ndgrid(1:4);
ind=reshape(cat(3,X,Y,Z),[],3)'; % list of all of the indices in the image
ind=[ind; ones(1,size(ind,2))]; % add a row of `1`s
ind_aff=m*ind;
最下面一行ind_aff
是1
's,你可以忽略它。前 3 行现在是新坐标,而每一列都是与ind
矩阵中由相同列号协调的值的坐标。
例如,如果
m=spm_matrix([3 1 10 0.5 0.9 0.3])
你会得到这样的转变:
% old coordinates (column-wise)
ind(1:3,1:3)=
1 2 3
1 1 1
1 1 1
% new coordinates (column-wise)
ind_aff(1:3,1:3)=
4.5609 5.1547 5.7486
1.4073 0.7892 0.1711
9.3693 8.8542 8.3392