EPI distortion correction形变矫正, eddy, fieldmap等五种不同方法

2023-11-20

在快速采集功能核磁共振(fMRI,functional MRI)和弥散核磁共振(dMRI,diffusion MRI)数据时,EPI成像方式使得数据中存在很大的畸变。这种畸变使得额叶、颞叶位置和真实大脑差异巨大,因而无法进行后续的跨模态配准。例如,将dMRI数据中的b0配准到T1项。
因此,在传统的数据预处理流程中,无论是基于PANDA的临床低精度数据预处理流程,还是基于HCP的HARDI高精度数据预处理流程,形变矫正都是一个关键的步骤,决定着后续的数据分析任务的可靠度。

在这里插入图片描述
Fig.1 Distortion correction (eddy) & Coregistration steps

在本文档,将主要介绍EPI数据,也就是fMRI和dMRI的数据的形变矫正(Distortion correction)五种不同的方法。采用这五种方法,基本上可以处理当前在临床和科研场景中绝大多数的数据。本文档将分散于网络各处的文字汇总,并抽取关键的步骤,使得新手可以快速参考上手。

主要使用的软件有ANTs,FSL,MRtrix3

1 topup + eddy

topup+eddy是HCP处理流程中的一个标准步骤。在采集dMRI数据时,需要同时采集两个phase-encoding方向的数据。如Fig.1中的标为AP和PA都图片所示,可以明显发现,AP方向的数据额叶位置被拉长,而PA方向的数据额叶位置被压进去,表现为一个凹陷。

echo "Topuping  $1 data ..."
printf "0 -1 0 0.07176\n0 1 0 0.07176" > $dwi_dir/acqparams.txt
topup --imain=$dwi_dir/ap_pa_b0_mean.nii.gz --datain=$dwi_dir/acqparams.txt --config=b02b0.cnf --out=$dwi_dir/topup_results --iout=$dwi_dir/b0

利用AP和PA数据,topup可以估计出dMRI数据的distortion形变场,为–out的输出,以topup_results为前缀的fieldmap。在上述代码中,0 0.07176是total readout time,它是通过Echo_spacing和EPI-factor计算得到的,具体计算公式为:在这里插入图片描述
然后eddy利用topup生成的fieldmap,作为参数–topup,就可以将被拉长或者凹进去的数据恢复成正常的大脑形状,变得更加圆润和饱满。在下面的代码中,使用的是cuda版本的eddy,能显著加速计算过程。结果如Fig.1所示。

echo "Eddy  $1 data ..."

b_num=`cat bval | wc -w`        
indx=""
for ((iii=1; iii<=$b_num; iii+=1)); 
do 
   indx="$indx 1"; 
done
echo $indx > $dwi_dir/index.txt

eddy_cuda --imain=$dwi_dir/ap.nii.gz --mask=$dwi_dir/mask.nii.gz --acqp=$dwi_dir/acqparams.txt --index=$dwi_dir/index.txt --bvecs=bvec --bvals=bval --topup=$dwi_dir/topup_results --out=$dwi_dir/dwi --repol --data_is_shelled #  --flm=quadratic --mporder=6 --slspec=slspec.txt --s2v_niter=5 --s2v_lambda=1 --s2v_interp=trilinear

在上面生成acqparams.txt的代码中,还需要注意的是0 -1 0中的-1,通常它代表的是在AP方向采集到的数据,而1代表的是PA方向的数据。如果采集到的是其它方向的数据建议阅读FSL的官方文档。
扩展阅读
FSL: topup
FSL:topup-userguide
FSL:eddy
FSL:eddy-userguide

2 fieldmap + eddy

除了可以使用第一种topup方法,eddy还可以使用采集到的fieldmap,做distortion correction。在使用fieldmap前,需要对fieldmap做预处理。在这里,除了dMRI数据以外,还需要同时采集到magnitude数据(mag.nii.gz)和phase数据(phase.nii.gz)。

2.1 对mag做去脑壳

mrconvert mag.nii.gz -coord 3 0 -axes 0,1,2 mag_1volume.nii.gz
bet mag_1volume.nii.gz mag_1volume_bet.nii.gz -R -f 0.2 -m

注:

  1. 在此,mrconvert是MRtrix3库函数,本行代码含义为提取第一个volume。在此步骤,使用fslmaths也可以实现相同功能
  2. 在去脑壳前,mag.nii.gz有两个volume,如果有较大的运动,则需要对mag.nii.gz的两个volumes做一次刚性配准,对齐大脑。

2.2 基于去过脑壳的mag_1volume_bet.nii.gz数据,对fieldmap进行预处理

fsl_prepare_fieldmap SIEMENS phase.nii.gz mag_1volume_bet.nii.gz fieldmap.nii.gz 7.38 
fslmaths fieldmap.nii.gz -div 6.28318 fieldmap_hz.nii.gz -odt float

注:
1.fsl_prepare_fieldmap仅支持SIEMENS采集的数据,单位为rad/s。其他机器型号的处理方式详见官方文档(https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FUGUE/Guide
2. 7.38是回拨时间差(echo time difference),从操作员可以获得此项数据
3. 在eddy中,供使用的fieldmap单位为Hz,需要根据情况进行修正:fsl_prepare_fieldmap生成的fieldmap单位为rad/s,需转换成Hz。公式如下:1 rad/s= 1 /2π Hz

3 fieldmap + fugue

3.1 fieldmap进行预处理
基本上和2.2类似,但由于在fugue中fieldmap单位为rad/s,不需要将其单位从rad/s转为Hz。
3.2 利用fugue完成校正

fugue -i hardi_PA.nii.gz --dwell=0.00069 --loadfmap=fieldmap -u fugue_test.nii.gz

注:
dwell是回拨间隔(echo spacing),且以秒为单位,一般数据记录以ms为单位。如果写错,则报如下错信息:
#ERROR:: dwell time should be in seconds but the value of 0.69is unusually large and maybe incorrectly specified in units of milliseconds.

4 fieldmap + epi_reg

4.1 fieldmap进行预处理
epi_reg 也需要rad/s为单位的,所以喝3.1,2.2类似
4.2 利用epi_reg完成校正

epi_reg --echospacing=0.00095 --wmseg=t1_wmseg.nii.gz --fmap=field_maps_rad.nii.gz --fmapmag=mag_single.nii.gz --fmapmagbrain=mag_brain_single.nii.gz --pedir=y  --epi=b0.nii.gz --t1=t1.nii.gz --t1brain=t1_brain.nii.gz --out=dwi_epi_reg
5. 非线性配准

5 非线性配准

To be continued.

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

EPI distortion correction形变矫正, eddy, fieldmap等五种不同方法 的相关文章

  • C++---之waitKey()函数

    waitKey 函数详解 1 waitKey 这个函数是在一个给定的时间内 单位ms 等待用户按键触发 如果用户没有按下 键 则接续等待 循环 2 如下所示 while 1 if waitKey 100 27 break 在这个程序中 我们

随机推荐

  • eclipse maven 导出项目依赖的jar包

    本文转自至 http blog csdn net andyliulin article details 46544555 一 导出到默认目录 targed dependency 从Maven项目中导出项目依赖的jar包 进入工程pom xm
  • Qt在windows和linux下使用默认浏览器打开设置的链接

    QString webstr http www baidu com 设置要打开的网页 bool openService QDesktopServices openUrl QUrl webstr 使用默认浏览器打开 if openServic
  • Testflight 添加外部测试人员

    内部测试人员 不需要提供所有的metadata 外部测试人员 为了使得外部人员可以测试app的预发布build 必须提供如下的metadata What to test App description Feedback email Mark
  • 利用Python读取MongoDB的数据

    近日在处理数据的时候遇到一个问题 数据存储在MongoDB数据库 如图1 而MongoDB模式自由 具有很大的灵活性 可以把不同结构的文档存储在同一个数据库里 即表的字段不是完全固定的 当某个字段有值时就会显示该字段 而当该字段没有值时就不
  • 3.git 将本地仓库推到远程

    1 创建一个本地仓库 git init 2 把文件添加到版本仓库中 git add 3 生成提交记录 git commit m git init 4 关联到远程库 git remote add origin 你的远程库 5 获取远程库与本地
  • jsoncpp封装和解析字符串、数字、布尔值和数组

    使用jsoncpp进行字符串 数字 布尔值和数组的封装与解析 1 下载jsoncpp的代码库 百度网盘地址 http pan baidu com s 1ntqQhIT 2 解压缩文件 jsoncpp rar unzip jsoncpp ra
  • 解决BeanNotOfRequiredTypeException办法(@Autowired和@Resource注解的不同)

    1 错误信息 org springframework beans factory BeanNotOfRequiredTypeException Bean named aisleService must be of type com gdie
  • Nmap源码分析(主机发现)

    Nmap源码分析 主机发现 2012年8月9日 Nmap在进行真正的端口扫描之前 通常需要确定目标主机是否在线 主机发现过程 以免发送大量探测包到不在线的主机 主机发现作为Nmap的基本功能之一 用户也可以单独运用 例如 仅仅需要确定局域网
  • 盘点3款超好用的免费录屏软件,快来看!

    在现代数字化社会中 录屏软件成为了各行各业中必备的工具之一 用于记录操作步骤 制作教程 分享游戏精彩瞬间等 而寻找一款免费的 功能强大的录屏软件也变得越来越重要 本文将为您介绍3款免费录屏软件 并详细说明使用步骤 帮助您找到适合自己需求的录
  • 制作OLED图标

    制作OLED图标 陈拓 2021 06 24 2021 06 26 1 概述 制作用于OLED显示的图标 获取C语言图像点阵数据 2 图标库 先准备图标图像 可以从图标库中找需要的图案 下面两个是我常用的图标网站 2 1 Font Awes
  • 什么是gdb,gdb的简单用法

    在Linux中 gdb是GNU调试器 GNU debugger 的缩写 它是一个强大的命令行调试工具 用于调试C C 和其他编程语言的程序 使用gdb可以执行以下任务 启动程序并逐行执行代码 设置断点 以便在特定位置停止程序执行 检查变量的
  • php漏洞eval,Web安全之代码执行漏洞

    原标题 Web安全之代码执行漏洞 内容 1 代码执行漏洞的概述 2 代码执行漏洞的危害 3 代码执行漏洞的利用 4 代码执行漏洞的防御 背景介绍 在Web应用中有时候程序员为了考虑灵活性 简洁性 会在代码调用eval函数 PHP函数 去处理
  • oracle imp lrm 00101,LRM-00101: unknown parameter name解决办法

    LRM 00101 unknown parameter name解决方法 点击右边红色标题查看本文完整版 LRM 00101 unknown parameter name解决方法 SQL gt startup pfile d oracle
  • 2023华为od机试 Python【比赛冠军】

    题目 我们现在有若干个运动员 每个运动员有自己独特的id 每个运动员的能力不同 比赛按照如下规则进行 0号和1号 2号和3号 以此类推 在每一轮比赛中 获胜的进入下轮 输入描述 输入一行N个数字代表N的运动员的实力值 输出冠亚季军的id 用
  • 逻辑思维训练题

    1 估算你所在城市理发店的数量 https www jianshu com p 1431daad2c62 这种思维方式的核心 就是把你要探索的结果用一个数理公式展示出来 我们用最开始的煎饼摊例子来看怎么算 就要用到 利润 收入 变动成本 而
  • 用于包管理的基本命令APT-GET和APT-CACHE

    这篇文章解释你如何快速学习从命令行使用apt get和apt cache安装 移除 升级和搜索软件包 这篇文章提供一些有用命令 它们将帮助你在基于Debian Ubuntu的系统中处理包管理 apt get是什么 apt get工具是一个强
  • Flutter基础Dart单例的实现

    引言 在日常开发搭建基础框架时 常常用到全局使用的数据类或者工具类 比如日期工具类 地图工具类等 在项目一般使用几种单例类来分享心得 有类实例方式 工厂方式以及类静态方式 实例方式 使用DartPad cn网站来练习dart简单代码片段还是
  • [QT编程系列-40]:QML语言简介

    目录 第1章 简介 第2章 QT QML示例 第三章 QML的步骤 第1章 简介 QML Qt Meta Object Language 是Qt框架中用于构建用户界面的声明性语言 它是一个轻量级的语言 用于描述界面的结构和行为 使开发人员能
  • 樱花动漫中的视频下载分析

    昨天有个朋友问我樱花动漫中的视频怎么下载 那么今天我就写篇文章来专门分析下樱花动漫中的视频是怎么下载的 1 还是打开我们的马赛克视频助手 来分析樱花动漫的数据包 当然你们也没有用其他的抓包工具 不过我习惯了用这个 可以使用它的转到来源功能
  • EPI distortion correction形变矫正, eddy, fieldmap等五种不同方法

    EPI distortion correction形变矫正 1 topup eddy 2 fieldmap eddy 2 1 对mag做去脑壳 2 2 基于去过脑壳的mag 1volume bet nii gz数据 对fieldmap进行预