如何在python中以Nifti格式编辑和保存三维体积的体素大小和相应仿射?
我正在更改一些3D体积的体素大小。如何编辑如何在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体素大小
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
体素大小,并插入体积U256 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)
感谢您回答如何更改尺码的问题。但这种方法仍然放弃了将体素坐标映射回扫描仪坐标的仿射。感谢您回答如何更改大小。但这种方法仍然放弃了将体素坐标映射回扫描仪坐标的仿射。