使用 FSL 和 TrackVis 分析 DTI 数据

本文介绍了如何使用FSL和TrackVis工具对弥散张量成像(DTI)数据进行涡流/头动校正、张量拟合和确定性纤维束追踪。首先,原始数据需转换为NIFTI格式,接着进行脑提取、涡流/头动校正。然后,利用FSL的dtifit进行张量拟合,得到FA和MD等定量指标。最后,通过TrackVis进行纤维束追踪,包括全脑追踪和基于ROI的追踪。整个过程详细阐述了DTI数据处理的基本步骤和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载原文
使用 FSL 和 TrackVis 分析 DTI 数据
Alex / 2018-05-21 / free-learner@163.com
弥散加权成像(Diffusion Weighted Imaging, DWI)通过测量水分子的弥散程度来反映水分子所处的
组织结构特点,弥散张量成像(Diffusion Tensor Imaing, DTI)通过张量模型来定量地刻画水分子的弥
散程度,也是最简单的一种模型。作为初学者,总结一下使用 FSL 和 TrackVis 进行 DTI 数据分析的基
本方法,包括涡流/头动校正(eddy current/head motion correction)、张量拟合(tensor fitting)和确
定性纤维束追踪(deterministic tractography)。
一、原始数据准备
(1)将从磁共振扫描仪上采集的原始数据转换成 NIFTI 格式,可以使用 dcm2nii 或者 MRIConvert;
(2)假设转换成 NIFTI 格式后的数据名为 dti_data.nii.gz,此外还会生成两个文本文件,分别表示磁场
梯度施加的强度和方向,这里假设这两个文件分别命名为 bvals 和 bvecs。这两个文本文件的内容如下:
bvals:
bvecs:
(3)bvals 和 bvecs 这两个文件表示什么意思?DWI 的大致原理是在不同方向上施加一个梯度磁场,这
个梯度磁场的强度用 b-value 来表示,b-value 越大、水分子弥散的距离越大、图像信号变化越明显;
DTI 模型总共需要估计六个参数,所以至少需要在 6 个不同方向上施加梯度,梯度方向用 b-vector 来表
示;还需要至少一个没有施加梯度的图像作为参考,常称为 B0 像。上面的 bvals 文件总共 1 行 65 列,
表示总共采集了 65 个图像,第 1 个图像的 b-value 是 0,后 64 个图像的 b-value 是 1000;bvecs 文件
总共有 3 行 65 列,表示在每个图像上所施加的梯度方向。
(4)B0 图像和 DWI 图像:
上图是数据中的前四个图像,第一个图像是 B0 像,后三个图像是 DWI 像,虽然 b-value 都是 1000,但
是梯度方向不同,因此图像信号也会有变化。
二、涡流/头动校正
在拟合张量模型之前,需要对图像进行一些涡流和头动校正,这里使用的是 FSL 5.0.11。
(1)脑提取
脑提取的目的就是为了获得一个(去除颅骨后)脑的 mask,可以使用如下命令:
fslroi dti_data.nii.gz b0.nii.gz 0 1
bet b0.nii.gz b0_brain.nii.gz -m -f 0.3
(2)acqparams.txt 和 index.txt
新建一个名为 acqparams.txt 的文本文件,内容为 0 1 0 0.05,该文件描述的是图像采集的信息。根据
FSL 官网的文档,该文件的正确性与否并不重要,在大多数情况下使用上面的设置即可。另外,正确地
填写这些信息需要对扫描参数有更深入的了解;新建一个名为 index.txt 的文本文件,方法为:
indx=“”
for ((i=1; i<=65; i+=1))
do
indx=“$indx 1”;
done
echo $indx > index.txt
上述代码的作用就是新建一个一列全为 1 的数,并保存到 index.txt 文件中;这个文件中的 1 表示该图像
采集的参数对应于 acqparams.txt 文件的第一行。由于 acqparams.txt 里只有一行,所以所有图像都是
1。
(3)涡流/头动校正
eddy_openmp --imain=dti_data.nii.gz --mask=b0_brain_mask.nii.gz
–acqp=acqparams.txt --index=index.txt --bvecs=bvecs --bvals=bvals
–out=eddy_corrected_data
eddy_corrected_data.nii.gz 即为涡流/头动校正后的数据,eddy_corrected_data.eddy_rotated_bvecs
为头动校正后的 b-vector 文件。
三、张量拟合
dtifit -k eddy_corrected_data.nii.gz -o dti -m b0_brain_mask.nii.gz
-r eddy_corrected_data.eddy_rotated_bvecs -b bvals --save_tensor
张量拟合结束后就可以得到一些定量指标,比如 FA(Fractional Anisotropy)和 MD(Mean
Diffusivity):
FA 反映的是组织结构的方向性,如果水分子的弥散运动在某些方向上受到阻碍,在另一些方向上不受阻
碍,则 FA 较大;FA 较大的地方主要是在白质部分。MD 表征水分子在所有方向上的平均弥散距离,如
果没有受到阻碍,则 MD 较大;MD 较大的地方主要在脑脊液。Color FA 的计算方法是第一个特征向量
(first eigenvector, 文件名为 dti_V1.nii.gz)乘上 FA;第一个特征向量被认为反映(一个体素内)纤维
束的平均方向,所以 Color FA 表示 FA 较大的区域的纤维束的方向。一般地,红色表示左右(X 轴),
绿色表示前后(Y 轴),蓝色表示上下(Z 轴)。
四、确定性纤维束追踪
纤维束追踪就是重建出神经纤维束,分为确定性纤维束追踪和概率纤维束追踪两种类型,纤维束追踪需
要对人脑的纤维束有相当的先验知识(而我没有这样的先验知识)。这里使用 TrackVis 进行确定性纤维
束追踪。由于纤维束追踪是根据张量拟合的结果进行的,我现在还不清楚是否可以用 FSL 的拟合结果来
作为 TrackVis 的输入,因此需要用 TrackVis 重新进行张量拟合并在此基础上进行确定性纤维束追踪。
TrackVis 实际上包含两个相对独立的软件,一个是 TrackVis 用于可视化,一个是 Diffusion Toolkit 用
于张量拟合和纤维束追踪,这里不做区分。
(1)准备文件
由于 TrackVis 不能进行涡流/头动校正,使用 FSL 的校正后的结果作为输入。另外,TrackVis 的 b-
vector 的格式不同于 FSL,首先 FSL 的 b-vector 的格式是每列表示一个梯度方向,TrackVis 是每行表
示一个梯度方向,其次 TrackVis 需要去掉 b-value 为 0 所对应的梯度方向。下面是一个简单的 R 脚本,
将 FSL 的 bvecs 转换为 TrackVis 的格式:
tmp <- as.matrix(read.table(‘eddy_corrected_data.eddy_rotated_bvecs’));
tmp <- t(tmp); ## transpose the matrix
tmp <- tmp[-1,]; ## remove the b0 rows
write.table(tmp, ‘trackvis_bvecs’, row.names=FALSE, col.names=FALSE);
上图即为修改后的 bvecs
(2)张量拟合
dti_recon “eddy_corrected_data.nii.gz” “trackvis” -gm “trackvis_bvecs”
-b 1000 -b0 1 -ot nii.gz
gm 选项指定 b-vector 文件,b 选项表示 b-value,b0 选项表示有多少个 b0 图像。FSL 和 TrackVis 的
张量拟合结果有微小的差异(大约小数点后第三位)。
(3)全脑纤维束追踪
dti_tracker “trackvis” “tmp.trk” -at 35 -m “b0_brain_mask.nii.gz”
-m2 trackvis_fa.nii.gz 0.2 -sl -it nii.gz
spline_filter “tmp.trk” 1 “trackvis.trk”
m 选项表示将追踪限制在脑 mask 内,m2 选项表示将追踪限制在 FA 大于 0.2 的区域;spline_filter 对
追踪结果做一些平滑。在命令行输入 trackvis trackvis.trk,即可查看追踪结果:
(4)基于 ROI 纤维束追踪
上图是全脑的纤维束追踪结果,对于纤维束追踪的原理我现在还是模糊的,我当前的理解是,以每一个
体素为起点(seed),都可以得到一条重建的纤维,那么以所有体素为起点的结果叠加在一起即为全脑
的追踪结果。如果只想看到通过特定 ROI 的纤维束,可以使用该 ROI 作为过滤器,去除不感兴趣的纤维
束。这里假设我感兴趣的区域是大脑白质,我通过对 T1 加权像进行分割和配准得到白质的 mask,即白
质 ROI,实现代码如下:

去除 T1 像的颅骨

bet t1.nii.gz t1_brain.nii.gz

将 T1 像分割成灰质、白质和脑脊液三类

fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 -o t1 t1_brain.nii.gz
fslmaths t1_pve_2.nii.gz -thr 0.5 -bin wm_mask.nii.gz

使用 BBR 配准,将 B0 像配准到 T1 像

flirt -ref t1_brain.nii.gz -in b0_brain.nii.gz -dof 6 -omat b02t1_init.mat
flirt -ref t1_brain.nii.gz -in b0_brain.nii.gz -dof 6 -cost bbr
-wmseg wm_mask.nii.gz -init b02t1_init.mat -omat b02t1.mat -out b02t1Warp

将 T1 的白质 mask 转换到 B0 像空间

convert_xfm -omat t12b0.mat -inverse b02t1.mat
flirt -in wm_mask.nii.gz -ref b0_brain.nii.gz -out wm_maskWarp -init t12b0.mat
-applyxfm -interp nearestneighbour

将白质 mask 缩小,减少配准误差的影响

fslmaths wm_maskWarp -ero wm_mask_ero
在 TrackVis 的菜单栏选项 ROI -> New ROI From Nifti/Analyze Image,选择上一步得到的白质 ROI
mask,即 wm_mask_ero.nii.gz;在 TrackVis 的右侧的 Property 界面,选择 ROI Filters -> Toggle
Existing ROI,即得到通过白质 ROI 的纤维束:
上述做法是先做出全脑的纤维束,然后使用 ROI 过滤掉不感兴趣的部分;也可以在做纤维束追踪的时候,
将起点限制在 ROI 里,也就是只从 ROI 里的区域出发来重建纤维束,代码如下:
dti_tracker “trackvis” “tmp.trk” -at 35 -m “b0_brain_mask.nii.gz”
-m2 trackvis_fa.nii.gz 0.2 -sl -it nii.gz -sm wm_mask_ero.nii.gz
spline_filter “tmp.trk” 1 “wm_seed.trk”
五、小结
总结了使用 FSL 进行涡流/头动校正、张量拟合,以及使用 TrackVis 进行确定性纤维束追踪的基本方法。
这些方法都是来自于 FSL 和 TrackVis 的官方文档(TrackVis 的文档不够详细)。对于原理的理解上,
还非常粗浅,有些理解完全是个人的猜测,需要进一步确认。因此,多有谬误,敬请指正。

<think>好的,我现在需要帮用户决定哪种安装FSL的方式最适合他们,特别是他们不懂编程,想处理DTI等脑影像数据。用户之前已经询问过如何安装FSL以确保eddy正常运行,现在他们想知道对于非编程人员哪种方法更合适。 首先,我需要回顾之前的回答。之前推荐了两种方法:CondaDocker,并详细说明了各自的步骤优势。现在用户的情况是不懂编程,所以需要选择最简单、最不容易出错的方法。 用户可能的需求是安装过程简单,不需要处理复杂的依赖或配置。他们可能更倾向于图形界面或者一键式安装,避免命令行操作。但FSL本身主要是命令行工具,所以必须通过命令行安装,但可以尽量简化步骤。 考虑两种推荐方式:CondaDocker。Conda需要安装Miniconda或Anaconda,然后创建环境,安装FSL。Docker需要安装Docker引擎,拉取镜像,然后运行容器。对于非技术人员来说,这两个都可能有一定难度,但需要比较哪个更友好。 Conda的步骤可能更直观一些,特别是如果用户已经安装了Anaconda,可能更熟悉。但需要记住一些命令,比如创建环境、激活环境、安装包。如果用户不熟悉命令行,可能需要一步步指导。 Docker的好处是完全隔离环境,但需要先安装Docker,这可能在某些系统上需要额外的配置,比如在Linux上可能需要sudo权限,而在Windows或Mac上需要Docker Desktop。对于非技术人员,安装Docker可能会有困难,尤其是处理权限后台服务的问题。 另外,用户可能更关注后续的使用是否方便。使用Conda安装后,每次使用FSL需要激活环境,然后运行命令。而Docker每次运行都需要使用docker run命令,挂载数据目录,可能命令更长,但环境一致性更好。 另外,用户可能需要处理数据,挂载目录到Docker容器中可能容易出错,特别是路径问题。而Conda安装后,直接在本地环境中运行,文件路径处理更直观。 考虑到用户不懂编程,可能对命令行有一定的抵触,但必须使用命令行工具。因此,选择步骤较少、依赖问题少的安装方式更重要。 综合来看,Conda可能更适合,因为安装步骤相对简单,特别是如果用户能跟着步骤一步步执行命令的话。而Docker虽然环境更稳定,但安装日常使用命令可能更复杂,容易在挂载目录时出错。 需要进一步考虑用户的操作系统。如果用户使用Windows,Docker需要WSL2,安装可能更麻烦。而Conda在Windows上安装相对直接。对于Mac用户,两者安装都可能需要一些步骤,但Conda可能更简单。 另外,用户是否需要最新版本的FSL?Conda-forge通常更新较快,而Docker镜像可能也保持最新,但都需要定期更新。 总结,对于非编程人员,推荐使用Conda安装,因为步骤明确,依赖自动处理,日常使用只需激活环境后运行命令。虽然Docker更稳定,但初期安装每次使用的命令可能更复杂,容易出错。因此,在回答中应明确推荐Conda,并提供详细的步骤,尽可能简化说明,避免技术术语,确保用户能一步步操作。</think>--- ### **最适合非编程人员的 FSL 安装方式** 对于 **不懂编程且需要稳定处理 DTI 数据(如 `eddy` 校正、TBSS 分析等)** 的用户,**推荐使用 `conda` 安装**。以下是具体原因简化操作指南: --- #### **推荐方式:使用 `conda` 安装** **优势**: 1. **一键安装**:无需手动配置依赖库(如 OpenMP),自动解决环境问题。 2. **无侵入性**:安装在一个独立环境中,不影响系统原有软件。 3. **直接使用命令**:安装后可直接在终端运行 `eddy`、`dtifit` 等工具,无需额外容器操作。 --- #### **分步安装指南(无编程基础友好)** 1. **安装 Miniconda(包管理工具)** - **下载地址**:https://docs.conda.io/en/latest/miniconda.html - **选择对应系统**(Windows/macOS/Linux),下载后双击安装,全部选项默认即可。 2. **打开终端(命令窗口)** - **Windows**:搜索 `Anaconda Prompt` 并打开。 - **macOS/Linux**:打开 `Terminal`。 3. **输入以下命令(逐行复制粘贴)**: ```bash # 创建名为 "fsl_env" 的独立环境(避免干扰其他软件) conda create -n fsl_env python=3.9 # 激活环境 conda activate fsl_env # 安装 FSL(自动下载依赖库) conda install -c conda-forge fsl ``` 4. **验证安装** ```bash # 输入命令查看版本(显示 6.0.6+ 即成功) fsl_version ``` --- #### **日常使用流程** 1. **每次处理数据前**: - 打开终端,输入 `conda activate fsl_env` 激活环境。 - 之后可直接使用 FSL 命令,例如: ```bash eddy --imain=你的数据.nii.gz --mask=脑掩膜.nii.gz --out=结果输出目录 ``` 2. **关闭终端后**: - 下次使用时需重新激活环境(仅需 1 秒)。 --- #### **为什么不用 Docker?** 尽管 Docker 更稳定,但以下原因可能增加非技术用户的学习成本: 1. **安装复杂**:需先安装 Docker 引擎(Windows/macOS 需额外配置虚拟化)。 2. **操作繁琐**:每次运行命令需挂载数据目录(如 `docker run -v /本地路径:/容器内路径 ...`),路径错误易导致文件丢失。 3. **资源占用高**:Docker 默认占用较多内存,对低配电脑不友好。 --- #### **常见问题应对** - **问题 1**:安装时下载速度慢。 **解决**:更换国内镜像源(如清华源),在终端输入: ```bash conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ ``` - **问题 2**:运行 `eddy` 时报错缺少文件。 **解决**:检查文件路径是否正确,建议将数据文件放在英文路径下(避免中文或空格)。 - **问题 3**:忘记激活环境导致命令无法识别。 **解决**:运行 `conda activate fsl_env` 后再使用 FSL 命令。 --- ### **总结:非编程用户最佳实践** 1. **安装 Miniconda** → **创建环境** → **安装 FSL**。 2. **每次使用时激活环境** → **直接运行命令**。 3. **数据存放规范**:使用简短英文路径(如 `D:/fsl_data`),避免复杂嵌套目录。 通过这种方式,即使无编程经验,也能快速上手 FSL 处理 DTI 数据,且最大限度降低环境配置风险。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值