我正在尝试注册两个卷(vol1
和vol2
)。 vol1
的尺寸为40x40x24
。 vol2
的尺寸为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
答案 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中绘制的黑色背景上的白色方块),以确认你的注册算法给出了正确的答案。