MRI图像处理:VBM原理和步骤

article/2025/10/16 3:27:19

VBM是voxel-based morphometry的缩写, 是对被试之间灰质体素粒度统计分析。VBM可以得到人群中volume和gyrification的不同,对clinical score进行相关性分析,VBM不仅仅可以用于结构数据(T1),还可以用在fmri和PET数据上,分析由于结构变化带来的影响。
VBM在研究中非常常见,除了VBM以外,还有一些类似的方法,例如基于表面的灰质厚度分析方法(surface-based thickness analysis), 张量分解形态学分析.
VBM分析中,不需要任何的先验知识,是一种全脑的无偏分析方法,并且可以自动运行,运算速度非常快。
说了VBM这么多优点,那么到底VBM怎么做?

VBM的罪与罚

VBM要做的是不同被试之间的灰质比较,那么首先就需要将这些被试图像从各自所在的个体空间配准到标准空间,使其可以比较。
但是要提到配准,这里似乎有个权衡(trade-off),如果非线性配准不够,可能会没有一致性,导致图像之间不好比较,但是如果非线性配准得太好,这么有丧失了数据间的差异。
但是,如何避免上述这个似乎矛盾的trade-off需求? 如何找到合适的临界值,使得数据在具备可比性的前提下,尽量保留差异呢?

优化方案

Good在2001年的文章中提出了如下的优化方案:
1) 首先,用bet命令去颅骨,fast命令进行成分分割,得到被试的灰质图像(注意,这时并没有做过任何配准)
在这里插入图片描述

2)在patients和controls两个组中挑选数量相同的被试作为样本集合,将每个被试的灰质图像依次配准到标准模版上,包括了线性配准和非线性配准。
注意在挑选时一定要从两个组中选择完全相同的被试个数,不要去掉特别显著的(与其他sub显著不同的被试)
线性配准包括了是线性坐标变换和仿射变换,包括了坐标旋转、平移、整体以及局部的缩放。非线性配准是局部的非线性形变,具体来说,就是将一个变形场应用在了原始图像上,对原始图像进行局部任意的变换(基于B样条曲线拟合)。

3)Modulation。这一步是优化VBM的关键。modulation就是说利用非线性配准时候生成的变形场(warp)文件,对配准后的灰质组织的volume进行补偿。在warp文件中,保存了所有体素上volume的压缩/放大的信息,将这些信息(主要是warp数据中的一阶现行jacobian矩阵)应用在配准后的灰质上,在不改变灰质图像标准空间坐标的情况下,改变灰质的volume的intense,这样就既保证了被试数据在空间上的一致性可以比较,同时也保证了个体灰质的差异性。

在这里插入图片描述
具体而言,由于warp在进行非线性配准的时候,改变了体素之间的空间位置,从一个特定的slice来看,这个slice上体素之间的距离改变带来了面积的改变,从三维角度就是带来了体积的改变。例如如下的说明图片,图中最初黄色区域部分的面积是1/3,用warp进行非线性变换后,原本没有表情的脸变成了笑脸,同时,黄色的区域部分面积变成了1. 但是我们知道,这部分最初的面积只有1/3而已。如果将这个区域的数据看左灰质,那么这部分实际上的灰质volume只有1/3而已。将这个信息应用在配准后的数据上,就可以还原出原来的体积情况。在右侧的图片中,就表现为“密度”的变化。

4) 对图像进行空间平滑,这样做可以提高信噪比。当然,平滑核的宽度选取非常重要,一般情况下,5-10mm都是不错的选择。当平滑核宽度越大,局部信息就会丢失的越多,结果中某些比较小的统计上显著的区域就会消失。

经过上述的处理后,原始在个体空间中的图像就配准到了标准空间,具备了统计分析所需要的可比性,但是也丢失了原始数据中包含的部分生物信息。面对不同的具体问题,可以参考Ridgway 2008年发表在neuroimage上关于VBM的文章。

对于如何用FSL做VBM的纵向变化研究(longitudinal),可以参考Douaud 2009年发表在Brain上的文章。
纵向研究方法和软件对比,可以看Thomas2009年发表在NeuroImage上的文章。

study-specific模版步骤

用FSL做VBM的过程,整体来说可以总结为:
数据准备:patient组和control组数据查看,选择。
step1:去颅骨,bet命令
step2:大脑成分分割,segmentation命令
step3:配准到MNI模版的灰质上,flirt+fnirt,保留warp和Jacobian文件。
step4:modulation,将Jacobian文件应用于配准的subject图像上,保存原始图像上灰质的volume信息
step5:空间平滑,选择合适的高斯平滑核宽度进行平滑,提高数据信噪比。
step6:平均,生成study-specific模版。
step7:将所有的个体灰质图像再次配准到study-specific的模版上
Step8 :非参数统计,对比patient组和control组的差异显著性。
在这里插入图片描述
对于上述的处理流程,FSL提供了封装的处理命令:fslvbm_1_bet, fslvbm_2_templatefslvbm_3_procrandomise, 其中:
fslvbm_1_bet实现上面的step1~2
fslvbm_2_template实现了step3~6
fslvbm_3_proc是step7
randomise则是step8

但是这个过程并不是固定的,不可修改的,在具体的处理过程中,可以根据要处理的数据情况,自己写脚本实现step1~7的任何一步,也可以和fslvbm_*_*的任何一个脚本配合,最后用randomise实现统计分析就可以。


http://chatgpt.dhexx.cn/article/esykGmbA.shtml

相关文章

MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)

基于体素的形态学方法(voxel-based morphometry, VBM),是分析大脑解剖学(结构)差异最常用方法之一。 其通过给大脑volume逐体素打标签(分类)的方式来进行组织分割(segmentation&…

LabVIEW程序测试

LabVIEW程序测试 工程师经常不太关注测试,将更多时间用于其他开发。通过一定程度的测试,可以保证节省时间。 开发人员必须清楚地了解对测试的期望程度。此外,还必须标准化测试方法并跟踪测试结果。在开发需求和设计规范时,还要制…

史上最详细的小程序测试用例模板,以后再也不怕测试用例不会写了

目录 1. 文档介绍 1.1 文档目的 1.2 文档范围 1.3 读者对象 1.4 术语与缩写解释 2. 功能测试用例 2.1 被测试对象的介绍 2.2 测试范围与目的 2.3 测试环境与测试辅助工具的描述 2.4 功能测试用例 附录:评审意见 1. 文档介绍 1.1 文档目的 设计测试用例…

软件测试人员一定要会的微信小程序测试点

微信小程序: 不需要下载安装即可使用的应用, 实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。 体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。 应用将无处不在,随时可用&#…

小程序测试流程

流程分为两个方面,解包可以挖掘信息泄露问题、隐藏的接口,抓包可以测试一些逻辑漏洞、API安全问题。两者结合起来就可以边调试边进行测试,更方便于安全测试。 搜索目标小程序 目标搜索不能仅仅局限于主体单位,支撑单位、供应商、…

【软件测试】

系列文章目录 文章目录 系列文章目录前言第四章 单元测试4.1 软件测试过程概述4.2 什么是单元测试4.2.1 单元测试的定义4.2.2 单元测试的重要性4.2.3 单元测试原则 4.3 单元测试的目标和任务4.3.1 单元测试的目标:单元模块被正确编码4.3.2 单元测试的主要任务 4.4 单…

软件测试之测试程序开发

软件测试培训之测试程序开发 脚本维护,测试数据准备,测试监控准备; 测试程序开发 性能测试场景设计和性能测试脚本设计中需要注意以下几个问题: 场景真实性: 每个脚本的具体操作步骤,是和真实环境操作类似的,每个场景内的测试程序之间的逻辑关系,压力比重…

程序员的测试课

git项目地址:GitHub - dreamhead/geektime-todo: Geektime Todo is a demo todo project for Geektime column. 1、实现一个Todo应用 设计规范 1、对于输入参数的检测,由入口部分代码进行处理。如空字符串。 2、Repository 的问题以运行时异常 的形式抛…

软件测试重点知识

软件测试的定义: 利用人工或自动化的手段来运行或测定某个系统,其目的在于测它是否满足规定的需求或检测预期结果与实际结果之间的差异。 软件测试的目的: 发现软件中存在的问题或缺陷,检查软件系统是否满足要求。 软件测试的对象…

跑批利器--读取文件

在上篇文章中已经对示例的基本业务和流程进行了解,同时也知道了SpringBatch的三个接口ItemReader,ItemProcessor,ItemWriter.接下来我们主要是通过示例来具体处理一个文本文件,将里面的数据和内容通过SpringBatch的加工处理来存到新的数据库中. SpringBatch提供专门的类去读取文…

金融任务实例实时、离线跑批,Apache DolphinScheduler 在新网银行的三大应用场景与五大优化...

在新网银行,每天都有大量的任务实例产生,其中实时任务占据多数。为了更好地处理任务实例,新网银行在综合考虑之后,选择使用 Apache DolphinScheduler 来完成这项挑战。如今,新网银行多个项目已经完成了实时与准实时的跑…

线程并发处理跑批任务

定时任务类代码: package com.jzfq.rms.autoApprove.job;import com.alibaba.fastjson.JSONObject; import com.jzfq.rms.autoApprove.bean.InnerRuleProcess; import com.jzfq.rms.autoApprove.bean.InnerRuleProcessQueryBean; import com.jzfq.rms.autoApprove.s…

Oracle-job跑批变慢案例

前言: 近期处理了一起应用job跑批变慢的案例,在一天job执行时间突然增加了几十倍,后面通过分析是由于索引的设计不合理导致执行计划的异常,把当时的问题分析过程记录下来,分享给大家。 问题: 数据库job存储执行时间增加几十倍 原因…

架构师自诉:如何做到百万数据半小时跑批结束

业务背景 跑批通常指代的是我们应用程序针对某一批数据进行特定的处理 在金融业务中一般跑批的场景有分户日结、账务计提、欠款批扣、不良资产处理等等 具体举一个例子 🌰 客户在我司进行借款,并约定每月 10 号码还款,在客户自主授权银行…

基于Kettle跑批的案例说明

需求概述 通过动态配置表的方式完成在kettle里动态配置参数,并调用ktr,实现跑批的目的。 问题分析 定义一个ktr读取配置表的信息并将拷贝记录到结果定义一个ktr从结果里获取记录并设置变量定义业务ktr(即按照业务需要开发的…

学习笔记-如何设计离线跑批系统

一、基本概念 离线跑批:通常指批量加工数据、完成一系列流程的定时任务。 业务场景:在银行、金融、支付出现较多,其他行业也可能涉及。 1. 定时的数据状态更新(到期失效) 2. 数据计算(计算罚息、计提&…

跑批利器--示例

接下来我们将通过简单的一个在线商店的应用示例来展示如何使用SpringBatch.通过这个示例我们可以进一步去理解SpringBatch批量处理程序它是如何实现高效的读写数据,何时去使用内部组件,如何实现你自己的组件,以及如何配置一个批量任务在Spring容器中. 这里我们简单描述一下业务…

如何设计一个多线程处理跑批功能

一、背景 最近承接了一个需求,背景是用户当天可以参与比赛竞猜,当天20点前参与竞猜,第二天上午10点出结果。系统的实现思路是用户参与竞猜时增加竞猜记录,第二天早上9点开始进行跑批,跑批依赖业务的配置,要…

跑批利器--批处理应用程序

目前笔者正在进行直销银行互联网核心的设计和研发,在银行相关系统中有一块内容比较关键,那就是跑批.因此接触到了SpringBatch的相关内容,作为学习和记录,有必要将SpringBatch的相关技术点和实际项目中遇到的问题记录下来,同时也跟各位来进行分享和学习. 首先先了解一下什么是批…

跑批 流程、代码梳理

权限系统 全部——ETL服务——计划维护 日程表:到时间触发跑批任务 复制任务编号 ETL设计——作业设计——自定义java——插入语句 找到类所在位置 org.isscloud.portal.agent.scf.batch.FinaResultBatch base下的agent下的scf.batch包下的FinaResultBatch类 S…