0

我正在尝试注册两个卷(vol1vol2)。的大小vol140x40x24。的大小vol264 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
4

1 回答 1

1

如果您使用仿射矩阵对列向量进行操作,则仿射矩阵的格式看起来不错,如[X; Y; Z; 1] = T*[x; y; z; 1]. MATLAB 的示例被转置的原因是因为它对1x4行向量进行操作,如[X, Y, Z, 1] = [x, y, z, 1]*(T').

至于矩阵中的实际数字,我无法评论,因为我不知道原始图像。我确实注意到有一个 x 翻译-61.6055,对于您拥有的图像的大小来说,这似乎相当大。你确定这是正确的答案吗?

我建议您先从一对简单的图像开始,在这些图像中您事先知道答案(可能是在 Paint 中绘制的黑色背景上的白色方块),以确认您的配准算法给出了正确的答案。

于 2015-08-22T17:17:25.520 回答