医学图像的数据增强技术 --- 切割-拼接数据增强(CS-DA)

医学图像的新型数据增强技术

    • CS-DA 核心思想
      • 自然图像和医学图像之间的关键差异
      • CS-DA 步骤
      • 确定增强后的数据数量
    • 代码复现

 


CS-DA 核心思想

论文链接:https://arxiv.org/ftp/arxiv/papers/2210/2210.09099.pdf

大多数用于医学分割的数据增强技术最初是在自然图像上开发的,没有考虑到医学图像整体布局标准固定的特点。

基于医学图像的特点,作者开发了切割-拼接数据增强(CS-DA)方法,这是一种用于医学图像分割的新型数据增强技术。

CS-DA通过将从不同原始医学图像中切割的不同位置分量拼接成新图像来增强数据集。

CS-DA的思想很简单:

  • 将原始医学图像以相同方式切割成多个组件;
  • 然后从不同的原始图像中切割出不同位置的组件,
  • 将它们拼接在一起形成新的图像。

假设有五张原始医学图像,每张图像都代表不同的医学情境,如X光片或MRI图像。

每张原始图像都被切割成四个相同大小的组件,就像将图像分成四个拼图块一样。

现在,我们可以创建新的图像,通过从这些原始图像中选择不同位置的组件并将它们拼接在一起。

假设我们从第一张原始图像中选择了第一个组件,从第二张原始图像中选择了第二个组件,依此类推,直到从第五张原始图像中选择了第五个组件。

这样,我们就创建了一张新的图像,它的组成部分来自不同原始图像的不同位置。

这个新图像会保持与原始图像相同的整体布局和外观,因为每个组件都是从医学图像中切割出的,并且它们有相似的对象或背景。

与传统的数据增强技术(如Cla-DA)不同,CS-DA不需要对原始图像进行复杂的数学函数处理,只需将组件按矩阵格式拼接起来。

而且,CS-DA不会引入任何噪音或虚假信息到新图像中,因为所有信息都来自于原始图像的合法组件。

更重要的是,Cla-DA技术通过随机改变原始图像的信息来生成新图像,这会引入虚假信息到新图像中。

相比之下,CS-DA不会向原始图像引入任何噪音或虚假信息。

CS-DA创建的新图像中的所有信息都来自原始图像。

  • CS:cutting-splicing 切割-拼接

整体布局的一致性导致了不同医学图像中相同位置区域的互换性。

可以通过使用一个医学图像中的区域来替换另一个医学图像中相同位置的区域来创建新的医学图像。

新的医学图像具有与原始医学图像相同的整体布局,并且新医学图像中的对象完整。

在分割任务中,新的医学图像可以与原始医学图像混合在一起,用于训练分割模型。
 


自然图像和医学图像之间的关键差异

自然图像和医学图像之间的关键差异,这些差异在以下六个方面得到反映:摄像机方向、对象姿势、对象位置、对象完整性、对象比例和对象类别。

  1. 摄像机方向

    • 在自然场景中,对摄像机的方向没有具体的要求,可以从任何方向拍摄对象。例如,如图1所示,摄像机可以位于熊的对面或熊的下方。
    • 然而,在临床医学中,扫描仪或其他图像获取设备的方向是固定的。例如,肺部X光图像都是在后前位进行扫描的。
  2. 对象姿势

    • 自然场景中的对象在拍摄过程中可以处于任何姿势。例如,在图1中,熊可以玩球或游泳。
    • 而在扫描过程中,患者必须保持特定的姿势。对于无法自控的年幼儿童,放射科医生甚至会使用辅助设备或镇静剂来固定他们的身体。因此,扫描的器官在医学图像上也保持特定的形状。
  3. 对象位置

    • 在自然场景中,摄影师会根据自己的布局思想来安排对象在自然图像中的位置。自然图像的布局设计没有固定的模式,因此对象的位置总是随机的。
    • 在临床医学中,放射科医生会调整扫描仪以确保器官位于图像的中心或特定位置。
  4. 对象完整性

    • 自然场景复杂多变,有时在对象和摄像机之间会有遮挡物,阻止对象完全显示在自然图像中。例如,图1中的熊的部分身体被池塘中的水阻挡。
    • 医学图像在更清洁的场景中获取。不允许在患者和扫描仪之间存在异常的遮挡物,因此可以保证对象的完整性。
  5. 对象比例

    • 自然图像中不记录像素大小信息,因此无法通过自然图像中的对象区域来计算对象的实际大小。
    • 相反,在医学图像中,比例是基本信息,通常在文件头中提供像素间距和切片厚度的信息,这可以帮助我们将不同图像中的对象标准化到一个标准空间中。
  6. 对象类别

    • 在自然图像的分割任务中,对象的种类太多,无法精细定义。因此,对象被分配为粗略的类别。例如,图1中的"熊"是一个粗略的类别,可以被细化为"棕熊"或"北极熊"等。
    • 相反,人体器官已经被明确定义,医学图像中的每个分割区域都有明确的类别。

在上述六个方面,自然图像具有很多可能性。

这些方面的不确定性使得自然图像变化多样。

因此,包含相同类型对象的自然图像之间存在巨大差异。

另一方面,医学图像在这六个方面受到标准扫描设备、经过良好训练的放射科医生以及严格遵守扫描规范的患者的限制。

因此,在特定的分割任务中,医学图像的整体布局是标准和固定的。

这一特点使得医学图像之间的整体布局保持一致。

 


CS-DA 步骤


当涉及到2D图像时,通常有两个维度可以用于切割,例如横向和纵向。

  • 在图2a中,可以将2D视网膜血管图像切割成两个、三个和四个组件,具体取决于切割线的位置和数量。
  • 这些切割线将图像分割成不同的部分。

而在3D图像中,通常有三个维度可以用于切割,例如长度、宽度和高度。

  • 可以将3D脑图像切割成两个、三个、四个和八个组件,具体取决于切割线的位置和数量。
  • 这些切割线将3D图像分割成不同的体积或部分,以便进行进一步的分析或处理。

 

基于医学图像的区域互换性,本研究提出了CS-DA技术,包括两个步骤:切割图像成组件,以及将组件拼接成新图像。

1) 切割图像成组件

  • 在这一步骤中,将原始图像切割成多个组件。
  • 每个切割线是垂直于图像的某个维度,并穿过整个图像。
  • 同一维度中的n条切割线将图像分成(n+1)个相等的组件。
  • 在2D图像中有两个可以切割的维度,而3D图像有三个可以切割的维度。
  • 同一数据集中的所有图像都以相同的方式进行切割,因此从每个图像中切割出的组件数量是相同的。
  • 同样的方式也适用于其分割对象的掩模。

2) 将组件拼接成新图像

  • 这一步可以通过两种方法进行:正常拼接(NorS)和对称拼接(SymS)。
  1. 原始图像的特定位置组件用于填充新图像的相同位置区域(NorS):

    • 假设我们有两张原始医学图像,每张图像都代表同一个器官的不同部分。
    • 在NorS方法中,我们选择了第一张图像的特定位置的组件,并将其用于填充第二张图像的相同位置。
    • 例如,我们选择了第一张图像中的左侧肺部的组件,并将其用于填充第二张图像中的左侧肺部区域。
    • 这样,我们创建了一个新的医学图像,它具有与原始图像相同的整体布局,但使用了不同位置的组件。
  2. 原始图像的翻转组件用于填充新图像的对称位置区域(SymS):

    • 假设我们有一张原始医学图像,代表了一个具有对称结构的器官,如肺部。
    • 在SymS方法中,我们选择了原始图像中的特定位置的组件,并将其翻转后用于填充新图像的对称位置。
    • 例如,我们选择了原始图像中的左侧肺部的组件,并将其翻转后用于填充新图像的右侧肺部区域。
    • 由于人体的器官通常具有左右对称性,因此这种翻转操作是可行的,从而保持了图像的整体布局和对称性。

上图展示了由CS-DA创建的一些自然图像和医学图像。

自然图像整体布局的多样性使新图像异常。

新自然图像中对象的完整性被破坏。

相比之下,新医学图像看起来正常。

每个新医学图像都具有完整的对象。

这个过程允许利用医学图像的互换性来增加数据集的多样性,从而提高分割模型的性能。

 


确定增强后的数据数量

假设我们有一个原始数据集,其中包含两个不同的医学图像:

  • 图像 A 和图像 B。

每个原始图像都可以被切割成两个组件:

  • 左组件(-L)和右组件(-R)。
  1. 非对称情况(使用NorS方法):

    • 原始数据集中有两个图像,每个图像被切割成两个组件。
    • 因此,每个原始数据集中有 2 * 2 = 4 个组件。
    • 使用NorS方法,我们可以创建新图像,其中组件可以来自不同的原始图像。
    • 例如,我们可以将左组件(-L)从图像 A 和右组件(-R)从图像 B 组合在一起形成新图像 A-L+B-R。
    • 这个过程可以生成 4 个不同的新图像:A-L+B-R、A-L+A-R、B-L+B-R 和 B-L+A-R。
    • 因此,增强后的数据集样本大小是 4。
  2. 对称情况(使用SymS方法):

    • 同样,原始数据集中有两个图像,每个图像被切割成两个组件,总共有 2 * 2 = 4 个组件。
    • 使用SymS方法,我们可以创建新图像,其中左组件可以是原始图像的左组件或原始图像的翻转右组件。
    • 这个过程可以生成更多的新图像,因为对称性允许更多的组合。
    • 例如,我们可以创建新图像 B-L+A-R,其中左组件来自图像 B 的左组件,右组件来自图像 A 的右组件。
    • SymS方法可以生成更多的新图像选择,增强后的数据集样本大小是 NorS 方法的四倍,即 4 * 4 = 16。

总结

确定增强后的数据集样本大小的方法:

  1. 原始数据集大小: 根据原始数据集中包含的图像数量来确定。

  2. 组件数量: 根据每个原始图像可以切割成多少个组件来计算。

  3. 拼接方法: 根据使用的拼接方法来调整样本大小。

  4. 非对称情况: 如果使用NorS方法,增强后的数据集样本大小等于原始数据集大小乘以组件数量

  5. 对称情况: 如果使用SymS方法,增强后的数据集样本大小是NorS方法的四倍,即原始数据集大小乘以组件数量乘以4

 


代码复现

import cv2
import numpy as np# 定义NorS方法
def cs_da_nors(original_image, num_components):height, width, _ = original_image.shapecomponent_width = width // num_componentsnew_image = np.zeros_like(original_image)for i in range(num_components):start_x = i * component_widthend_x = (i + 1) * component_widthcomponent = original_image[:, start_x:end_x, :]new_image[:, start_x:end_x, :] = componentreturn new_image# 定义SymS方法
def cs_da_syms(original_image, num_components):height, width, _ = original_image.shapecomponent_width = width // num_componentsnew_image = np.zeros_like(original_image)for i in range(num_components):start_x = i * component_widthend_x = (i + 1) * component_widthcomponent = original_image[:, start_x:end_x, :]if i % 2 == 1:component = cv2.flip(component, 1)  # 翻转组件new_image[:, start_x:end_x, :] = componentreturn new_image# 使用NorS方法
original_image = cv2.imread("original_image.png")  # 假设加载原始图像
num_components = 4# 保存所有生成图像到文件
for i in range(num_components):augmented_image_nors = cs_da_nors(original_image, num_components)cv2.imwrite(f"augmented_image_nors_{i}.png", augmented_image_nors)# 使用SymS方法
num_components = 4# 保存所有生成图像到文件
for i in range(num_components):augmented_image_syms = cs_da_syms(original_image, num_components)cv2.imwrite(f"augmented_image_syms_{i}.png", augmented_image_syms)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242979.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H5嵌入小程序适配方案

时间过去了两个多月,2024已经到来,又老了一岁。头发也掉了好多。在这两个月时间里都忙着写页面,感觉时间过去得很快。没有以前那么轻松了。也不是遇到了什么难点技术,而是接手了一个很烂得项目。能有多烂,一个页面发起…

Vue2移动端项目使用$router.go(-1)不生效问题记录

目录 1、this.$router.go(-1) 改成 this.$router.back() 2、存储 from.path,使用 this.$router.push 3、hash模式中使用h5新增的onhashchange事件做hack处理 4、this.$router.go(-1) 之前添加一个 replace 方法 问题背景 : 在 Vue2 的一个移动端开发…

tag 标签

tag 标签 在使用 Git 版本控制的过程中,会产生大量的版本。如果我们想对某些重要版本进行记录,就可以给仓库历史中的某一个commit 打上标签,用于标识。 在本章中,我们将会学习如何列出已有的标签、如何创建和删除新的标签、以及…

【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 广度优先搜索 状态压缩 LeetCode847 访问所有节点的最短路径 存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号。 给你一个数组 graph 表示这个图。其中,graph[i] 是一个列…

数学建模学习笔记||层次分析法

评价类问题 解决评价类问题首先需要想到一下三个问题 我们评价的目标是什么我们为了达到这个目标有哪几种可行方案评价的准则或者说指标是什么 对于以上三个问题,我们可以根据题目中的背景材料,常识以及网上收集到的参考资料进行结合,从而筛…

问题:Feem无法发送信息OR无法连接(手机端无法发给电脑端)

目录 前言 问题分析 资源、链接 其他问题 前言 需要在小米手机、华为平板、Dell电脑之间传输文件,试过安装破解的华为电脑管家、小米的MIUI文件传输等,均无果。(小米“远程管理”ftp传输倒是可以,但速度太慢了,且…

js实现九九乘法表

效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script type"text/javascript">// 输出乘法口诀表// document.write () 空格 " " 换行…

java黑马学习笔记

数组 变量存在栈中&#xff0c;变量值存放在堆中。 数组反转 public class test{public static void main(String[] args){//目标&#xff1a;完成数组反转int[] arr {10,20,30,40,50};for (int i 0,j arr.length - 1;i < j;i,j--){int tep arr[j]; //后一个值赋给临时…

微前端-无界wujie

无界微前端方案基于 webcomponent 容器 iframe 沙箱&#xff0c;能够完善的解决适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户的核心诉求。 主项目安装无界 vue2项目&#xff1a;npm i wujie-vue2 -S vue3项目…

wayland(xdg_wm_base) + egl + opengles 最简实例

文章目录 前言一、ubuntu 下相关环境准备1. 获取 xdg_wm_base 依赖的相关文件2. 查看 ubuntu 上安装的opengles 版本3. 查看 weston 所支持的 窗口shell 接口种类二、xdg_wm_base 介绍三、egl_wayland_demo1.egl_wayland_demo2_0.c2.egl_wayland_demo3_0.c3. xdg-shell-protoco…

深耕文档型数据库12载,SequoiaDB再开源

1月15日&#xff0c;巨杉数据库举行SequoiaDB新特性及开源项目发布活动。本次活动回顾了巨杉数据库深耕JSON文档型数据库12年的发展历程与技术演进&#xff0c;全面解读了SequoiaDB包括在高可用、安全、实时、易用性四个方向的技术特性&#xff0c;宣布了2024年面向技术社区的开…

Qt事件过滤

1.相关说明 监控鼠标进入组件、出组件、点击组件、双击组件的事件&#xff0c;需要重写eventFilter函数 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-&…

Vue——计算属性

文章目录 计算属性computed 计算属性 vs methods 方法计算属性完整写法 综合案例&#xff1a;成绩案例 计算属性 概念&#xff1a;基于现有的数据&#xff0c;计算出来的新属性。依赖的数据变化&#xff0c;自动重新计算 语法: ①声明computed配置项中&#xff0c;一个计算属性…

Mac NTFS 磁盘读写工具选哪个好?Tuxera 还是 Paragon?

在使用 Mac 电脑时&#xff0c;我们经常需要读写 NTFS 格式的硬盘或 U 盘。然而&#xff0c;由于 Mac 系统不支持 NTFS 格式的读写&#xff0c;因此我们需要借助第三方工具来实现这个功能。而在市场上&#xff0c;Tuxera 和 Paragon 是两款备受推崇的 Mac NTFS 磁盘读写工具。那…

C++入门学习(八)sizeof关键字

sizeof 是 C 和 C 中的一个运算符&#xff0c;用于确定特定类型或对象的内存大小&#xff08;以字节为单位&#xff09;。 1、查看数据类型占据内存大小 #include <iostream> using namespace std; int main() {short a 1;int b 1;long c 1;long long d 1;cout<…

超级菜鸟怎么学习数据分析?

如果你有python入门基础&#xff0c;在考虑数据分析岗&#xff0c;这篇文章将带你了解&#xff1a;数据分析人才的薪资水平&#xff0c;数据人应该掌握的技术栈。 首先来看看&#xff0c;我在搜索数据分析招聘时&#xff0c;各大厂开出的薪资&#xff1a; 那各大厂在数据领域…

论文阅读_CogTree_推理的认知树

英文名称: From Complex to Simple: Unraveling the Cognitive Tree for Reasoning with Small Language Models中文名称: 从复杂到简单&#xff1a;揭示小型语言模型推理的认知树链接: http://arxiv.org/abs/2311.06754v1代码: https://github.com/alibaba/EasyNLP作者: Junbi…

Unity学习-逐帧图集动画制作

首先在文件部分创建一个Sprite Library Asset 然后点击创建出来的文件 点下面的加号添加对应的图 添加完成之后点一下Apply 然后新建一个物体 添加这三个组件 其中SpriteLibrary里面 把你刚刚创建的图集文件拉过来 Sprite Resolver选择对应的动作和图片 然后开始制作动画 An…

Jupyter-Notebook无法创建ipynb文件

文章目录 概述排查问题恢复方法参考资料 概述 用户反馈在 Notebook 上无法创建 ipynb 文件&#xff0c;并且会返回以下的错误。 报错的信息是: Unexpected error while saving file: Untitled5.ipynb attempt to write a readonly database 排查问题 这个是一个比较新的问…

项目解决方案:某城区(区县)社会面视频监控资源接入汇聚解决方案

目 录 一、概述 二、建设目标及需求 1.建设目标 2.需求分析 2.1 总体需求 2.2 需求细化 三、方案设计 1.设计依据 2.设计原则 3.设计方案 3.1.方案描述 3.2.组网说明 四、产品介绍 1.视频监控综合资源管理平台介绍 2.视频录像服务器和存储 2.1…