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)))

在这里插入图片描述

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.参考文献

  • 14
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值