MRI多序列,多中心数据集预处理--使用FSL-Flirt 配准数据

2023-05-16

FLIRT(FMRIB 的线性图像配准工具)是用于线性(仿射)模态内和模态间脑图像配准的全自动稳健且准确的工具。

文章目录

    • 什么是配准
    • image space
    • 空间变换
    • cost functions
    • fsl flirt 中的插值方法
    • 1.数据预处理
    • 2.同一个患者不同序列之间的配准
    • 3.把图像配到标准空间

什么是配准


在这两张图片上,很容易看出它们没有对齐,左边相对右边倾斜,虽然我们人类视觉系统还是能把对应的解剖关系连系在一起,但是我们使用计算机分析时确不能够

因此,我们希望相同的解剖结构对齐,用坐标表示的话,希望他们在相同的坐标上。如下图

对齐这些解剖结构的过程就叫做配准(register)

因此,配准的目的也是使相同的解剖结构在同一个位置,便于分析。可以将CT和MRI配准,看同一结构在两个模态上的变化,更易于疾病的诊断。同理PET-MRI等也可以进行配准。不同的MRI序列之间也可以配准。同一个MRI序列,前后做的两次图像也可以配准。等等。

注意,如果是配准脑部,最好先去头骨等组织。因为我们只希望配准脑组织,并不关心鼻子,眼睛是否配准,而他们会干扰配准的速度和准确性。可使用 fsl-bet去头骨

MRI数据预处理–使用FSL-BET轻松去头骨,提取脑组织

配准需要了解4个基本的概念:

  • image space(图像空间),
  • spatial transformation (空间变换),
  • cost functions(代价函数),
  • interpolation(插值)

接下来会简单了解4个概念,如果想直接上手,可以跳到后面

image space

图像空间包含3种:标准空间,结构空间,功能空间

每个空间又可以有不同的分辨率,比如标准空间模板MNI152,就有1mm,2mm,0.5mm的分辨率。

常用的标准空间(MNI152)模板在/usr/local/fsl/data/standard下,方便使用。

提供了各种分辨率,各种需求的模板。我们可以将自己的数据配准到标准空间上,作为预处理的一部分。

更多模板参考atlases

图像从一个空间到另一个空间的转换就叫空间变换。

空间变换

当我们进行配准时,必须要选择配准的空间变换方式,不同的方式,对大脑的形状和大小改变不一样。常用的有:

  • 刚体变换(Rigid-Body Transformations): 6个自由度(3转动,3平动)
  • 仿射变换(Affine Transformations): 12个自由度(3转动,3平动,3缩放, 3偏斜/剪切。
  • 非线性变换(Non-Linear Transformations):多于12个自由度
    这里的3是指有3个方向(x, y, z)

cost functions

cost functions,即代价函数用于评判配准的好坏。

  • correlation ratio(相关比):默认,常用于MRI模态之间
  • mutual information(互信息):常用于不同影像模态之间,如CT和MRI
  • least squares(最小二乘法):用于相同模态
  • normalized correlation(标准化相关):用于相同模态,改变亮度,对比度
  • normalized mutual information(标准化互信息):用于不同模态插值

fsl flirt 中的插值方法

  • trilinear(三线性插值):默认,快速
  • nearest neighbour(最近邻插值):用于离散化标签影像
  • spline(样条法):较慢,会产生范围外的值
  • sinc函数法

这4个概念会在配准的时候遇到,建议初步了解一下。

接下来我们开始配准


1.数据预处理

对图像进行一些初始处理有助于使 FSL 中的工作更加可靠和准确。

  • DICOM 数据转换为 NII 数据,可以使用工具:mricron/dicom2nii、freesurfer/mri_convert
  • 检查转换的数据是否良好,且不存在伪影。
  • 使用 fslreorient2std使图像的方向是一个标准方向
  • 对于结构数据,裁剪掉颈部和脑组织下面,可使用工具:robustfov(自动菜)或 fslroi(手动定位裁)
  • 大脑结构数据配准前,最后去颅骨(【添加链接】)
  • 采集数据注意事项:对于 T1w 结构,在 T1w 序列中有一些脂肪饱和度非常有帮助,以避免在分割和配准时将骨髓/脑膜误认为脑组织

数据预处理参考

这里我们学习使用FSL-Flirt配准,您可以使用图形界面,也可以使用命令行(MacOS 或 Ubuntu Linux 上的终端应用程序)。本操作指南假定您已安装 FSL。

【安装教程】

2.同一个患者不同序列之间的配准


现在讨论一个场景:我们有两个不同的图像,它们来自同一个患者,其中一个是t1加权图像,一个是t2加权图像,因此我们需要考虑如何设置配准参数

我们要使这两个序列的图像对齐,有两种方法。一个是把T2w配到T1w上(T1w作为参考图像,T2w作为输入图像);另一种就是反过来,T1w配到T2w.

一般原则是,把分辨率好的,对比度好的作为参考图像。

这个情况下,来自同一次检查的不同序列,可以视为一个刚体(rigid body), 因为病人只能够旋转和平移头部,这是几何上的唯一区别。

因此,我们可以选择刚体变换,6个自由度;代价函数可以选择 相关比或者互信息, 二者都适用于不同模态之间的转换。

  • 使用图像界面配准如下:

    先打开fsl > 点击B按钮,出现CD区,在C中输入 reference image(我的T2w对比度好些,用它做参考图像), DOF(自由度)选择刚体变换,6个自由度。设置输入输出图像地址。D区中的高级选项可以设置代价函数和插值方式,这里我用默认的就行。

  • 使用命令行

flirt [options] -in <inputvol> -ref <refvol> -out <outputvol>
flirt [options] -in <inputvol> -ref <refvol> -omat <outputmatrix>
flirt [options] -in <inputvol> -ref <refvol> -applyxfm -init <matrix> -out <outputvol>

这里提供了三种方式,终端输入 flirt 可以查看使用说明

我们首先使用第一种
flirt -in T1W_brain.nii.gz -ref T2W_brain.nii.gz -out register1.nii.gz -dof 6 -cost corratio

红色是配准后的T1w,和T2w还是没有对的很齐

我们这种从图像直接配准到参考空间,只需要一步配准,因此可以叫 single_stage registration(单阶段配准)。

对此,还有多阶段配准。

功能成像或扩散成像,然后我们也有一个特定的t1加权结构扫描主题,我们还需要将东西放入标准空间,因此我们现在有三个不同的空间,我们将进行多阶段配准,既可以在我们想要的任何空间组合之间移动,也可以让我们更好地配准

如图,我们先把epi功能像配到同一个病人的T1w上,只需要用自由度为6,线性配准进行,再把T1W配到标准空间。这时由于是不同个体,解剖差异较大,使用自由度12,非线性配准(FNIRT

为什么这么做?参考视频里的解释。(gzh)

3.把图像配到标准空间

我在使用多个数据集进行训练网络时,每个数据集都有不同的分辨率,大小。而我希望所有数据集都有相同的分辨率,并且可以指定它的分辨率应该怎么做?

比如brain MRI 数据集,有Brats(240x240x155), IXI(256x256xz,z=28-136), 这两个数据集要用在同一个网络训练,肯定要统一分辨率和大小。

最好的方法就是把他们配到同一个标准空间(如 MNI152)

配准方法同上面代码一样,只是把参考图像改为MNI152对应的分辨率(PS:官方只提供了3种分辨率,0.5mm, 1mm and 2mm).假设想要5mm的分辨率,那就把标准空间重采样到5mm(使用resample), 再配准。

flirt -in brats.nii.gz -ref MNI152_1mm_brain.nii.gz -out register.nii.gz -dof 12 -cost corratio
注意:MNI152_1mm_brain.nii.gz需要给对这个图像的地址(一般在/usr/local/fsl/data/standard),可以把他从原始库中拷贝到当前文件夹

这里还需要注意一点,我们把图像配准了,但是它的ground truth(标签)还是原来的分辨率,做分割的话,那就不对了。因此,ground truth也要配准。

而ground truth像图像那样配,多半是有问题的。因为它严格来说不是MRI图像。

推荐以下做法:

flirt -in brats.nii.gz -ref MNI152_T1_1mm_brain.nii.gz  -out brats_register.nii.gz -omat affine.mat
flirt -in brats_seg.nii.gz -ref MNI152_T1_1mm_brain.nii.gz -out seg_register.nii.gz -applyxfm -init affine.mat

大概意思就是获取图像配准的affine.mat矩阵,将它用于ground truth的配准。因为图像的配准就是根据这个仿射矩阵来的。有了仿射矩阵,就知道怎么变换了(不专业的理解,我也仅是用过,研究不深入)

配准是一个非常专业的领域,今天也只是讲了些可能跟我们平常使用MRI图像训练可能用到的配准需求。对于专业领域,还需要学习更多。

B站解释

fsl wiki

fsl tutorial

文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

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

MRI多序列,多中心数据集预处理--使用FSL-Flirt 配准数据 的相关文章

  • java 判断字符串是否为null的四种方法:

    以下是java 判断字符串是否为空的四种方法 xff1a 方法一 最多人使用的一个方法 直观 方便 但效率很低 if s 61 61 null s equals 34 34 方法二 比较字符串长度 效率高 是我知道的最好一个方法 if s
  • spring-boot推送实时日志到前端页面显示

    个人技术网站 欢迎关注 网上有很多后台推送日志到前端页面的例子 xff0c 这里我也借鉴了别人的做法 稍加改进一下 以前做前端页面显示日志一般都会想到ajax轮询去做 xff0c 这样太耗费服务器资源了 xff0c 性能也很差 使用长连接来
  • [Ubuntu][Android]快速配置Android USB设备的权限

    1 复制如下内容到新建文本文件中 xff0c 并保存为51 android rules SUBSYSTEM 61 61 34 usb 34 ENV DEVTYPE 61 61 34 usb device 34 MODE 61 34 0666
  • shell脚本一次性将tab制表符改为4空格的方法

    问题描述 今天需要修改一些bash脚本 xff0c 因为考虑到pycharm里面能够直接写 xff0c 而我用pycharm比较多 xff0c 所以直接用pycharm写了 xff0c 由于改的那个bash脚本是别的同事写的 xff0c 里
  • matlab 并行计算 parfor

    转自 xff1a http www xiongfuli com E5 B9 B6 E8 A1 8C E8 AE A1 E7 AE 97 2016 05 Matlab Parfor html 在Matlab下使用parfor实现多核并行计算
  • Windows安装和完全卸载MySQL8(以MySQL8.0.31版本为例) 之 Zip 方式(超详细教程)

    文章目录 一 前言二 安装1 下载MySQL2 安装MySQL3 小结 xff1a 4 修改环境变量 3 完全卸载 一 前言 MySQL8相比之前版本改动还是挺大 xff0c 主要有以下几点 xff1a MySQL8之后并不需要my ini
  • Nginx显示500错误原因和解决方法

    文章目录 1 背景2 Nginx 常见的几种报错3 解决500错误 1 背景 最近在操作nginx 的时候出现了 Nginx 500 内部错误 xff0c 在此记录一下原因 xff0c 项目采用的是前后端分离方式 xff0c 后端Sprin
  • Cause: java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list

    文章目录 原因分析 xff1a 解决方法 xff1a 原因分析 xff1a mysql 8里sql mode 中 select distinct 不允许和 order by 连用 可以查看 sql model show variables
  • 14.2 shell函数参数

    2 shell函数参数 2 1 位置参数2 2 选项参数2 2 1 getopts getopt的区别2 2 2 getopts的使用2 2 3 getopt的使用 Shell 函数参数的传递和其它编程语言不同 xff0c 没有所谓的形参和
  • protoc和protoc-gen-go-grpc安装及编译

    一 install protocol buffer compiler PB REL 61 34 https github com protocolbuffers protobuf releases 34 curl LO PB REL dow
  • powershell 脚本解压zip文件到指定目录

    span class token keyword Function span Unzip span class token operator span File span class token punctuation span span
  • 不用第三方软件 用DISM命令备份与还原win8系统

    分享一个来自远景论坛的的教程如何通过dism命令给自己的win8系统备份和如何通过dism命令还原系统 用 DISM 命令进行系统备份与还原不需要任何第三方软件 xff0c 是利用 Windows 7 Windows 8 系统自带的 DIS
  • ubuntu20.04+anaconda3+tensorflow-gpu2.1安装

    磁盘分区 WIN系统中 xff0c 右键我的电脑 管理 磁盘管理 xff0c 首先留给Ubuntu一定的空间 xff0c 这里为600G左右 Ubuntu系统盘制作 下载Ubuntu对应版本 xff0c 制作启动盘 Ubuntu安装 U盘启
  • nyist 27 水池数目(dfs搜索)

    xfeff xfeff 水池数目 时间限制 xff1a 3000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 南阳理工学院校园里有一些小河和一些湖泊 xff0c 现在 xff0c 我们把它们通一看成水池 xff
  • XTUOJ 1176 I Love Military Chess(模拟)

    xfeff xfeff I Love Military Chess Accepted 45 Submit 141Time Limit 1000 MS Memory Limit 65536 KB 题目描述 陆军棋 xff0c 又称陆战棋 xf
  • 数据结构课程设计之一元多项式的计算

    数据结构不是听会的 xff0c 也不是看会的 xff0c 是练会的 xff0c 对于写这么长的代码还是心有余也力不足啊 xff0c 对于指针的一些操作 xff0c 也还是不熟练 xff0c 总出现一些异常错误 xff0c 对于数据结构掌握还
  • 数据结构课程设计之通讯录管理系统

    数据结构的第二个课程设计 xff0c 在c语言课程设计的基础上加以改进 xff0c xff08 加强版 xff09 xff0c 保存一下代码 xff0c 对文件的处理 xff0c 还是有一点一问题 xff0c 还有待改进 include l
  • 在网页中添加音乐

    最近在折腾一个网页 xff0c 对于一个有强迫症的人来说 xff0c 就想在网页中插入音乐 xff0c xff08 当做背景音乐 xff09 xff0c 然后自己百度了好多资料 xff1b 就在这里总结一下 xff1a 第一步 xff1a
  • nyist oj 214 单调递增子序列(二) (动态规划经典)

    单调递增子序列 二 时间限制 xff1a 1000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 给定一整型数列 a1 a2 an xff08 0 lt n lt 61 100000 xff09 xff0c 找出
  • 思科CCNA第一学期期末考试答案

    1 第 3 层头部包含的哪一项信息可帮助数据传输 xff1f 端口号 设备物理地址 目的主机逻辑地址 虚拟连接标识符 2 IP 依靠 OSI 哪一层的协议来确定数据包是否已丢失并请求重传 xff1f 应用层 表示层 会话层 传输层 3 请参

随机推荐