nilearn使用教程_1_从预处理好的4D核磁数据中提取bold信号

写在前面:自己目前研究的方向是脑科学结合机器学习和深度学习,所以不可避免的需要接触核磁数据,但是我又不想花时间去学习在软件点点点上,所以一直有探索一些更加优(麻)雅(烦)的方式完成核磁数据的处理。目前看来matlab+dpabi+spm是一个不错的选择(但是我还没去学),因为组里的数据都已经是处理好的。在此基础上,我发现一个神器–nilearn,它不仅能画图,而且还能在预处理好的数据上提取bold信号、构造功能连接等,所以想着将学习这个库的一些经验和代码分享出来,共同学习。目前自己只接触到fmri和画图部分,所以我也是学到啥写啥,哈哈,欢迎一起交流。。

nilearn简介

nilearn 和 机器学习库scikit-learn是同一个团队做的,所以nilearn里面也有一些机器学习方法用于分析核磁数据。我是只关注一些核磁数据的处理和画图的,机器学习部分咱们能处理出数据,模型还不好弄么。

安装

安装nilearn很简单,没有特别的问题。直接pip install nilearn便可

提取bold信号

bold信号可以理解为大脑对应位置相应体素的一个均值,所以既可以自己定义ROI,也可以用公认的图谱。我这里先演示用图谱,自定义ROI提取是差不多的。

使用图谱提取bold信号

from nilearn.image import load_img
from nilearn import masking
from nilearn import datasets
from nilearn.image import resample_to_img
from nilearn.maskers import NiftiLabelsMasker
from nilearn import plotting, image
import numpy as np
import sys
np.set_printoptions(threshold=sys.maxsize)
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np

# 读入预处理好的,待提取的nii文件
fMRIData = load_img("../data/20210223_tjh.nii")    # 需要预处理好的4Dnii文件
print("fmri数据大小", fMRIData.shape)   # fmri数据大小 (64, 76, 64, 237)

# 计算mask大小,就是得到4Dnii文件前三个维度大小
mask = masking.compute_epi_mask(fMRIData) 
print("计算的mask大小", mask.shape)   # 计算的mask大小 (64, 76, 64)

# 导入图谱, 我这里用的Schaefe的200ROI-2mm的图谱做演示
atlas = image.load_img("../data/Schaefer2018_200Parcels_7Networks_order_FSLMNI152_2mm.nii.gz")
print("图谱大小", atlas.shape)  # 图谱大小 (91, 109, 91)

'''
可以看到,图谱维度和4Dnii前三个维度并不一样,就需要将图谱采样到和nii文件一样大,才能定位到我们需要的ROI
'''
# 采样成 mask 一样大小
Atlas = resample_to_img(atlas, mask, interpolation='nearest')
print("采样后图谱大小", Atlas.shape)  # 采样后图谱大小 (64, 76, 64)

'''
这里很想sklearn的模式,生成一个提取器,然后fit_transform我们的数据便可
'''
masker = NiftiLabelsMasker(labels_img=Atlas)
time_series = masker.fit_transform(fMRIData)
print("bold信号大小(TR*ROI):", time_series.shape)   # bold信号大小(TR, ROI): (237, 200)
# 我的数据是237个tr的

待续(后面会更新其他方式提取BOLD信号)

目前我看了,提取的bold信号和用AFNI提取的结果基本一致,在小数点后2~3位,会有一些细微区别,但是不影响结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值