Python第三方库之nibabel

1.nibabel简介

NiBabel提供对一些常见医学和神经影像文件格式的读/写访问,包括ANALYZE(plain,SPM99,SPM2及更高版本),GIFTI,NIfTI1,NIfTI2CIFTI-2,MINC1,MINC2AFNI BRIK/HEAD,MGHECAT以及Philips PAR/REC。该库可以完全或选择性地访问各种图像格式的元数据,可以通过 NumPy 数组访问图像数据,对DICOM 的支持非常有限,也是PyNIfTI第三方库的继任者。

nibabel图像由三个方面组成

  • 3D 或 4D图像数据数组
  • 一个告知图像数组数据在引用空间中的位置的仿射数组
  • 描述图像的图像元数据(关于数据的数据),通常以图像头部的形式。

本文主要讨论利用nibabel库读写NIfTI格式的脑肿瘤图像,文件后缀名为.nii.gz,同时使用matplotlib显示图像数据。

在这里插入图片描述

2.nibabel安装及导入

安装Python第三方库之前建议配置一个国内镜像,如清华镜像源,详见Linux配置pip清华镜像源Windows配置pip国内镜像源

在Linux系统Terminal中执行下列命令即可

pip install nibabel

nibabel导入范式,一般需要重命名导入

import nibabel as nib

3.nibabel常用函数和属性

3.1nibabel.load(filename, **kwargs)

加载给定文件名的文件,猜测文件类型,返回SpatialImage实例。这里得到Nifti1Image实例的脑肿瘤图像。

import os
import matplotlib.pyplot as plt
import nibabel as nib

# 文件夹路径和文件名
dirname="/dataset/RSNA_ASNR_MICCAI_BraTS2021_TrainingData_16July2021/BraTS2021_00000/"
basename="BraTS2021_00000_t1.nii.gz"
full_path=os.path.join(dirname,basename)
# 加载脑肿瘤图像
brain_tumor_img=nib.load(full_path)

print("加载医学图像类型为{}".format(type(brain_tumor_img)))

在这里插入图片描述

扫描二维码关注公众号,回复: 14988466 查看本文章

3.2nibabel.nifti1.Nifti1Image.get_fdata(self,caching='fill',dtype=<class 'numpy.float64'>,)

Nifti1Image实例方法,返回应用了必要缩放的浮点图像数据

# 返回应用了必要缩放的浮点图像数据
brain_tumor_img_data=brain_tumor_img.get_fdata()
print("浮点图像数据类型为{}".format(type(brain_tumor_img_data)))

在这里插入图片描述

查看三个维度的切片数组

# 获得图像数据形状
print("图像数据形状为{}".format(brain_tumor_img_data.shape))

def show_slices(slices):
   """ 显示一行图像切片 """
   fig, axes = plt.subplots(1, len(slices))
   for i, slice in enumerate(slices):
       axes[i].imshow(slice.T, cmap="gray", origin="lower")
# 获得三个维度的切片
slice_0 = brain_tumor_img_data[120, :, :]
slice_1 = brain_tumor_img_data[:, 120, :]
slice_2 = brain_tumor_img_data[:, :, 77]
show_slices([slice_0, slice_1, slice_2])
plt.suptitle("Center slices for brain tumor image")

在这里插入图片描述

3.3nibabel.nifti1.Nifti1Image.affine

Nifti1Image实例属性,获得仿射变换矩阵

# 获得仿射变换矩阵
affine=brain_tumor_img.affine
print("仿射变换矩阵为\n{}".format(affine))

在这里插入图片描述

3.4nibabel.aff2axcodes(aff, labels=None, tol=None)

获得仿射的轴方向代码的函数

# 获得仿射的轴方向代码
orientation = nib.aff2axcodes(affine)
print("仿射的轴方向代码为\n{}".format(orientation))

在这里插入图片描述

3.5nib.save(img, filename, **kwargs)

将SpatialImage实例img保存到文件,使格式适应“filename”

# 将SpatialImage实例img保存到文件brain_tumour.nii
nib.save(brain_tumor_img,"brain_tumour.nii")

在这里插入图片描述

4.参考文献

猜你喜欢

转载自blog.csdn.net/m0_46223009/article/details/128126000
今日推荐