fMRI 数据通常以 NIfTI(Neuroimaging Informatics Technology Initiative) 格式存储,这是一种专为神经影像设计的开放标准格式。以下是简化说明和示例:
1. 常见fMRI数据格式
格式 | 扩展名 | 特点 |
---|---|---|
NIfTI | .nii 或 .nii.gz | 最常用,支持3D(单时间点)或4D(多时间点)数据,可压缩(.gz) |
DICOM | .dcm | 原始扫描仪输出格式,单文件存储单层图像,需转换为NIfTI用于分析 |
MINC | .mnc | 另一种开放格式,灵活性高,但不如NIfTI普及 |
2. NIfTI文件示例(简化版)
假设一个fMRI扫描包含:
- 3个脑切片(Z轴)
- 每个切片尺寸 3×3 像素(X×Y)
- 4个时间点(TR=2秒)
(1) 4D数据存储结构
数据实际是一个 4D数组(X×Y×Z×T),用伪代码表示:
import numpy as np
# 模拟fMRI数据:3(x) × 3(y) × 3(z) × 4(t)
fmri_data = np.array([# 时间点1 (t=0s)[[[1.2, 1.1, 0.9], # 切片1 (z=1)[1.0, 0.8, 0.7],[0.5, 0.4, 0.3]],[[0.9, 0.8, 0.7], # 切片2 (z=2)[0.6, 0.5, 0.4],[0.3, 0.2, 0.1]],[[0.8, 0.7, 0.6], # 切片3 (z=3)[0.5, 0.4, 0.3],[0.2, 0.1, 0.0]]],# 时间点2 (t=2s) 数据类似,数值略有变化...# 时间点3, 4...
])
- 数值含义:每个数字代表一个体素(voxel)的BOLD信号强度(已去噪和标准化)。
(2) 配套的头文件(.hdr)
NIfTI文件通常包含一个头文件(如fmri.nii
+ fmri.hdr
),记录以下元数据:
dimensions: 3, 3, 3, 4 # X, Y, Z, T
voxel_size: 3.0, 3.0, 3.0 # 毫米(mm)
TR (Repetition Time): 2.0 # 秒
data_type: float32 # 数据类型
3. 实际文件示例
- 单文件NIfTI(.nii.gz):
使用工具(如FSL、SPM)加载后,可看到:- 4D数据:
(64, 64, 40, 200)
表示 64×64像素×40层×200个时间点。 - 可视化:
from nilearn import plotting plotting.plot_epi('fmri.nii.gz') # 显示第一个时间点的中间切片
- 4D数据:
4. 从原始数据到NIfTI的流程
- DICOM → NIfTI:
- 扫描仪输出DICOM文件(每个切片一个.dcm文件)。
- 使用
dcm2niix
工具转换:dcm2niix -o /output_dir /input_dicom_dir
- 预处理:
- 对NIfTI文件进行去噪、配准、标准化(如FSL的
bet
去颅骨)。
- 对NIfTI文件进行去噪、配准、标准化(如FSL的
5. 关键特点总结
- 4D结构:空间(X,Y,Z) + 时间(T)。
- 体素值:BOLD信号强度,浮点数(如float32)。
- 元数据:体素尺寸(mm)、TR、坐标系等存储在头文件中。
类比理解
将fMRI数据想象为一部3D电影:
- 每一帧(时间点)是一张3D照片(X×Y×Z)。
- NIfTI文件就是整部电影(所有帧+导演注释)打包成一个文件。
实际数据远比示例复杂(如典型fMRI为 64×64×40×200
),但基本原理相同。