基于Dpabi和spm12的脑脊液(csf)分割和提取笔记

news/2024/11/8 15:51:49 标签: 笔记, 图像处理, 计算机视觉, 深度学习, 学习

一、前言

  脑脊液(csf)一直被认为与新陈代谢有重要关联,其为许多神经科学研究提供重要价值,从fMRI图像中提取脑脊液信号可用于多种神经系统疾病的诊断。特别是自2019年Science上那篇著名的csf-BOLD文章发表后,大家都试图用csf阅读出更多的信息。

  本人提取csf信号的思想都基于封面2019年这篇Science,不过因为扫描参数不同略有调整。我在学习csf-extract时还是花了一个月的时间,并且踩了不少坑,特此在这篇笔记里梳理与分享。

同一个被试的BOLD序列和最终得到的csf图像

二、环境配置

系统:Windows 11
软件运行平台:Matlab2022a
所需工具包:

  1. SPM12(下载安装教程)
  2. DPABI(​​​​​​下载安装教程)

三、脑脊液提取过程

csf protocol

目录

一、前言

二、环境配置

三、脑脊液提取过程

1.数据预处理

a.时间层校正(Slice Timing)

b.头动校正(Realign)

2.提取csf掩模

3.抓取csf信号

总结



1.数据预处理

DPARSF的基础教程在此不做赘述,如需要可以参考(基础教程)。

将功能像的数据都由dcm转化为.nii文件并去除了前面10个时间点后,就可以开始预处理了。

  • a.时间层校正(Slice Timing)
  • 首先必须要进行的是Slice Timing,因为各扫描层激发时间不同Slice timing校正可以将所有切片的信号同步到一个参考时间点,通常是TR(重复时间)的中点。打开DPARSF后在红框所圈范围分别填上序列对应的Slice Number,Slice Order和参考切片(一般为中间)。然后点击右下角运行。
  • DPRASFslicetiming前后对比,会发现信号强度经过了细微调整。
  • b.头动校正(Realign)
  • 【可选】头动校正(Realign)。有些用短回波成像的研究中并没有进行这一步,因为会改变csf附近的体素信号,但是我处理的是正常TR=2的序列。如果不进行头动校正影响较大,我还是选择了Realign,方法仅供参考。但无论是否应用头动校正,都需要DPARSF的头动参数.txt文件,让我们排除掉头动过大的被试。
DPARSF Realign前后,可以看到值基本没有太大变化。
 

  • 【可选】滤波(Filter)。滤波参数我选择的是0.01-0.1HZ因为低频信号通常包含呼吸、心跳等生理噪声,高频信号可能包含仪器噪声等无关信息。
  • 要不要做滤波? -可以都试。很多作者也报告省略滤波后的结果。但我用没有bandpass的信号进行相关矩阵分析发现:如果不做带通滤波,被试间的信号都显著相关,说明噪音大;bandpass后被试的信号只和自己的序列相关,与他人无关,说明提升了信噪比。
  • 如何做滤波? -用DPARSF请手动检查!最好自己写脚本,报错少。DPARSF的滤波功能应该是使用y_bandpass()函数完成的,会在某些情况下在一个时间点上生成全是0信号。如果用DPARSF自带的滤波,一定要在处理完后逐个时间点检查。
    滤波前后

2.提取csf掩模

  在前面的步骤中,我们将BOLD信号经过了时间校正(Slice Timing)、头动校正(Reaglign)、带通滤波(Filter)后已经得到了信噪比较高的BOLD图像。

  对预处理后的4DBOLD进行时间维度求平均,得到单张3D均值图像,然后利用SPM12的分割工具对该均值图像进行组织分割,得到CSF的概率图。之后设置较高的概率阈值(0.9)创建CSF掩模,以确保提取的是高置信度的CSF区域。最后将这个掩模应用到原始的4D功能像上,即可得到目标区域内的CSF时间序列信号。这种方法的优势在于通过严格的阈值筛选,保证了提取信号的可靠性。

% 计算均值图像并用SPM分割得到CSF掩模
img = mean(func_4d.img, 4);
save_nii(img, 'mean.nii');
spm_segment('mean.nii'); 

% 提取CSF区域信号
mask = double(csf_prob.img)/256 >= 0.9;
csf_timeseries = func_4d.img .* repmat(mask,[1,1,1,size(func_4d.img,4)]);

3.抓取csf信号

  脑脊液主要分布在脑室系统和蛛网膜下隙中。在大脑横断面水平切片上,从下到上看,最大的CSF池是位于脑干前方的桥前池,这是在底部切片的位置。这就是我们在提取CSF信号时主要关注最后非零切片的原因 ,在这个位置上的CSF信号最为纯净,受到周围灰质和白质组织的污染最少。

% 对每个时间点的3D体积提取CSF信号
for i = 1:size(img,4)
    % 获取当前时间点的3D体积
    img3d = img(:,:,:,i);
    
    % 找到含有信号的最后一个切片(对应脑底部CSF池的位置)
    nonZeroSlices = squeeze(any(any(img3d, 1), 2));
    lastNonZeroSlice = find(nonZeroSlices, 1);
    img2d = img3d(:,:,lastNonZeroSlice);
    csf(j,i) = mean(img2d(img2d>0));
end

总结

  提取出来的csf可以与全脑信号计算耦合呢。


http://www.niftyadmin.cn/n/5744097.html

相关文章

javascript实现国密sm4算法(支持微信小程序)

概述: 本人前端需要实现sm4计算的功能,最好是能做到分多次计算。 本文所写的代码在现有sm4的C代码,反复测试对比计算过程参数,成功改造成sm4的javascript代码,并成功验证好分多次计算sm4数据 测试平台: …

倍福工控机维修伺服驱动控制器模块维修C1300

BECKHOFF倍福C1300总线通讯模块,使用C1220接口卡,可将255个分布式Lightbus输入和输出模块连接到标准PC。光纤在PC和外部设备之间以2.5M的速度传输数据,并且互无干扰。 接口卡有自己的微处理器(80C166)和一个4k字节的双端口存储器到PC总线&am…

ClickHouse创建账号和连接测试

在之前搭建ClickHouse的时候,把账户相关的去掉了,所以登录和连接的时候是不需要账号密码的,但是实际项目中,肯定是需要根据需要创建账号。 一,创建账号 1,进入到 /etc/clickhouse-server, 编辑…

若依入门案例

若依(RuoYi)框架是一个基于Java的开源企业级快速开发框架,主要用于构建信息管理系统。它结合了多种前端和后端技术,提供了高效的开发工具,并具备以下主要功能: 一、后端功能 技术选型:若依后端…

【深度学习】多分类任务评估指标sklearn和torchmetrics对比

【深度学习】多分类任务评估指标sklearn和torchmetrics对比 说明sklearn代码torchmetrics代码两个MultiClassReport类的对比分析1. 代码结构与实现方式2. 数据处理与内存使用3. 性能与效率 二分类任务评估指标1. 准确率(Accuracy)2. 精确率(P…

(三)最小梯度平滑预处理下的K-Means的道路分割实验(附资源)

一、实验目的 1、实验目标 使用C均值算法或者相应的改进算法,对数据进行聚类分析,并思考如何自动确定道路区域对应的是聚类后形成的若干类别中的哪个类别。 尝试对初值、对代表点的选取以及分类方法进行改变,对改变前后结果的变化进…

解决CentOS 7环境下VNC出现乱码问题

背景 在 CentOS 7 操作系统下使用 VNC(虚拟网络计算)进行远程连接服务器操作时,可能会遇到乱码问题,这种情况通常是由字符编码设置不正确导致的。 解决方案 通过修改 VNC 服务器配置文件可解决乱码问题,步骤如下&am…

数据分析:宏基因组DESeq2差异分析筛选差异物种

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理:计算步骤:结果:加载R包准备画图主题数据链接导入数据Differential abundance (No BP vs 2BP TA)构建`countData`矩阵过滤低丰度物种构建DESeq数据对象DESeq2差异分析画图Di…