如何在python中以Nifti格式编辑和保存三维体积的体素大小和相应仿射?

如何在python中以Nifti格式编辑和保存三维体积的体素大小和相应仿射?,python,image,medical,nifti,nibabel,Python,Image,Medical,Nifti,Nibabel,我正在更改一些3D体积的体素大小。如何编辑pixdim字段并计算新的affine 我有一些磁共振体是各向异性的,体素大小是,比如说,0.5x0.5x3mm。我有一些代码可以将它们插值到各向同性(比如0.5x0.5x0.5mm体素大小)体积中。 问题是,当我需要保存文件时,我必须计算仿射以将ijk空间中现在密度更大的体素映射到参考xyz空间。我该怎么做 首先,我的想法是使用旧的仿射并计算新的仿射 例如,如果体积V的形状为256 x 256 x 20体素,体素大小为0.5 x 0.5 x 3体素大小

我正在更改一些3D体积的体素大小。如何编辑
pixdim
字段并计算新的
affine

我有一些磁共振体是各向异性的,体素大小是,比如说,
0.5x0.5x3
mm。我有一些代码可以将它们插值到各向同性(比如
0.5x0.5x0.5
mm体素大小)体积中。 问题是,当我需要保存文件时,我必须计算仿射以将ijk空间中现在密度更大的体素映射到参考xyz空间。我该怎么做

首先,我的想法是使用旧的仿射并计算新的仿射

例如,如果体积V的形状为
256 x 256 x 20
体素,体素大小为
0.5 x 0.5 x 3
体素大小,并插入体积U
256 x 256 x 120
体素大小为
0.5 x 0.5

旧仿射将执行
[255 255 19]OA=[X Y Z]
,新仿射应执行
[255 255 119]NA=[X Y Z]
,我们知道
AX=bx=inverse(A)B

因此,新的仿射应该是
逆([255 255 255 119])[X Y Z]
。 然而,逆矩阵只存在于方阵中。不会有这样的
逆([255 255 119])

在python nibabel matlab nifti工具箱中似乎没有
set\u voxel\u size
函数等等。这是怎么回事


如何明确更改体素大小?

我目前面临类似的问题。为了解决这个问题,我从头开始创建了一个nifti头,其中包含0.5 mm的各向同性体素和所需的形状。可以使用设置体素大小(单位:mm)

将nibabel作为nib导入
将numpy作为np导入
hdr=nib.Nifti1Header()
hdr.set_数据_形状((256、256、120))
hdr.set_缩放((0.5,0.5,0.5))#设置体素大小
hdr.set_xyzt_单位(2)#毫米
dst_aff=hdr.get_best_affine()
src_aff=np.眼(4)
src_aff_inv=np.linalg.inv(src_aff)
转换=np.matmul(src_aff_inv,dst_aff)

我目前面临着类似的问题。为了解决这个问题,我从头开始创建了一个nifti头,其中包含0.5 mm的各向同性体素和所需的形状。可以使用设置体素大小(单位:mm)

将nibabel作为nib导入
将numpy作为np导入
hdr=nib.Nifti1Header()
hdr.set_数据_形状((256、256、120))
hdr.set_缩放((0.5,0.5,0.5))#设置体素大小
hdr.set_xyzt_单位(2)#毫米
dst_aff=hdr.get_best_affine()
src_aff=np.眼(4)
src_aff_inv=np.linalg.inv(src_aff)
转换=np.matmul(src_aff_inv,dst_aff)

感谢您回答如何更改尺码的问题。但这种方法仍然放弃了将体素坐标映射回扫描仪坐标的仿射。感谢您回答如何更改大小。但这种方法仍然放弃了将体素坐标映射回扫描仪坐标的仿射。