学习笔记:医学图像配准简介—附voxelmorph模型

2023-05-16

VoxelMorph官方代码:GitHub - voxelmorph/voxelmorph: Unsupervised Learning for Image Registrationb

本文参考了博客:基于深度学习的单模医学图像配准综述(附VoxelMorph配准实例)_深度学习图像配准_棉花糖灬的博客-CSDN博客

一、医学图像配准简介

配准的定义就不提了,这里主要说一下配准可以分为线性配准和非线性配准。线性配准包括刚体配准、仿射配准等,其中刚体配准是指只通过旋转和平移配准,而仿射配准则等于刚体配准+缩放。非线性配准,也就是论文里经常见到的可变形配准deformable registration,通常是说将移动图像的像素做位移,使得变形后的图像与目标图像的“差距”尽量小,当然差距这个词并不是很专业,下面会讲讲配准常见的损失函数。

一般处理的医学图像,像MRI、CT等等,都是三维图像,也就是说有长宽高三个张亮,长宽是单张切片的大小,高(深度)是说切片的多少,反应了人体内部不同深度的解剖结构。一般的数据集都挺大的,155*240*240这种?所以图像是比较大的,显存放不下怎么办?那当然是买4090啦~

废话不多说,可以采用nnUNet中的方法,去除背景保留前景,以减小图像大小。或者每次取3D图像的一个2D切片进行配准(这样就变成2维配准了)。或者采用基于patch的方法,将图像裁剪成相同大小的patch,每次对一小patch进行处理,这样减少了显存的占用,但在将输出patch拼接成完整图像的时候拼凑感会十分明显,大大增多了重叠区域。

传统的配准方法使用几何方法,基于区域或者基于特征。对大脑这类存在特征点、线的一般基于特征,而像大肠展开图这种没有什么特征的就是基于区域。缺点是对每一幅图都需要进行迭代,计算成本高。

深度学习的好处在于参数是可以共享的,后期推理的速度极快,一般用cpu计算即可。缺点是前期训练时间长,需要大量数据,且稳定性不强。

深度学习的方式又分为有监督的和无监督的。一般有监督的监督数据来自于专业人员通过传统方法先对移动图像进行配准,以获得的形变场作为ground truth。这种方法的缺点很明显,一是带标签的数据很难获得,二是这种方法的理论上限是标注的时候传统方法的上限。

无监督的方法优化图像间的相似度、平滑度、重叠度等损失。一般采用unet式的编码-解码结构,输出变形场。接着根据变形场得到一个采样网格,使用空间转换网络(Spatial transformer network,STN)利用该采样网格对浮动图像进行重采样,得到配准后的图像。

所谓的空间转换网络,可以看这篇博客:

【论文笔记】Spatial Transformer Networks(STN)-用于医学图像配准的空间变化网络_棉花糖灬的博客-CSDN博客

还可以分为单模态配准和多模态配准,目前来看两个方向都有很多人在做,总体的创新点是将视觉领域的新方法,新模型应用到配准这个领域。

图像配准的标准范式

二、常见损失函数(持续更新)

损失一般有两种,一个是相似性损失,一个是正则项损失。

这里可以看知乎:【开源计划】图像配准中常用损失函数的pytorch实现 - 知乎 (zhihu.com),虽然是20年的文章了,但其实损失函数整体的逻辑都大差不差。

2.1 相似性损失

常见的损失函数有均方差(mean squared voxel difference)、交叉互相关(cross-correlation)和互信息(mutual information)。其中,前两个通常用于单模态的图像,而第一个的鲁棒性相比于交叉互相关更差一些,比较容易受图像灰度分布与对比度等的影响。互信息通常用于多模态的图像,虽然在单模态图像的鲁棒性更好,但用的还是比较少。

均方差指两个图像之间的平均灰度值差的平方;互相关(Cross-Correlation)是一种测量两个信号之间相似性的方法;互信息(Mutual Information,MI)是一种测量两个随机变量之间相关性的方法。它基于信息论中熵(entropy)和条件熵(conditional entropy)的概念。

读论文的时候还看到了一个gan损失(对抗生成的那个,可见博客多模态医学图像配准——cocycleReg论文学习(2022

2.2 正则项损失

在配准过程中,为了最大化图像的相似性测度,往往会产生不连续的变形场,而理想的形变场应该是微分同胚的,从而保证拓扑性质不被改变。所以还需要引入正则化惩罚变形场的连续性和重叠程度。

常见的正则项计算变形场梯度的L2范数的平方,叫做扩散正则性:

 需要注意的是:梯度的计算是需要函数可导的,但对图像来说,三个维度(W/H/D)都是不连续的,因此需要使用相邻体素之间的差异来近似空间梯度,也就是上图中提到的。

还有一种方法是弯曲能量,也叫折叠惩罚(bending penalty)的正则化方法,实际上就是计算变形场的二阶梯度。

以及雅可比行列式中负数的个数,这里有一个17年提出的:抗折叠损失

  它通过保持雅可比行列式为正来抑制折叠,以及 通过偏置优化以保持相同的体积,防止收缩和膨胀这有利于配准具有显着空间位移的医学图像(譬如子宫肌瘤消融期间膀胱体积的变化)。

2.3 循环一致性

除了加入正则项,还有一种方法叫循环一致性,它的想法是:不改变backbone网络的结构,而是通过增加一个从已经预测的图像中恢复原始图像的任务来实现正则化。具体内容参考博客【论文笔记】用循环一致性避免形变场重叠的医学图像配准网络_棉花糖灬的博客-CSDN博客

一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_循环一致性损失_Y.Z.Y.的博客-CSDN博客

三、VoxelMorph

3.1网络结构

 这里的形变场是通过卷积神经网络g产生的。损失在图中都有。论文中的卷积网络是Unet:

蓝色区域是可以添加的功能,如果对固定图和移动图都有分割标签的话,可以将形变场应用在各个分割,并添加相应的损失。获得更好的配准结果。我看到有博客中写道这个是有监督训练,我觉得可能不是?我的理解是,对配准问题来说,有监督的训练,GT应该是人工做出来的形变场。这个分割标签是附加项。这一段是个人理解,如果有大佬看到指正。读到一篇论文,来修改下:

在论文arxiv.org/ftp/arxiv/papers/2204/2204.11341.pdf中提到:有一些研究人员将分割的信息作为配准的一部分。这种方法是“弱监督的“。

如果有像我一样的萌新,非常建议大家去看看我在本文提到的论文。注意到:几乎目前所有的论文都会把voxelmorph作为基线。

论文链接:体素形态:可变形医学图像配准的学习框架 |IEEE 期刊和杂志 |IEEE Xplore

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

学习笔记:医学图像配准简介—附voxelmorph模型 的相关文章

  • likeadmin权限管理菜单报错:AxiosError

    报错图片 xff1a 这个原因是后端返回的 JSON 数据太多而导致前端报错 xff0c 可能是因为前端无法处理大量数据 下面是一些可能导致前端代码处理大量数据出现问题 返回json数据中的末尾有说到数据太多了的原因 然后我去数据库的sys
  • Vue安装

    Vue安装 一 安装二 使用步骤1 在项目中使用vue2 使用命令创建vue项目 一 安装 安装vue之前需要安装nodeJS 1 需要安装Node js 可以从官方网站进行下载并安装 2 这篇博客有详细的步骤 Node js安装详解 3
  • Thinkphp6模型关联

    文章目录 前言一 一对一关联示例 二 一对多三 多对多四 示例总结hasManybelongsTohasOne 前言 ThinkPHP 6 模型关联是指使用 PHP 对象关系映射 xff08 ORM xff09 机制 xff0c 通过模型类
  • Linux----生产者与消费者

    生产者与消费者 模型场景分析 xff1a 编程流程 xff1a 生产者同步流程消费者同步流程 代码实现主函数生产者线程函数消费者线程函数 模型场景 分析 xff1a 缓冲区buff中存放数据 生产者和消费者数目不固定 xff0c 生产者向缓
  • 一篇文章了解Like用法及常见索引失效情况

    1 简介 本文主要通过介绍Like索引及常见索引失效情况 xff0c 以MySQL为例 2 EXPLAIN关键字 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划 EXPLAIN 语句 就可以看到某
  • Linux——进程和计划任务管理(理论+实验)

    目录 前言一 程序 进程线程概述1 1 程序1 2 进程1 3 线程1 4 程序 进程和线程的关系1 5 程序和进程的关系 二 查看进程2 1 1 ps 命令 查看静态的进程统计信息 xff08 Processes Statistic xf
  • Uncaught SyntaxError: Unexpected token ‘var‘

    遇到Uncaught SyntaxError Unexpected token 39 var 怎么去解决 1 发现报错 xff0c 就去找报错 2 怎么查找这个报错并修改这个报错 3 为什么我写的时候没有提示报错 xff0c 运行的时候才显
  • 如何使用Maven创建Mybatis项目

    1 打开idea xff0c 依次点击左上角的File gt New gt project 2 选择Maven xff0c 然后点击Next 3 通过点击这个文件夹进行文件存放地址的改变 xff0c 然后输入项目的名字 4 再点击Finis
  • 树莓派3B+raspbian+docker+hassio安装教程

    说明 1 此文转载 侵删 参考https bbs hassbian com thread 3501 1 1 html 2 修改echo 34 96 date 43 H M S 96 gt gt gt gt gt gt gt gt gt gt
  • Linux - 开机启动流程

    目录 一 掌握开机启动流程的意义 xff1a 1 1 为什么需要了解开机启动流程 xff1f 1 2 在日常的运维过程中 xff0c 是否会遇到机器出现问题启动不了 xff1f 1 3 开机启动流程的意义 二 开机启动流程 2 1 开机启动
  • 关于Ubuntu中出现:Unable to fetch some archives, maybe run apt-get update or try with --fix-missing问题

    在Ubuntu有网络的情况下 xff0c 如果出现在进行 apt update或者apt install时 xff0c 出现Unable to fetch some archives maybe run apt get update or
  • 2022年宜春市职业院校技能大赛中职组“网络搭建与应用”赛项任务书

    2022年宜春市职业院校技能大赛中职组 网络搭建与应用 赛项任务书 xff08 总分1000分 xff09 赛题说明 一 竞赛内容分布 网络搭建与应用 竞赛共分二个部分 xff0c 其中 xff1a 第一部分 xff1a 网络搭建及安全部署
  • Java之变量的作用域和初始化

    write xff1a 2022 4 28 前文我们学习了Java的数据类型 xff1a Java之数据类型 xff0c 本文我们学习变量的作用域和初始化 xff0c 文中有大量使用实例讲解分析 xff0c 需耐心解读代码 文章目录 1 变
  • springboot集成mybatis:查询数据库,返回的结果为null的解决办法

    springboot集成mybatis xff1a 查询数据库 xff0c 返回的结果为null的解决办法 问题重现 xff1a 数据库中的数据 查询的结果 xff1a 也就是说我数据库中有几个数据就有几个null值 这就很奇怪了 xff0
  • springboot使用thymeleaf后找不到模板(五个细节)已解决

    问题 xff1a springboot使用thymeleaf模板后找不到html模板 第一种情况 xff1a 先说第一种情况 xff0c 也是我出现问题的原因 xff1a 那就是导入thymeleaf的命名空间后 xff0c 粗心大意的将t
  • 一篇实现springboot集成elasticsearch的增删改查

    准备工作 springboot版本 span class token generics span class token punctuation lt span parent span class token punctuation gt
  • centos7连接不上网络,保姆级演示,亲测,亲测

    centos连接网络无非就大 五步 写在前边 xff1a vmware16 centos7 1 打开vm xff1a 编辑 虚拟网络编辑器 更改设置 2 有三个网络名称 VMnet0 xff1a 选择仅主机模式 xff0c 勾选下边两个选项
  • 简单三步,实现idea远程debug

    远程debug xff0c 简单三步 这里默认你已经打好了jar包 第一步 xff0c 编辑idea配置 1 1 点击edit configurations 1 2 点击 43 号选择Remote JVM Debug 1 3 进行配置 xf
  • shell把变量的值作为变量使用

    有那么一种生产环境 我有一个变量 xff0c 变量有一个初始值比如count 61 1 我想将count计算或者处理后的值再次作为参数传递 举个例子 span class token assign left variable name sp
  • lamp配置

    lamp独立配置 简介 所谓lamp xff0c 其实就是由Linux 43 Apache 43 Mysql MariaDB 43 Php Perl Python的一组动态网站或者服务器的开源软件 xff0c 除Linux外其它各部件本身都

随机推荐

  • Archlinux系统屏幕花屏

    我的电脑 xff0c 联想Y7000 xff0c 2019款 xff0c Archlinux内核版本 xff0c 系统情况如下 花屏样例 xff0c 这只是其中一种花屏样式 xff0c 屏幕一直不受控制的在闪动 出现这种情况不难猜到是显卡驱
  • centos7 使用letsEncrypt certbot 生成免费的ssl证书 渐进学习

    1 我们将会使用letsencrypt证书颁发机构里的certbot客户端 certbot官网 xff0c 国内也可访问 https certbot eff org 2 准备工作 xff0c 这一步很重要 你首先需要有一个解析通过了的域名
  • CSS选择器

    c选择器表示要定义样式的对象 xff0c 可以是元素本身 xff0c 也可以是一类元素或者指定名称的元素 一 选择器的分类 1 元素选择器 xff1a 以标签名作为选择器的一种方式 xff0c 例如 xff1a p h1 h6 div ul
  • 多生产者多消费者解决方式

    在上一篇博客中记录了如何解决普通生产者消费者的问题 xff0c 这篇讲一下如何解决多生产者多消费者问题 多生产者多消费者问题案例 xff1a 一家四口围着一个盘子 xff0c 盘子中最多放两个水果 爸爸不断向盘子中投放苹果 xff0c 儿子
  • 关于Java NoSuchElementException: No value present以及java.lang.NullPointerException处理

    1 Java NoSuchElementException No value present while curSum lt 100 找出小数余额最大的组 xff0c 对其进行加1 CircleRequest max 61 list str
  • 手机号无法验证,如何注册推特

    Twitter无法添加 验证中国手机号码 xff1f 既然Twitter无法添加 验证中国手机号码 xff0c 怎么解冻呢 xff1f 以下是推特注册时 xff0c 验证 43 86手机号解决方法 xff1a 进入账号申诉页面 点此进入 T
  • vue安装vue-router出错

    项目场景 xff1a 在vue中安装vue router 问题描述 xff1a 提示 xff1a 在安装过程中报错 xff0c 缺少依赖 xff1a PS D span class token punctuation span WebDep
  • SpringBoot之SpringSecurity(安全)

    SpringSecurity xff08 安全 xff09 Spring Security是针对Spring项目的安全框架 xff0c 也是Spring Boot底层安全模块默认的技术选型 xff0c 他可以实现强大的Web安全控制 xff
  • 解决决SpringBoot图片上传需重启服务器才能显示的问题

    问题描述 xff1a 前端页面实现头像图片上传并实时更新显示的功能 xff0c 但是文件上传成功后不能实时显示 xff0c 必须重启服务器后才能显示出来 下图是我将图片文件上到到的目录 xff0c 及项目架构 问题发生的原因 这是服务器的自
  • html页面实现登录验证码功能(纯前端)

    html 43 css 43 javascript简易实现注册或登录时实现验证码功能 xff1a 原文链接 xff1a https blog csdn net weixin 41472431 article details 90732468
  • lvs2种模式和haproxy配置

    lvs配置方法 nat模式配置 ip类型ip地址VIP仅主机模式192 168 96 134DIP192 168 149 143host1IP192 168 149 140host2IP192 168 149 137 host1配置 spa
  • js中复选框checkbox如何判定为被选中

    在学习的过程中触及到html分离式开发的内容 xff0c 其中复选框checkbox判定选中对于ajax传数据来说十分重要 xff0c 故将该篇文章转发留存 xff0c 方便以后查阅 要想判定复选框选中状态可以使用 xff1a 34 tes
  • springboot使用ssh公钥连接mysql(含账号密码连接)

    引言 在项目开发过程中 xff0c 遇到了连接数据库时需要使用ssh公钥的情况 在本地使用navicat可以直接通过可视化界面去进行ssh的连接 xff0c 但是在java中无法直接去进行连接 后来经过查询资料 xff0c 发现必须要在ja
  • Spring boot使用Maven Profile配合Spring Profile进行多环境配置和打包

    引言 参考文章 xff1a https cloud tencent com developer article 1769239 最近在项目中有遇见maven的多环境配置 xff0c 由于以前没有接触过 xff0c 所以查阅资料后记录为笔记
  • idea中使用maven进行多模块打包部署时jar包中无依赖的问题(示例:jar包才5k,且无法正常启动)

    引言 模块关系 xff1a A xff1a 代表父工程B xff1a 代表WEB模块 xff0c 主加载类所在模块S xff1a 业务处理模块D xff1a 数据处理模块E xff1a 基础模块 依赖关系如下 xff1a D依赖ES依赖EB
  • 汇总maven配置失败问题

    1 maven的下载路径里面有中文或者符号 每个路径都要用英文 xff01 xff01 xff01 2 在系统环境中新建 变量名 xff1a MAVEN HOME 变量值 xff1a D Program Files apache maven
  • emq中测试连接8083成功,连接8084失败

    今天在emq中测试连接 xff0c 发现不加密的8083可以连上 xff0c 但加密的8084却连接不上 xff0c 搞半天才发现还有ssl文件未配置 经过找资料得知 xff0c 我是因为服务器上的emqx未配置 1 在域名配置ssl证书后
  • 〖小狼毫〗小狼毫初次使用配置

    这次配置是在中文全拼方式下进行的 xff0c 其他的输入方式可参考一下 xff1b 配置相关资料均来自于网络 一 这次配置实现的功能 英文单词输入日期时间类型输入 xff08 包括年 月 日 星期 几点几分 xff09 表情及颜文字输入 x
  • Windows10桌面美化——打造简洁高效美观桌面

    这是小编的Windows桌面 xff1a 常用的软件都固定在了任务栏上且进行了居中美化 所有的软件都固定在了开始屏幕上 我们的思路是 xff1a 把所有软件全部放在开始屏幕中 xff0c 需要使用时 按下键盘上的 window徽标键 打开
  • 学习笔记:医学图像配准简介—附voxelmorph模型

    VoxelMorph官方代码 xff1a GitHub voxelmorph voxelmorph Unsupervised Learning for Image Registrationb 本文参考了博客 xff1a 基于深度学习的单模医