医学图像的数据增强技术 --- 切割-拼接数据增强(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.shape
    component_width = width // num_components
    new_image = np.zeros_like(original_image)

    for i in range(num_components):
        start_x = i * component_width
        end_x = (i + 1) * component_width
        component = original_image[:, start_x:end_x, :]
        new_image[:, start_x:end_x, :] = component

    return new_image

# 定义SymS方法
def cs_da_syms(original_image, num_components):
    height, width, _ = original_image.shape
    component_width = width // num_components
    new_image = np.zeros_like(original_image)

    for i in range(num_components):
        start_x = i * component_width
        end_x = (i + 1) * component_width
        component = original_image[:, start_x:end_x, :]
        if i % 2 == 1:
            component = cv2.flip(component, 1)  # 翻转组件
        new_image[:, start_x:end_x, :] = component

    return 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.mfbz.cn/a/339516.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用pytorch的Dataset, 来定义自己的Dataset

Dataset与DataLoader的关系 Dataset: 构建一个数据集,其中含有所有的数据样本DataLoader:将构建好的Dataset,通过shuffle、划分batch、多线程num_workers运行的方式,加载到可训练的迭代容器。 import torch from torch.utils.dat…

HYBBS 表白墙网站PHP程序源码 可封装成APP

源码介绍 PHP表白墙网站源码,可以做校园内的,也可以做校区间的,可封装成APP。告别QQ空间的表白墙吧。 安装PHP5.6以上随意 上传程序安装,然后设置账号密码,登陆后台切换模板手机PC都要换开启插件访问前台。 安装完…

IS-IS:01 ISIS基本配置

这是实验拓扑,下面是基本配置: R1: sys sysname R1 user-interface console 0 idle-timeout 0 0 int loop 0 ip add 1.1.1.1 24 int g0/0/0 ip add 192.168.12.1 24 qR2: sys sysname R2 user-interface console 0 idle-timeout 0 0 int loop 0 ip add …

Python Web 开发之 Flask 入门实践

导语:Flask 是一个轻量级的 Python Web 框架,广受开发者喜爱。本文将带领大家了解 Flask 的基本概念、搭建一个简单的 Web 项目以及如何进一步扩展功能。 一、Flask 简介 Flask 是一个基于 Werkzeug 和 Jinja2 的微型 Web 框架,它的特点是轻…

万物简单AIoT 端云一体实战案例学习 之 快速开始

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 物联网具有场景多且复杂、链路长且开发门槛高等特点,让很多想学习或正在学习物联网的学生或开发者有点不知所措,甚至直接就放弃了。    万物简单AIoT物联网教育…

批量修改拓展名的方法

新建一个文本文档 输入ren *(.你需要更改的拓展名)*.(更改后的拓展名) 注意:*前面要有空格, txt前面有一个 ". "如上图所示 注意:这个文件建在你需要更改拓展名的文件夹,此文件夹中的所有的txt…

深度学习记录--指数加权平均

指数加权移动平均(exponentially weighted moving averages) 如何对杂乱的数据进行拟合? 通过指数加权平均可以把数据图近似拟合成一条曲线 公式: 其中表示第t个平均数,表示第t-1个平均数,表示第t个数据,表示变化参数…

蚂蚁数科CTO王维首次公开亮相:进一步拓展数据相关技术布局

“AI与数据是相生相伴的共同体,高质量的行业数据才能使大模型在产业发挥更大价值。蚂蚁数科将进一步拓展数据相关技术的布局,以加速产业数字化迈入下一阶段。”1月19日,王维首次以蚂蚁数科CTO的身份亮相媒体沟通会。 数据是数字时代的“新石…

【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

针对Java对象压缩及序列化技术的探索之路 序列化和反序列化为何需要有序列化呢?Java实现序列化的方式二进制格式 指定语言层级二进制格式 跨语言层级JSON 格式化类JSON格式化:XML文件格式化 序列化的分类在速度的对比上一般有如下规律:Java…

如何优雅的实现前端国际化?

JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库! i18next i18next 是一个用 JavaScript 编写的全面的国际化框架…

ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)

1、下载Ubuntu Index of /releaseshttps://old-releases.ubuntu.com/releases/ 2、下载VMware 官方正版VMware下载(16 pro):https://www.aliyundrive.com/s/wF66w8kW9ac 下载Linux系统镜像(阿里云盘不限速)&#xff…

[数据结构 - C++] 红黑树RBTree

文章目录 1、前言2、红黑树的概念3、红黑树的性质4、红黑树节点的定义5、红黑树的插入Insert6、红黑树的验证7、红黑树与AVL树的比较附录: 1、前言 我们在学习了二叉搜索树后,在它的基础上又学习了AVL树,知道了AVL树是靠平衡因子来调节左右高…

Mybatis之关联

一、一对多关联 eg:一个用户对应多个订单 建表语句 CREATE TABLE t_customer (customer_id INT NOT NULL AUTO_INCREMENT, customer_name CHAR(100), PRIMARY KEY (customer_id) ); CREATE TABLE t_order ( order_id INT NOT NULL AUTO_INCREMENT, order_name C…

git克隆/拉取报错过早的文件结束符(EOF)的原因及解决

近期使用git拉取仓库的时候,拉取了好几次都不行,总是反馈说过早的文件结束符 总是这样,当然我的报错信息并没有描述完整,因为在我检索此类问题的时候,我发现有好多种所谓的过早的文件结束符这样的报错,但是…

机器学习实验报告——EM算法

目录 一、算法介绍 1.1算法背景 1.2算法引入 1.3算法假设 1.4算法原理 1.5算法步骤 二、算法公式推导 2.1数学基础 2.2EM算法推导 三、算法实现 3.1关于EM聚类 3.2EM工具包的使用 3.3 实例测试 四、算法讨论 4.1EM算法的优缺点 4.2EM算法的应用 4.3对于EM算法…

RT Thread Stdio生成STM32L431RCT6无法启动问题

一、问题现象 使用RT thread Stdio生成STM32L431RCT6工程后,编译下载完成后系统无法启动,无法仿真debug; 二、问题原因 如果当前使用的芯片支持包版本为0.2.3,可能是这个版本问题,目前测试0.2.3存在问题&#xff0c…

【51单片机】外部中断

0、前言 参考&#xff1a;普中 51 单片机开发攻略 第16章 及17章 1、硬件 2、软件 #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit led P2^0; sbit key3 P3^2;//外部中断…

晨控CK-FR03-EC与欧姆龙NX系列EtherCAT通讯连接说明手册

晨控CK-FR03-EC与欧姆龙NX系列EtherCAT通讯连接说明手册 晨控CK-FR03-EC是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…

机器学习周记(第二十六周:文献阅读-DPGCN)2024.1.15~2024.1.21

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文摘要 1.3 论文背景 2 论文模型 2.1 问题描述 2.2 论文模型 2.2.1 时间感知离散图结构估计&#xff08;Time-aware Discrete Graph Structure Estimation Module&#xff0c;TADG Module&#xff09; 2.2.2 时间…

HNU-数据挖掘-实验2-数据降维与可视化

数据挖掘课程实验实验2 数据降维与可视化 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验2 数据降维与可视化实验背景实验目标实验数据集说明实验参考步骤实验过程1.对数据进行初步降维2.使用无监督数据降维方法&#xff0c;比如PCA&#xff0c;I…
最新文章