DTI数据处理: from scanner to statistics

2023-05-16

安装准备

工具: FSL, MRIcron

准备工作:

MRIcron安装

MRIcron的下载地址:
http://www.mccauslandcenter.sc.edu/mricro/mricron/dcm2nii.html

FSL安装:

FSL是一个FMRI, MRI和DTI数据的的分析库. 支持OSX和linux系统, windows需要在虚拟机运行. 所有的命令可以在命令行调用,也可以通过GUI调用.

下载网址 : https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslInstallation
下载fslinstaller.py, 这个安装文件是基于python2.7版本编写的, 且运行时需要root用户权限.
sudo fslinstaller.py
建议不要使用默认安装路径, fsl非常大, 大约1.5G, 如果/根目录空间不大的话,请不要轻易尝试.
安装过程中可能由于网速等原因会导致下载超时,多按几次回车刷新.
安装完成后, 需要配置系统环境变量. 在~/.bashrc中添加:

FSLDIR=/usr/local/fsl
. ${FSLDIR}/etc/fslconf/fsl.sh
PATH=${FSLDIR}/bin:${PATH}
export FSLDIR PATH

然后source命令更新一下系统的环境变量,搞定.

source ~/.bashrc

数据预处理:

核磁共振设备厂家主要有西门子,GE和飞利浦:
西门子/GE核磁共振数据格式是 DICOM 飞利浦的是: PAR/REC格式.
DICOM格式最为常见. 首先需要从DICOM格式转换成NIfTI格式.

1 查看数据文件

ls /your_raw_data_dir/$subject_nr/dicoms

2 从DICOM格式转化为NifTI格式(.nii)

原始DICOM格式(.dcm) , 首先可以用MRIcrom中的工具dcm2nii转换成NifTI(.nii)。安装后, 在终端中输入:
dcm2nii raw_data_dir output_dir

转换完成后, 将生成三个文件: 压缩后的原文件、o开头、co开头的文件。其中o开头的文件主要是进行了reorient的,而co是经过切割了neck的。一般用于空间normalize都选用co开头的文件。

FSL提供了NifTI格式处理工具查看数据结构和可视化工具,例如fslinfo可以用来查看转换后NifTI的基本信息:

dl@DL:~/Data/Brain/testing_data$ fslinfo 052212_s09_dti.nii
data_type      INT16
dim1           256
dim2           256
dim3           67
dim4           49
datatype       4
pixdim1        1.000000
pixdim2        1.000000
pixdim3        2.000000
pixdim4        8000.000000   ?
cal_max        0.0000
cal_min        0.0000
file_type      NIFTI-1+

其中dim1, dim2, dim3分别是核磁图像的3个维度, 256x256x67. Dim4是volumns的个数 49, pixdim1, pixdim2, pixdim3分别是体素voxel的维度 1x1x2mm。
fsleview 用于查看NifTI图像:
fslview 052212_s09_dti.nii

失真修正和弥散张量生成

对DTI数据做失真修正和数据处理的整体流程如下图:

这里写图片描述

失真修正

失真有很多种 主要是 eddy currents distortion, EPI/fieldmap distortion.
试验期间的测量原理\或者被试状态等等形成了多种可能的误差,比如头动, 比如核磁涡流等等.
1.0 registration 对齐
对齐修正对于structural MRI, functional MRI和diffusionMRI来说都非常重要.如果registration不准确,那么后面对结构核磁的统计分析或者group level的分析都是不准确的.
FSL的Bet命令可以进行简单registration修正
input: image, options
output: brain_extraced.nii.gz, brain_mask.nii.gz …

* 1.1 Eddy current correction(可选)*
FSL提供了专门的eddy correction工具, 使用终端命令:

dl@DL:~/Data/Brain/testing_data$ eddy_correct 052212_s09_dti.nii 052212_s09_dti_eddy.nii 0
processing 052212_s09_dti_eddy_tmp0000
processing 052212_s09_dti_eddy_tmp0001
processing 052212_s09_dti_eddy_tmp0002
processing 052212_s09_dti_eddy_tmp0003
processing 052212_s09_dti_eddy_tmp0004
processing 052212_s09_dti_eddy_tmp0005
...

1.2 EPI correction
EPI失真是由于磁场不均匀引起的, 比eddy失真更明显. EPI失真如下图所示, 图中绿色的是真实的大脑, 灰色是EPI失真造成的变形.
这里写图片描述
FSL有非常棒的工具可以用来处理EPI失真, 分别为: fslmerge (这里需要的是fmap文件) 和topup(acqparams.txt)
(1)fslmerge:
fslmerge处理流程分为两步: 首先用raw phase和磁场数据进行融合, 生成field map, 之后用field map 生成diffusion image.
这类失真是需要结合磁场数据处理的.a real field map image数据名称一般带有fmap.例如: 052212_s10_fmap.nii
【待续】
(2)topup
topup是另外一种方法.这种方法是将正扫描数据和反扫描数据,配合acqparams.txt中记录的扫描信息实现融合处理. acqparams.txt里面是关于扫描方向和扫描时间的信息。

0 -1 0 0.0665
0 1 0 0.066

这里-1代表AP方向,1代表PA方向。最后一列代表扫描信息读取时间。
在终端输入:

fslroi dwidata nodif 0 1 // 生成nodif文件是AP方向的
fslmerge -t AP_PA_b0 nodif nodif_PA // nodif_PA是PA方向扫描得到的. 这句生成AP_PA_b0

之后就可以调用topup命令, 对核磁数据进行EPI修正:

topup --imain=AP_PA_b0 \
      --datain=acqparams.txt \
      --config=b02b0.cnf \
      --out=topup_AP_PA_b0 \
      --iout=topup_AP_PA_b0_iout \
      --fout=topup_AP_PA_b0_fout

2 提取脑组织并做eddy修正

下面就需要将大脑和头骨以及其他的头部组织分开, 以便后续只针对大脑进行分析.FSL自动大脑提取工具bet可以实现目标.
在提取之前, 应该把经过上述修正后得到的正确的b0 map做平均, 得到一个类似与”模板”的文件.

Fslmaths topup_AP_PA_b0_iout -Tmean hifi_nodif

hifi_nodif就是那个”模板”
脑组织核磁数据提取:
bet hifi_nodif.nii.gz hifi_nodif_brain.nii.gz -m -f 0.2
bet命令参数:

-f option is to set a fractional intensity threshold which determines where the edge of the final segmented brain is located. -f 后面的数字取值大小直接影响了输出结果的精细程度.
-g option is to cause a gradient change to be applied to the previous threshold. Vertical gradient.
-m generate binary brain mask
-R estimate the center

这样生成了两个文件,一个是brain mask, 一个是brain本身.
这里写图片描述

freesurfer比bet的处理效果要好一些. 如果bet的结果不够满意, 可以用freesurfer试一试.
fsl的eddy工具可以实现涡流矫正。输入参数和输出参数如下图:
这里写图片描述
由于eddy运算量很大, 官方提供了cuda和openmp支持. 这里的cuda是cuda7.5 . 如果显卡不支持cuda7.5驱动, 可以用eddy_openmp.

eddy_openmp:
    --imain File containing all the images to estimate distortions for
    --mask  Mask to indicate brain
    --index File containing indices for all volumes in --imain into --acqp and –topup
    --acqp  File containing acquisition parameters
    --bvecs File containing the b-vectors for all volumes in --imain
    --bvals File containing the b-values for all volumes in --imain
    --out   Basename for output
--data_is_shelled flag is set to avoid the automatic checking on whether the data has been acquired using a multi-shell protocol (we already know that is indeed the case for this dataset).

查看index.txt:
cat index.txt
全部都是1, 每个1 都代表了dwidata中的一个volume, 意思是所有的volume和acqparams.txt 中的参数eddy处理中都要用到

调用eddy_openmp进行涡流矫正:

eddy_openmp --imain=dwidata.nii.gz --mask=hifi_nodif_brain_mask --index=index.txt --acqp=acqparams.txt --bvecs=bvecs --bvals=bvals --out=eddy_unwarped_images --data_is_shelled

运行完成后,会生成9个文件:
eddy_unwarped_images.nii.gz
eddy_unwarped_images.rotated_bvecs
eddy_unwarped_images.eddy_parameters

3 生成神经纤维张量
扫描仪的梯度信息用来计算tensor模型的. FSL的DTIFIT用来解决这个问题. DTIFIT有三种方式调用: 前两种都是用GUI, 也可以直接用命令行。
You can run DTIFIT (the FSL diffusion tensor fitting program) in one of three ways, all described below. Choose one of these approaches:
1: Run DTIFIT on a FDT directory
2: Run DTIFIT by manually specifying the input files
3: Call dtifit from the command line

 dtifit --data=eddy_unwarped_images --mask=hifi_nodif_brain_mask --bvecs=bvecs --bvals=bvals --out=dti

这里写图片描述

运行后生成如下文件:
dti_FA.nii.gz : the anisotropy map 各项异性图
dti_L1.nii.gz ?
dti_L2.nii.gz ?
dti_L3.nii.gz ?
dti_MD.nii.gz : Mean Diffusivity map
dti_MO.nii.gz
dti_S0.nii.gz
dti_V1.nii.gz the principal eigenvector map
dti_V2.nii.gz secondary eigenvalue
dti_V3.nii.gz third eigenvalue

用fsleyes打开dti_FA.nii.gz,如下:
这里写图片描述
打开 主特征向量图 principal eigenvector map: 得到下面的三维彩色图, 颜色表示了Diffusion direction .
这里写图片描述

调整一下两附图片的对比度和透明度, 显示出叠加效果.
这里写图片描述

选择工具栏上的modulate by 为 dti_FA, 可以得到下面的显示效果:
这里写图片描述
设置overlay data type为3-direction vector (Line) , 显示tensor vector图, 单击图片后ctrl+鼠标滚轮可以放大缩小.

Overlay data type to 3D/4D volume 可以查看三个坐标轴方向的矢量坐标大小(图像的形式)

4 张量拟合 tensor fitting - TBSS analysis 为例

数据快视
快速查看一下待处理的数据:
slicesdir *.nii.gz
生成所有NifTI文件的图片摘要, 并用html展示.

统计分析前的预处理
首先用tbss_b_preproc 工具略微预处理一下, 去掉brain_edge伪迹, 去掉最后的slice(没有什么信息了), 从diffusion tensor fitting中去掉可能的outliers.
tbss_1_preproc *.nii.gz
这个命令将创建两个文件夹(FA, origdata )处理结果放到FA文件夹下, 原始文件放到origdata文件夹下.

非线性registration
将所有被测对象的FA结果registrate to FMRIB58_FA 模板. 这步非常耗时. 可以用计算机cluster加速。This process can take a long time, as each registration takes around 10 minutes. You can easily speed this up if you have multiple computers running cluster software such as SGE (Sun Grid Engine)
在FA文件夹的上一层文件夹中运行命令:
tbss_2_reg -T -n
-T 就将FA结果registrate 到默认的FMRI58_FA模板上. 运行后生成:

1260_FA_to_target.mat
1260_FA_to_target_warp_inv.nii.gz
1260_FA_to_target_warp.msf
1260_FA_to_target_warp.nii.gz
…
target.nii.gz

至此,完成了所有核磁数据像模板的”订正”.

post-registration 处理
tbss_2_reg生成了所有slice所有volume的订正文件, 命令tbss_3_postreg将所有订正后的数据固定到1x1x1mm的标准空间, 之后所有在标准空间的体素合并到4D的图像文件all_FA, 保存到新创建的文件夹stats中.
FA均值图像mean_FA作为输入将在FA skeletonisation 程序中生成mean_FA_skeleton
tbss_3_postreg -S
运行结束后, 进入stats文件夹查看生成的结果:

cd stats
fsleyes -std1mm mean_FA -cm red-yellow -dr 0.2 0.6 &

fsleyes的命令参数: -dr: display range ; -cm: color map
上述命令用fsleyes打开all_FA和mean_FA_skeleton, 将mean_FA_skeleton的颜色设置为绿色, 将显示范围设置为0.2-0.6

之后将所有对齐后的数据投影到skeleton上. 运行:
tbss_4_prestats 0.3
其中0.3 是一个阈值, 用于设置binary skele mask.
最后就可以做体素的统计分析了. 进入到stats文件夹, 运行Glm. 设置t检验参数:
这里写图片描述

保存(名为design), 生成统计检验的设置文件. 后续主要需要用到的是design.mat 和design.con 这两个文件.

运行randomise命令,进行统计分析:

randomise -i all_FA_skeletonised -o tbss \
  -m mean_FA_skeleton_mask -d design.mat -t design.con -c 1.5

查看结果:

fsleyes -std1mm mean_FA_skeleton -cm green -dr .3 .7 \
  tbss_tstat1 -cm red-yellow -dr 1.5 3 \
  tbss_clustere_corrp_tstat1 -cm blue-lightblue -dr 0.949 1 &

参考:
1、FSL 帮助文档:sample
2、http://www.diffusion-imaging.com/2015/10/dti-tutorial-2-normalization-and.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DTI数据处理: from scanner to statistics 的相关文章

  • 时间序列 - 相关性和滞后时间

    我正在研究一组输入变量和响应变量价格之间的相关性 这些都是按时间顺序排列的 1 我是否有必要平滑曲线其中输入变量是循环变量 自回归 如果是这样 怎么办 2 一旦建立相关性 我想准确量化输入变量如何影响响 应变量 例如 一旦 X 增加 gt
  • 使用 p 值的逐步回归删除 p 值不显着的变量

    我想表演一个逐步线性回归 using p values作为选择标准 例如 在每个步骤中删除具有最高即最不显着 p 值的变量 当所有值均由某个阈值定义的显着时停止alpha 我完全知道我应该使用 AIC 例如命令step or stepAIC
  • 如何更好地拟合seaborn小提琴图

    下面的代码给了我一个非常漂亮的小提琴图 以及其中的箱线图 import numpy as np import seaborn as sns import matplotlib pyplot as plt foo np random rand
  • 从一个原始整数列表生成打乱整数列表的算法

    有一个 ArrayList 为x unique Integers 我需要将它们随机分配y数组列表z尺寸 请记住 x y z是变量值 结果数组中的数字不能重复 结果列表不能包含相同的数字 订购它们必须不同 如果计算结果数组中的出现次数 则原始
  • 计算一个样本中某个比例的置信区间

    当样本量很小甚至样本量为 1 时 计算某个比例的置信区间 CI 的更好方法是什么 I am currently calculating CI for a Proportion in One Sample w However my sampl
  • 何时使用 numpy 与统计模块

    在使用一些统计分析工具时 我发现至少有 3 种 Python 方法可以计算平均值和标准差 不包括 自己动手 技术 np mean np std ddof 0 或 1 statistics mean statistics pstdev 和 或
  • NumPy:计算累积中位数

    我有大小 n 的样本 我想计算每个 i 1 sample i 在 numpy 例如 我计算了每个 i 的平均值 cummean np cumsum sample np arange 1 n 1 我可以在没有循环和理解的情况下对中位数做类似的
  • 如何在 C# WinForms 中的 Label 上编写二次方程?

    我们正在制作统计软件 我们需要在任何地方放置公式 例如ax2 bx c怎么做ax2表示x平方2 我想在x的上侧显示2 与 c 相同 我想在后缀处显示 c 您是否有用户可以选择但无法编辑的固定公式列表 然后为每个公式生成一个图像 将它们存储在
  • Python wilcoxon:不等N

    Rs wilcox test可以采用不同长度的向量 但 wilcoxon 来自scipy stats不能 我得到一个unequal N错误信息 from scipy stats import wilcoxon wilcoxon range
  • 分类变量的多重共线性

    对于数值 连续数据 为了检测预测变量之间的共线性 我们使用皮尔逊相关系数并确保预测变量之间不相关 但与响应变量相关 但我们怎样才能检测到多重共线性如果我们有一个数据集 其中预测变量都是绝对的 我正在共享一个数据集 我试图找出预测变量是否相关
  • 从二元高斯分布生成均值

    我正在阅读统计学习要素ESLII http www stat stanford edu tibs ElemStatLearn 在第二章中 他们用高斯混合数据集来说明一些学习算法 为了生成该数据集 他们首先从二元高斯分布 N 1 0 I 生成
  • 在 Perl 中如何计算给定正态分布的点的概率?

    Perl 中是否有一个包可以让您计算每个给定点的概率分布高度 例如 这可以在 R 中以这种方式完成 gt dnorm 0 mean 4 sd 10 gt 0 03682701 即x 0点服从正态分布 mean 4 sd 10的概率为0 03
  • 寻找优秀、可靠玩家的算法

    我有以下玩家 每个值对应于给定游戏中正确答案百分比的结果 players array A gt array 0 0 0 0 B gt array 50 50 0 0 C gt array 50 50 50 50 D gt array 75
  • Seaborn 用直方图绘制分布图,其中 stat = 密度或概率?

    我知道 默认情况下 直方图方法是计算出现次数 相反 我们可以用密度或概率来可视化分布 sns displot data stat density or sns displot data stat probability 我的问题是我应该使用
  • Python 比 C++ 更快、更轻吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • R - 小鼠 - 添加一列,对具有估算值的列进行求和

    我有一个缺少数据的数据库 我需要估算数据 我使用的是小鼠 然后根据原始列创建新列 使用估算数据 我需要用这些新列进行统计分析 具体来说 我的参与者使用 7 点李克特量表填写了几份调查问卷 有些人没有回答所有问题 然后我需要估算值 1 对列中
  • 在循环中预测.lm()。警告:排名不足的拟合预测可能会产生误导

    此 R 代码引发警告 Fit regression model to each cluster y lt list length y lt k vars lt list length vars lt k f lt list length f
  • 如何编写循环来运行数据框的 t 检验?

    我遇到了对数据框中存储的某些数据运行 t 检验的问题 我知道如何一一做 但效率很低 请问如何写一个循环来实现呢 例如 我在testData中获取了数据 testData lt dput testData structure list Lab
  • 如何在 R 中手动编写正态分布核的似然值?

    具体来说 如何编码 x 和 mu 之差的乘积 精度矩阵以及 x 和 mu 之差的转置 我下面的代码正确吗 提前致谢 colSums dat mu mat solve sigma colSums dat mu mat 其中 mu mat 是重
  • 在 Python 中计算分布的对数似然

    有什么简单的方法计算任何分布的对数似然适合数据 OP 的解决方案 Python 有 82 个标准发行版 可以找到here https docs scipy org doc scipy reference stats html continu

随机推荐

  • ubuntu上运行C程序

    ubuntu版本为Ukylin14 04LTS 首先配置编辑器vim step1 xff1a 查看系统是否安装vim 打开终端 xff0c 输入vi xff0c 按下tab键 xff0c 如果列表里没有vim xff0c 说明系统没有安装
  • 怎么让ubuntu变得更加好用

    ubunut14 04LTS版本其实已经很好用了 但是也有一些小小的美中不足 以下设置是陆续收集 摸索到的可以让系统更好用的方法 1 在终端打开已经安装的应用程序时 xff0c 总是会显示一些错误信息 在 bin下添加x文件 xff1a c
  • linux命令(1):touch

    touch 命令 功能说明 xff1a 改变文件或目录时间 xff0c 包括存取时间和更改时间 语 法 xff1a 补充说明 xff1a 使用touch指令可更改文件或目录的日期时间 最常用用法 xff1a touch fileA 如果fi
  • bash shell命令(1);、&&、||

    xff1b 命令 按照先后顺序一次执行多个命令 xff0c 命令之间用 xff1b 分割 xff1a command 1 command 2 command 3 amp amp 命令 如果前一个命令 command 1 顺利执行 xff0c
  • linux命令(2):less

    less工具也是对文件或其它输出进行分页显示的工具 xff0c 比more的功能更强大 命令格式 xff1a less 参数 文件1 xff08 文件2 xff09 命令功能 xff1a less 与 more 类似 xff0c 但使用 l
  • [zz] linux下vi或vim操作Found a swap file by the name的原因及解决方法

    在linux下用vi或vim打开Test java文件时 root 64 localhost tmp vi Test java 出现了如下信息 xff1a E325 ATTENTION Found a swap file by the na
  • ubuntu中使用判断符号[]

    鸟哥的私房菜p270中13 3 2使用 符号有这样一个例子 xff1a vim sh06 sh 脚本内容如下 xff1a bin bash Program This program shows the user 39 s choice Hi
  • 深度学习caffe框架(1):如何快速上手caffe?

    初识caffe 安装caffe跑一个例子mnist配置caffe框架的深度学习网络结构输入数据 数据层的定义图片数据如何保存为lmdb格式 模型的保存和读取 caffe的代码层次参考 初识caffe 安装caffe 跑一个例子 mnist
  • 深度学习caffe框架(2): layer定义

    caffe的代码层次 首先让我们回顾一下caffe的代码层次 blob layer net和solver 其中blob是数据结构 layer是网络的层 net是将layer搭建成的网络 solver是网络BP时候的求解算法 本节主要介绍ca
  • 安装Qt及相关问题解决

    安装Qt及相关问题解决 Download Qt 1 Qt下载 关于Qt下载 xff0c 官网可以下载 但是需要填一大堆信息 非常麻烦 可以打开下面的链接 xff0c 里面有各版本Qt http download qt io archive
  • 可编程的SQL是什么样的?

    背景 如果你使用传统编程语言 xff0c 比如Python xff0c 那么恭喜你 xff0c 你可能需要解决大部分你不需要解决的问题 xff0c 用Python你相当于拿到了零部件 xff0c 而不是一辆能跑的汽车 你花了大量时间去组装汽
  • matplotlib 绘制动画

    matplotlib动画 载入matplotlib动画绘制工具 span class hljs import span class hljs keyword import span matplotlib animation span cla
  • Robust Real-Time Extreme Head Pose Estimation

    基本思路 xff1a 用RGB D 的摄像头 xff0c 利用RGB和深度信息对人脸进行三位建模和合成 之后建立了一个由33个人不同头部姿态点云合成数据组成的数据库Dali3DHP xff0c 基于级联决策树 xff08 5个 xff09
  • 如何将ipython的历史记录导出到.py文件中?

    python绝对是生产力工具 真的太好用了 python jupyter提供了非常好的交互编程方式 最棒的就是在数据分析过程中 可以把想法和代码实现放在一起 大大加速了分析过程 也使得代码的可读性更好 回到上面的问题 两种办法解决 xff1
  • keras上手系列之: 模型的保存

    如何将训练好的网络进行保存以便以后使用 进行后续的研究呢 首先 定义一个简单的LSTM模型 span class hljs keyword from span keras models span class hljs keyword imp
  • keras上手系列之: 代码的整体框架

    keras的名字来源于希腊史诗 lt 奥德赛 gt 里的牛角之门 Gate of Horn 是追梦者之路 是梦想实现之门 Those that come through the Ivory Gate cheat us with empty
  • keras上手系列之:序列到序列预测问题

    LSTM序列到序列模型种类 LSTM 序列到序列 seq to seq 问题建模 根据问题和数据本身的特点 可以分为几种不同 一对一 one to one 多对一 many to one 一对多 one to many 多对多 many t
  • keras上手之:与tensorflow混合编程

    tensorflow具备许多优秀的函数和功能 xff0c 比如tensorboard xff0c keras作为tensorflow的高级API xff0c 封装很多tensorflow的代码 xff0c 使得代码模块化 xff0c 非常方
  • 贝叶斯网络和概率推理(一):理性决策与朴素贝叶斯

    在实际问题中 xff0c 理性决策 xff08 rational decision xff09 就意味着必须对结果出现的相关因素及其重要性 xff0c 以及目标实现的可能性进行合理评估 由于未知和惰性 xff0c 让我们对问题中的每个 因果
  • DTI数据处理: from scanner to statistics

    安装准备 工具 FSL MRIcron 准备工作 MRIcron安装 MRIcron的下载地址 http www mccauslandcenter sc edu mricro mricron dcm2nii html FSL安装 FSL是一