python使用nibabel和sitk读取保存nii.gz文件实例
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)

nii.gz格式是医学图像常用的压缩格式,python中可用nibabel和sitk来读取保存。 使用nibabel 由于使用nibabel图像会旋转90度,所以读取保存的时候还得保存映射信息,3维图像格式为(z, y, x) 读取nii.gz文件 img = nib.load('xxxxx.nii.gz') img_affine = img.affine img = img.get_data() 保存nii.gz文件 nib.Nifti1Image(img,img_affine).to_filename(‘xxxxx.nii.gz’) 使用sitk 使用sitk读取nii时,读取出来的 在Python中,处理医学图像数据时,经常遇到的文件格式是`.nii.gz`,这是一种用于存储MRI或CT等3D图像数据的压缩格式。在本文中,我们将深入探讨如何使用`nibabel`和`SimpleITK`(简称`sitk`)这两个库来读取和保存这种文件。 `nibabel`是Python中广泛使用的医学图像处理库,它能方便地读取和写入多种医学图像格式,包括`.nii.gz`。然而,需要注意的是,使用`nibabel.load()`加载`.nii.gz`文件时,图像数据可能会自动旋转90度,这是因为`nibabel`默认将3D图像的轴顺序设为(z, y, x),而不是常见的(x, y, z)。因此,我们需要保留图像的映射信息(affine),以便在保存时恢复正确的轴顺序。以下是使用`nibabel`的基本操作: ```python import nibabel as nib # 读取nii.gz文件 img = nib.load('xxxxx.nii.gz') img_affine = img.affine data = img.get_data() # 处理数据... # 保存nii.gz文件 new_img = nib.Nifti1Image(data, img_affine) new_img.to_filename('xxxxx.nii.gz') ``` 另一方面,`SimpleITK`(Sitk)是另一个强大的医学图像处理库,它源自C++的ITK库,并提供了Python接口。使用`SimpleITK`读取`.nii.gz`文件后,得到的是一个图像对象,可以直接进行处理。`SimpleITK`读取的图像轴顺序是(x, y, z)。读取和保存`.nii.gz`文件的`SimpleITK`操作如下: ```python import SimpleITK as sitk # 读取nii.gz文件 img = sitk.ReadImage('xxxxx.nii.gz') # 转换为numpy数组进行处理 data = sitk.GetArrayFromImage(img) # 处理数据... # 将numpy数组转换回SimpleITK图像 new_img = sitk.GetImageFromArray(data) # 保存nii.gz文件 sitk.WriteImage(new_img, 'xxxxx.nii.gz') ``` 在处理`.nii.gz`文件时,数据类型是一个重要的考虑因素。通常,医学图像数据是整型,例如16位有符号整型。如果需要转换为0到255的灰度图,可以使用`SimpleITK`的`RescaleIntensity`和`Cast`函数: ```python img = sitk.ReadImage('xxxxx.nii.gz') rescaled_img = sitk.RescaleIntensity(img) casted_img = sitk.Cast(rescaled_img, sitk.sitkUInt8) ``` 此外,当使用`SimpleITK`保存图像时,确保数组类型是`float`,因为`int`类型可能会导致错误。如果原始数据是`int`类型,保存前应将其转换为`float`: ```python savedImg = sitk.GetImageFromArray(ct_array.astype(float)) ``` 保存图像时,还需注意保留图像的元信息,如原点(Origin)、方向(Direction)和空间分辨率(Spacing)。这些信息对于保持图像的正确解释至关重要: ```python savedImg.SetOrigin(origin) savedImg.SetDirection(direction) savedImg.SetSpacing(space) ``` `nibabel`和`SimpleITK`都是处理`.nii.gz`文件的强大工具,它们各有优势。选择使用哪个库主要取决于具体的任务需求和对性能、易用性的考量。理解这些库的工作原理和注意事项是高效处理医学图像数据的关键。
























- 底特律打坐的椰子2023-12-09感谢大佬分享的资源给了我灵感,果断支持!感谢分享~
- Zatopek2022-11-30超赞的资源,感谢资源主分享,大家一起进步!

- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


