我正在尝试注册两个卷(vol1
和vol2
)。的大小vol1
是40x40x24
。的大小vol2
是64 x64x11
。
到目前为止,我已经提取了它们的特征,然后进行了匹配。现在,我在两个体积中有一组对应的点,这些点存储在pairs
其中是一个大小矩阵100x6
(每一行pairs
是体素的坐标在[x y z X Y Z]
哪里,并且是对应的体素在哪里)。然后,使用 RANSAC 算法,我计算了 3D 仿射变换 T。例如,T 如下所示:(x,y,z)
vol1
[X Y Z]
vol2
T=
2.7791 0.8204 0.7561 -61.6055
-0.4418 2.2663 -1.9882 29.0375
-0.2120 0.6568 -0.7041 6.2702
0 0 0 1.0000
我有一些问题。首先,这个仿射变换矩阵看起来正确吗?在我看来是正确的。如果它是正确的,那么为什么 MATLAB 中计算 3D 仿射变换的函数affine3d具有零列而不是零行(如上面的 T 中)?它看起来像我的变换 T 的转置。
如果我的转换是正确的,那么就会出现另一个问题。我尝试使用变换 T 对 vol1 重新采样,但计算出的体素坐标为负数!!!我感到很困惑。我不知道是什么导致了这个问题。
这是我的代码。如果您发现任何问题,请告诉我。
function [ vol1R ] = resampling(vol1, vol2, T)
[size1, size2, size3] = size(vol2);
vol1R = zeros(size1,size2,size3); % Initializing registered vol1
for i= 1:size1
for j= 1:size2
for k = 1:size3
V = [i;j;k;1]; % V is the coordinates of a voxel on the registered vol1
% correspoding to voxel v on the vol1
% V = T * v : Relationship between v and V
v = T\V; % Problem occurs here!!!!!!! v has some negative values
% v (coordinates in vol1)
% continue
end
end
end