import numpy as np
import nibabel as nib
img1 = nib.load('moving.nii')
img2 = nib.load('fixed.nii')
data1 = img1.get_fdata()
data2 = img2.get_fdata()
affine1 = img1.affine
affine2 = img2.affine
xs = 2.0
ys = 1.0
zs = 1.0
SCAL=np.array([[1*xs,0,0,0],[0,1*ys,0,0],[0,0,1*zs,0],[0,0,0,1]])
SCAL = np.linalg.inv(affine1)@SCAL@affine1
FLIPXY_44 = np.diag([-1, -1, 1, 1])
SCAL = FLIPXY_44 @ SCAL @ np.linalg.inv(FLIPXY_44)
print(SCAL)
结果是波纹管:
SCAL=
1.98161416 -0.132748624 0.0206291961 104.125084
-0.132748922 1.01795230 -0.00278979630 -14.0813909
0.0206292419 -0.00278979623 1.00043354 2.18825444
0 0 0 1
没有思考图像中心缩放中心的翻译,我正在尝试重现旋转矩阵,即scale [:3,:3],如您所见,它并不完全相同。有人知道如何准确计算它吗?
affine1 =
0.743074 -0.100490 -0.015616 -78.821861
0.100468 0.743237 -0.002111 -95.039352
0.015758 0.000000 0.749834 -163.115112
0.000000 0.000000 0.000000 1.000000
affine2 =
0.320133 -0.189304 0.056924 -66.191055
0.189440 0.274100 -0.177681 4.535652
0.047455 0.182846 0.325291 -103.358688
0.000000 0.000000 0.000000 1.000000
我可以从ITK-SNAP的GUI中复制旋转和翻译模拟,但是缩放我不能,有人可以帮助我吗?预先感谢PS:我基于本文的尝试:
如何将ITK CenterFotation Point在仿射转换矩阵中?
对于ITK-NIBABEL转换,您可能想看看此
jupyter笔记本.。