读取和保存nifti图像之nibabel与SimpleITK的区别

nibabel读取.nii或.nii.gz

import nibabel as nib

file_path = '/home/.../motion_102_0000.nii.gz' # file suffix can also be .nii

data = nib.load(file_path)

voxel_ndarray = data.get_fdata()  #读取成numpy array

print(voxel_ndarray.shape)

output:

(x,y,z), 如(192,256,40)40是slice的数量。

 SimpleITK读取.nii或.nii.gz

import SimpleITK as sitk

file_path = '' #给出文件路径

img_obj = sitk.ReadImage(file_path)
origin = img_obj.GetOrigin()        #读取图像origin, direction, space便于后面存储保留这些信息
direction = img_obj.GetDirection()
space = img_obj.GetSpacing()

voxel_ndarray = sitk.GetArrayFromImage(img_obj)

print(voxel_ndarray.shape)

output:

输出(z, x, y), 其中z是slice的数量。这是两个工具包的差别之出。

文件的保存使用nibabel

#newnparray 为需要存的np array
#new_filepath 为存储数据的路径

new_img = nib.Nifti1Image(newnparray, np.eye(4))

nib.save(new_img, new_filepath)

缺点:损失了space, origin, direction等信息, 会将这些值设为默认值。

文件被存为后缀带有.nii的形式。

文件的保存使用SimpleITK

savedImg = sitk.GetImageFromArray(newnparray)
savedImg.SetOrigin(origin)
savedImg.SetDirection(direction)
savedImg.SetSpacing(space)
sitk.WriteImage(savedImg, new_filepath)

 文件被存为.nii.gz的形式。

 

你可能感兴趣的:(读取和保存nifti图像之nibabel与SimpleITK的区别)