最近工作中需要解决一个问题:
读取nii格式的医学图像,更改内部的矩阵,重新保存成nii数据
但是Nifti数据本身是除了 矩阵信息(也就是图像信息之外),还有和物理坐标相关的 仿射矩阵 以及 Header头文件 信息,但是nibabel的获取数据的方法get_data()是一个单向操作,只可以获取数据,并不能把数据直接存到一个现成的nii文件中,并没有诸如nii_img.data = newdata 这样的方法,意味着不能直接对数据进行更改。
更坑的是,网上也没有教程,官方也没有教程,所以我决定自己写一个!
import nibabel as nb
#读取nii文件
nii_img = nb.load('test.nii.gz')
nii_data = nii_img.get_data()
new_data = nii_data.copy()
#省略一些处理data的骚操作,比如:
#new_data[new_data>0] = 1
#把仿射矩阵和头文件都存下来
affine = nii_img.affine.copy()
hdr = nii_img.header.copy()
#形成新的nii文件
new_nii = nb.Nifti1Image(new_data, affine, hdr)
#保存nii文件,后面的参数是保存的文件名
nb.save(new_nii, 'new_test.nii.gz')