由于一些需求,需要对更改nii格式的医学图像的内部矩阵,并且无损失的重新保存成新的nii数据。nibabel和simpleitk都可以对医学图像进行读取和保存。但是Nifti数据本身除了矩阵信息,还有和物理坐标相关的仿射矩阵以及Header头文件信息。
1.nibabel保存新的nii文件
nii_image=nib.load('文件地址')
#将仿射矩阵和头文件保存下来
affine=nii_image.affine
hdr=nii_image.header
#将矩阵信息保存下来
nii_data=nii_image.get_data()
image = RandomCrop(nii_data, crop_factor=(128, 128, 128))#裁剪图片
#形成新的nii文件
new_nii=nib.Nifti1Image(image,affine,hdr)
nib.save(new_nii,'新文件地址')
2.SimpleITK 保存新的nii文件
image=sitk.ReadImage('文件地址')
direction=image.GetDirection()
spacing=image.GetSpacing()
origin=image.GetOrigin()
image_arr=sitk.GetArrayFromImage(image)
new_arr=RandomCrop(image_arr,crop_factor=(128,128,128))#裁剪图像
new_image=sitk.GetImageFromArray(new_arr)
new_image.SetSpacing(spacing)
new_image.SetOrigin(origin)
new_image.SetDirection(direction)
sitk.WriteImage(new_image,'新文件地址')