fMRI数据的NIfTI文件是神经影像领域的常用存储格式,Nilearn库提供了完整的工具链来支持这类文件的加载和预处理工作,能有效提升数据处理效率。

环境准备
首先需要安装Nilearn及其依赖库,推荐使用conda或者pip完成安装,确保numpy、nibabel等基础库已正确配置。可以通过以下命令安装所需依赖:
pip install nilearn numpy nibabel
加载NIfTI格式的fMRI数据
Nilearn中提供了image.load_img函数可以直接读取本地的NIfTI文件,返回的是Nilearn封装的4D影像对象,包含了fMRI数据的时间维度和空间维度信息。
import numpy as np
from nilearn import image
# 加载本地NIfTI格式的fMRI数据,文件路径替换为实际路径
fmri_path = "sub-01_task-rest_bold.nii.gz"
fmri_img = image.load_img(fmri_path)
# 查看数据的基本信息
print("数据形状:", fmri_img.shape)
print("仿射矩阵:", fmri_img.affine)
常用预处理操作
时间层校正
fMRI扫描时不同脑层的采集时间存在差异,时间层校正可以消除这种时间偏差,Nilearn的image.slice_timing函数可以完成该操作。
from nilearn import image
# 假设TR为2秒,层采集顺序为从下到上,共30层
tr = 2
n_slices = 30
slice_order = np.arange(n_slices) # 层顺序数组,根据实际采集参数调整
# 执行时间层校正
fmri_slice_timed = image.slice_timing(
fmri_img,
t_r=tr,
slice_order=slice_order,
n_slices=n_slices
)
头动校正
被试在扫描过程中的头动会影响数据质量,头动校正可以将所有时间点的影像对齐到参考时间点,使用image.four_dim_img_to_three_dim_imgs拆分后逐帧对齐即可。
from nilearn import image from nilearn.image import resample_to_img # 拆分4D数据为3D时间帧 frames = image.four_dim_img_to_three_dim_imgs(fmri_slice_timed) # 以第一帧为参考进行头动校正 ref_frame = frames[0] corrected_frames = [resample_to_img(frame, ref_frame, interpolation="continuous") for frame in frames] # 合并校正后的帧为4D数据 fmri_motion_corrected = image.concat_imgs(corrected_frames)
空间标准化
空间标准化可以将不同被试的影像对齐到标准模板空间,方便后续组分析,这里使用MNI152模板作为目标空间。
from nilearn import datasets
from nilearn.image import resample_to_img
# 加载MNI152标准模板
mni_template = datasets.load_mni152_template(resolution=2)
# 将校正后的fMRI数据对齐到标准模板
fmri_normalized = resample_to_img(
fmri_motion_corrected,
mni_template,
interpolation="continuous"
)
print("标准化后数据形状:", fmri_normalized.shape)
预处理结果保存
完成所有预处理步骤后,可以将处理后的数据保存为新的NIfTI文件,方便后续使用。
from nilearn import image
# 保存预处理后的数据
save_path = "sub-01_task-rest_bold_preprocessed.nii.gz"
image.save_img(save_path, fmri_normalized)
print("预处理后的数据已保存至:", save_path)
注意事项
- 预处理参数的设置需要结合实际的扫描参数,比如TR值、层采集顺序等,错误的参数会导致预处理结果无效。
- 如果数据量较大,建议分批次处理,避免内存溢出。
- 预处理完成后可以通过可视化工具查看影像质量,确认校正效果是否符合预期。