一文道尽医学图像 ABIDE 等数据集 .nii.gz 文件类型Python格式化显示以及各个字段含义 (附源码)

nii.gz 文件

.nii.gz 文件通常是医学影像数据的一种常见格式,比如神经影像(如脑部MRI)。这种文件格式通常是经过gzip压缩的NIfTI格式(Neuroimaging Informatics Technology Initiative)。

要在Python中查看.nii.gz文件,你可以使用一些专门的库,如Nibabel(NiBabel是用于读取和写入神经影像数据的Python库)和SimpleITK(SimpleITK是一个用于医学影像处理的库)。

Nibabel

安装

 $ pip install nibabel

使用

一、可视化
import nibabel as nib
import matplotlib.pyplot as plt
import seaborn as sns
import os

sns.set_style('darkgrid')

img1_path = './testData/test.nii.gz'

img = nib.load(img1_path)

# 获取图像数据
data = img.get_fdata()

# 可视化每一层切片
num_slices = data.shape[-1]

# 设置子图的行数和列数
num_rows = num_slices // 10 + 1  # 每行显示10个切片
num_cols = min(num_slices, 10)

# 设置子图的大小
fig, axes = plt.subplots(num_rows, num_cols, figsize=(15, 15))

# 遍历每一层切片并可视化
for i in range(num_slices):
    row_idx = i // 10
    col_idx = i % 10

    # 在子图中显示每一层切片
    axes[row_idx, col_idx].imshow(data[:, :, i], cmap='gray')
    axes[row_idx, col_idx].axis('off')  # 关闭坐标轴

# 如果切片数量不是10的倍数,隐藏多余的子图
for i in range(num_slices, num_rows * num_cols):
    row_idx = i // 10
    col_idx = i % 10
    fig.delaxes(axes[row_idx, col_idx])

plt.show()

运行结果
在这里插入图片描述

二、读取参数
img1_path = './testData/test.nii.gz'
# 读取图像
img1_obj = nib.load(img1_path)
print(f'Type of the image {type(img1_obj)}')
# 提取 numpy 数组
img1_data = img1_obj.get_fdata()
# 查看图像大小
height, width, depth = img1_data.shape
print(f"The image object height: {height}, width:{width}, depth:{depth}")
# 查看图像值范围
print(f'image value range: [{img1_data.min()}, {img1_data.max()}]')

# 查看图像成像信息,如 层厚,平面(in-plane)分辨率等

# 矩阵以外的信息可以通过 image_obj.header 获取

# header是键值对,查看 header 包含的所有信息
print('headers', img1_obj.header.keys())
# 查看成像信息
pixdim = img1_obj.header['pixdim']
print(f'z轴分辨率: {pixdim[3]}')
print(f'in plane 分辨率: {pixdim[1]} * {pixdim[2]}')
x_range = pixdim[1] * height
y_range = pixdim[2] * width
z_range = pixdim[3] * depth
print(f"The image object x_range: {x_range}, y_range:{y_range}, z_range:{z_range}")
# 整个数据
print('img1_obj', img1_obj)

在这里插入图片描述

含义

  • image_obj.header.keys() 返回头部信息的键值列表。这些键值对应于头部信息的不同字段。下面是一些常见的键和它们的含义,这可能因数据集和图像类型而有所不同:
  1. 'sizeof_hdr'

    • 头部结构的大小(以字节为单位)。
  2. 'data_type'

    • 数据类型的字符串描述。
  3. 'db_name'

    • 数据库名称。
  4. 'extents'

    • 数据文件中图像数据之外的额外信息的长度(以字节为单位)。
  5. 'session_error'

    • 与会话错误相关的信息。
  6. 'regular'

    • 表示数据是否按照正则网格排列。
  7. 'dim_info'

    • 与维度信息相关的标志。
  8. 'dim'

    • 包含数据维度信息的列表,通常是三个值,表示 x、y 和 z 方向上的体素数目。
  9. 'intent_p1', 'intent_p2', 'intent_p3'

    • 有关数据意图的一些参数。
  10. 'intent_code'

    • 数据意图的代码。
  11. 'datatype'

    • 数据的存储类型,如 DT_UINT16DT_FLOAT32 等。
  12. 'bitpix'

    • 每个像素的位数。
  13. 'slice_start'

    • 切片的起始位置。
  14. 'pixdim'

    • 包含像素的尺寸信息的列表,通常是三个值,表示 x、y 和 z 方向上的像素大小。
  15. 'vox_offset'

    • 图像数据的偏移位置。
  16. 'scl_slope', 'scl_inter'

    • 缩放和截距参数,用于将原始像素值转换为实际的物理值。
  17. 'slice_end'

    • 切片的结束位置。
  18. 'slice_code'

    • 切片的编码方式。
  19. 'xyzt_units'

    • 数据单位的标志。
  20. 'cal_max', 'cal_min'

    • 校准最大和最小值。
  21. 'slice_duration'

    • 切片的持续时间。
  22. 'toffset'

    • 用于时间偏移的参数。
  23. 'descrip'

    • 描述信息。
  24. 'aux_file'

    • 辅助文件名。
      在这里插入图片描述
  25. 'qform_code', 'sform_code'

    • 用于定义坐标系的代码。
  26. 'quatern_b', 'quatern_c', 'quatern_d'

    • 用于定义仿射矩阵的参数。
  27. 'qoffset_x', 'qoffset_y', 'qoffset_z'

    • 用于定义坐标系原点的参数。
  28. 'srow_x', 'srow_y', 'srow_z'

    • 用于定义仿射矩阵的行。
  29. 'intent_name'

    • 数据意图的名称。
  30. 'magic'

    • 文件的 “magic” 字符串,用于标识文件类型。

这只是头部信息中的一些常见字段,具体的含义可能会因数据集和图像类型而有所不同。你可以使用这些键来访问特定的头部信息,例如 image_obj.header['dim'] 可以获取数据的维度信息。

  • img.affine 是一个属性,它返回图像数据的仿射矩阵(Affine Matrix)。仿射矩阵是一个线性变换矩阵,用于将体素坐标映射到物理空间坐标。在神经影像学中,物理空间坐标通常与实际的解剖结构或空间位置相关联。

具体来说,仿射矩阵由以下形式的矩阵表示:
在这里插入图片描述

其中:

  • Rij表示旋转和缩放的元素。
  • Ti表示平移的元素。

这个仿射矩阵允许将体素坐标 ((i, j, k)) 映射到物理空间坐标 ((x, y, z))。具体地说,对于一个三维体素坐标 ((i, j, k)),物理空间坐标 ((x, y, z)) 的计算方式如下:

nibabel 中,img.affine 提供了访问这个仿射矩阵的方式,使得用户可以将图像中的体素坐标映射到物理空间坐标,或者反过来。这对于将图像与现实世界中的解剖结构相对应非常有用。

成像

功能性磁共振成像(fMRI)利用 BOLD(Blood Oxygen Level Dependent)信号进行成像。BOLD信号是一种血氧水平依赖信号,与血液中的氧含量有关。这种信号成为fMRI的基础,用于测量脑活动。

fMRI中的BOLD信号的产生基于以下原理:

  1. 神经活动和代谢变化: 当某个脑区域活跃时,该区域的神经细胞消耗氧气并产生代谢产物。这导致局部的血液氧含量下降。

  2. 血流调节: 大脑对血流进行动态调节,以满足活跃区域的能量需求。当某个区域活跃时,局部血流会增加,带来更多富含氧气的血液。

  3. BOLD信号: 富含氧气的血液和贫含氧气的血液对磁场的影响不同。在fMRI中,主要测量局部脑区域血氧水平的变化,这反映了脑活动的变化。

通过检测BOLD信号的变化,fMRI可以提供关于脑活动的空间和时间分辨率相对较高的图像。研究人员可以使用fMRI来研究任务激活、静息状态下的脑网络、疾病状态等。fMRI成像已成为神经科学和认知神经科学研究的常见工具。

NIfTI 文件中每个层切片的成像原理主要利用了图像中每个位置的像素值。NIfTI 文件是一种神经影像数据格式,包含了三维或四维(包括时间信息)图像数据。每个图像体素(Voxel)在文件中都有一个对应的像素值,这个值表示该体素在成像中的强度或其他特定属性。(应该是 BOLD)

具体来说,对于结构磁共振成像(sMRI)或功能性磁共振成像(fMRI)等数据,每个像素值通常表示相应体素的信号强度。这些像素值经过图像采集和处理,反映了成像区域内的解剖结构、脑活动等信息。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoe_ya

如果你成功申请,可以打赏杯奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值