【医学图像数据增强】切割-拼接(CS-DA)

切割-拼接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:

上图展示了由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/347722.html

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

相关文章

Git 教程 | 将本地修改后的文件推送到 Github 指定远程分支上

Git 是一种分布式版本控制系统,用于敏捷高效地处理任何大小的项目。它是由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的开源版本控制软件。Git 的本地克隆就是一个完整的版本控制存储库,无论脱机还是远程都能轻松工作。开发人员会在本地提交其工…

Maven进阶

学习目标 理解分模块开发的意义 能够使用聚合工程快速构建项目 能够使用继承简化项目配置 能够根据需求配置生产、开发、测试环境,并在各环境间切换运行 一、分模块开发与设计 1. 分模块开发的意义 问题导入 分模块开发对工程有什么好处? 模块拆分原…

接口测试时遇到接口加密了该如何处理?

对明文编码生成信息摘要,以防止被篡改。比如MD5使用的是Hash算法,无论多长的输入,MD5都会输出长度为128bits的一个串。摘要算法不要秘钥,客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。 对称加密 对称加密…

VM下Unbunt虚拟机上网设置

系列文章目录 VM下Unbunt虚拟机上网设置 VM虚拟机上网设置 系列文章目录一、VM虚拟机上网设置 一、VM虚拟机上网设置 右击VM软件中你需要设置的虚拟机,选择设置 宿主机如果你用的是笔记本外加WIFI连接选择NAT网络模式 进入虚拟机看能否上网 不行的话,进…

计算机速成课Crash Course - 23. 屏幕 2D 图形显示

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞! 计算机速成课Crash Course - 23. 屏幕& 2D 图形显示 (qq.com) 23. 屏幕& 2D 图形显示 这台…

【Go 快速入门】安装 Go 语言 | 开发工具 Goland | 第一个 Go 语言程序

文章目录 前言安装 Go 语言编译器 Goland运行 Go 程序补充 前言 本系列教程,目的是帮助一个有其他编程基础的 Go 语言小白快速入门 Go 语言,而非启发式学习。每篇幅保证不说废话,尽可能精炼总结,为上手后续的 Go 相关项目打下基础…

目标检测数据集 - 抽烟检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:抽烟检测数据集,真实合成场景高质量图片数据,涉及场景丰富,比如街景抽烟、写字楼抽烟、办公室抽烟、楼道抽烟、遮挡行人抽烟、严重遮挡行人抽烟数据;适用实际项目应用:公共场所监控或室内监控场…

2024年,每个人都应该知道的10个免费学习资源网站

在这个数字化的时代,有着许多宝贵的网络资源,提供了无限的学习机会,为每个人敞开了免费获取知识的大门。但很多人不知道它们的存在。今天分享10个免费且丰富的学习资源网站,希望对大家所有帮助。 1.freeCodeCamp 您可以免费学习…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团(证券代码:0022…

支持向量机(Support Vector Machines)(需要优化)

1.优化目标 一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大…

利用C语言实例描述程序中的内聚和耦合

编程时,我们讲究的是高内聚低耦合,在协同开发、代码移植、维护等环节都起到很重要的作用。 一、原理篇 而低耦合,是指模块之间尽可能的使其独立存在,模块之间不产生联系不可能,但模块与模块之间的接口应该尽量少而简单…

从零学习Hession RPC

为什么学习Hessian RPC? 存粹的RPC,只解决PRC的四个核心问题(1.网络通信2.协议 3.序列化 4.代理)Java写的HessianRPC落伍了,但是它的序列化方式还保存着,被Dubbo(Hessian Lite)使用。 被落伍,只…

浅谈DNS的工作原理及其作用

DNS,全称为Domain Name System,即域名系统,是一种用于将域名和IP地址相互映射的分布式数据库系统。它将可读的域名转换为对应的IP地址,使得用户可以更方便地通过域名来访问网络上的资源。今天锐成就简单探讨一下DNS的工作原理及其…

Android网络状态差的处理方案

1,在没有网络的情况下的处理 相信大家面对这个情况处理起来是毫无压力的. //有网 if (Utils.isNetworkConnected(this)) {loadingView.setVisibility(View.VISIBLE);//显示正在加载//联网获取数据getDataFromNet(); } else {//没网直接显示本地数据.showView();Toast.makeTex…

Ubuntu20.04 安装 ROS noetic + MAVROS

本文在 AlphaCatOvO【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程 基础上,根据实际安装经验,稍微进行补充。 一、安装Ubuntu20.04 假设已经正确安装。 二、安装 ROS noetic 2.1 换源 执行 sudo apt update sudo mv /etc/apt/sources.list /etc/apt/…

C++代码入门07 函数调用语句

图源:文心一言 听课笔记简单整理,包括以下内容”🐋3.2 二进制转十进制、🐋3.3 数学公式1:用反切函数表示pi、🐋3.4 判断回文数、🐋3.5 数学公式2:分段函数、🐋3.6 扔骰子…

容器安全工具

容器安全工具是用于保护和监控容器环境安全的工具。它们提供了一系列功能,包括容器镜像的漏洞扫描、运行时监控、事件日志记录、访问控制、运行权限管理等。以下是一些常见的容器安全工具: 1. Docker Bench Security:用于检查Docker环境配置的安全性,提供一些最佳实践建议…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第二天-ARM汇编(物联技术666)

链接:https://pan.baidu.com/s/1bG0tuVaACATvjLwD05j1FQ?pwd1688 提取码:1688 上午:ARM编程模型 下午:常用ARM指令 教学内容: 1、ARM数据类型 字节(Byte):在ARM体系结构及常见的…

无限可能!安全狗入选“潜力十强企业”

近日,等级保护测评公布了“2023年网络安全优秀评选”活动评选结果。 作为国内云原生安全领导厂商,安全狗凭借突出的综合实力,荣获“潜力十强企业”称号。 厦门服云信息科技有限公司(品牌名:安全狗)创办于…

redis-发布缓存

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可…