计算3D仿射变换并使用

时间:2015-08-21 22:39:58

标签: matlab image-processing 3d affinetransform image-registration

我正在尝试注册两个卷(vol1vol2)。 vol1的尺寸为40x40x24vol2的尺寸为64 x64x11

到目前为止,我已经提取了他们的功能然后匹配它们。现在,我在pairs中存储了两个卷中的一组对应点,这是一个大小为100x6的矩阵(pairs的每一行都是[x y z X Y Z]其中{{} 1}}是(x,y,z)中体素的坐标,vol1[X Y Z]中对应的体素。然后,使用RANSAC算法,我计算了3D仿射变换,例如,T就像下面这样:

vol2

我有几个问题。首先,这个仿射变换矩阵看起来是否正确?它对我来说是正确的。如果它是正确的,那么为什么计算3D仿射变换的MATLAB中的函数 affine3d 具有零列而不是零行(如上面的T中所示)?它看起来像我的变换T的转置。

如果我的转换正确则会出现另一个问题。我尝试使用变换T重新采样vol1,但计算出的体素坐标为负!我感到很困惑。我不知道是什么原因引起了这个问题。

这是我的代码。如果您发现任何问题,请告诉我。

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

1 个答案:

答案 0 :(得分:1)

如果您使用它来操作列向量,则仿射矩阵的格式看起来很好,如[X; Y; Z; 1] = T*[x; y; z; 1]中所示。 MATLAB示例转换的原因是因为它在1x4行向量上运行,如[X, Y, Z, 1] = [x, y, z, 1]*(T')

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

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