将.nii文件读取成numpy array是很常见的,但将分割好的结果numpy array保存为nii格式却也是必须的。
现在介绍两种将numpy array保存为nii格式的方法。
1. simpleITK
## using simpleITK to load and save data.
import SimpleITK as sitk
itk_img = sitk.ReadImage('./nifti.nii.gz')
img = sitk.GetArrayFromImage(itk_img)
print("img shape:",img.shape)
## save
out = sitk.GetImageFromArray(img)
sitk.WriteImage(out,'simpleitk_save.nii.gz')
2. Nibabel
import nibabel as nib
import numpy as np
new_image = nib.Nifti1Image(my_arr, np.eye(4))
nib.save(new_image, 'nifti.nii.gz')
******** 高能预警:
将 numpy array 保存为 nii 格式图像之后,使用 itk-snap 却打不开,这是为什么呢?
原来 itk-snap 只接受 int16 类型的数据,所以你需要 将 numpy 数组强制转换成 int16 类型。
## save
out = sitk.GetImageFromArray(img)
out = out.astype(np.int16)
sitk.WriteImage(out,'simpleitk_save.nii.gz')