医学图像的数据增强技术 --- 切割-拼接数据增强(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所示,摄像机可以位于熊的对面或熊的下方。
- 然而,在临床医学中,扫描仪或其他图像获取设备的方向是固定的。例如,肺部X光图像都是在后前位进行扫描的。
-
对象姿势
- 自然场景中的对象在拍摄过程中可以处于任何姿势。例如,在图1中,熊可以玩球或游泳。
- 而在扫描过程中,患者必须保持特定的姿势。对于无法自控的年幼儿童,放射科医生甚至会使用辅助设备或镇静剂来固定他们的身体。因此,扫描的器官在医学图像上也保持特定的形状。
-
对象位置
- 在自然场景中,摄影师会根据自己的布局思想来安排对象在自然图像中的位置。自然图像的布局设计没有固定的模式,因此对象的位置总是随机的。
- 在临床医学中,放射科医生会调整扫描仪以确保器官位于图像的中心或特定位置。
-
对象完整性
- 自然场景复杂多变,有时在对象和摄像机之间会有遮挡物,阻止对象完全显示在自然图像中。例如,图1中的熊的部分身体被池塘中的水阻挡。
- 医学图像在更清洁的场景中获取。不允许在患者和扫描仪之间存在异常的遮挡物,因此可以保证对象的完整性。
-
对象比例
- 自然图像中不记录像素大小信息,因此无法通过自然图像中的对象区域来计算对象的实际大小。
- 相反,在医学图像中,比例是基本信息,通常在文件头中提供像素间距和切片厚度的信息,这可以帮助我们将不同图像中的对象标准化到一个标准空间中。
-
对象类别
- 在自然图像的分割任务中,对象的种类太多,无法精细定义。因此,对象被分配为粗略的类别。例如,图1中的"熊"是一个粗略的类别,可以被细化为"棕熊"或"北极熊"等。
- 相反,人体器官已经被明确定义,医学图像中的每个分割区域都有明确的类别。
在上述六个方面,自然图像具有很多可能性。
这些方面的不确定性使得自然图像变化多样。
因此,包含相同类型对象的自然图像之间存在巨大差异。
另一方面,医学图像在这六个方面受到标准扫描设备、经过良好训练的放射科医生以及严格遵守扫描规范的患者的限制。
因此,在特定的分割任务中,医学图像的整体布局是标准和固定的。
这一特点使得医学图像之间的整体布局保持一致。
CS-DA 步骤
当涉及到2D图像时,通常有两个维度可以用于切割,例如横向和纵向。
- 在图2a中,可以将2D视网膜血管图像切割成两个、三个和四个组件,具体取决于切割线的位置和数量。
- 这些切割线将图像分割成不同的部分。
而在3D图像中,通常有三个维度可以用于切割,例如长度、宽度和高度。
- 可以将3D脑图像切割成两个、三个、四个和八个组件,具体取决于切割线的位置和数量。
- 这些切割线将3D图像分割成不同的体积或部分,以便进行进一步的分析或处理。
基于医学图像的区域互换性,本研究提出了CS-DA技术,包括两个步骤:切割图像成组件,以及将组件拼接成新图像。
1) 切割图像成组件
- 在这一步骤中,将原始图像切割成多个组件。
- 每个切割线是垂直于图像的某个维度,并穿过整个图像。
- 同一维度中的n条切割线将图像分成(n+1)个相等的组件。
- 在2D图像中有两个可以切割的维度,而3D图像有三个可以切割的维度。
- 同一数据集中的所有图像都以相同的方式进行切割,因此从每个图像中切割出的组件数量是相同的。
- 同样的方式也适用于其分割对象的掩模。
2) 将组件拼接成新图像
- 这一步可以通过两种方法进行:正常拼接(NorS)和对称拼接(SymS)。
-
原始图像的特定位置组件用于填充新图像的相同位置区域(NorS):
- 假设我们有两张原始医学图像,每张图像都代表同一个器官的不同部分。
- 在NorS方法中,我们选择了第一张图像的特定位置的组件,并将其用于填充第二张图像的相同位置。
- 例如,我们选择了第一张图像中的左侧肺部的组件,并将其用于填充第二张图像中的左侧肺部区域。
- 这样,我们创建了一个新的医学图像,它具有与原始图像相同的整体布局,但使用了不同位置的组件。
-
原始图像的翻转组件用于填充新图像的对称位置区域(SymS):
- 假设我们有一张原始医学图像,代表了一个具有对称结构的器官,如肺部。
- 在SymS方法中,我们选择了原始图像中的特定位置的组件,并将其翻转后用于填充新图像的对称位置。
- 例如,我们选择了原始图像中的左侧肺部的组件,并将其翻转后用于填充新图像的右侧肺部区域。
- 由于人体的器官通常具有左右对称性,因此这种翻转操作是可行的,从而保持了图像的整体布局和对称性。
上图展示了由CS-DA创建的一些自然图像和医学图像。
自然图像整体布局的多样性使新图像异常。
新自然图像中对象的完整性被破坏。
相比之下,新医学图像看起来正常。
每个新医学图像都具有完整的对象。
这个过程允许利用医学图像的互换性来增加数据集的多样性,从而提高分割模型的性能。
确定增强后的数据数量
假设我们有一个原始数据集,其中包含两个不同的医学图像:
- 图像 A 和图像 B。
每个原始图像都可以被切割成两个组件:
- 左组件(-L)和右组件(-R)。
-
非对称情况(使用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。
-
对称情况(使用SymS方法):
- 同样,原始数据集中有两个图像,每个图像被切割成两个组件,总共有 2 * 2 = 4 个组件。
- 使用SymS方法,我们可以创建新图像,其中左组件可以是原始图像的左组件或原始图像的翻转右组件。
- 这个过程可以生成更多的新图像,因为对称性允许更多的组合。
- 例如,我们可以创建新图像 B-L+A-R,其中左组件来自图像 B 的左组件,右组件来自图像 A 的右组件。
- SymS方法可以生成更多的新图像选择,增强后的数据集样本大小是 NorS 方法的四倍,即 4 * 4 = 16。
总结:
确定增强后的数据集样本大小的方法:
-
原始数据集大小: 根据原始数据集中包含的图像数量来确定。
-
组件数量: 根据每个原始图像可以切割成多少个组件来计算。
-
拼接方法: 根据使用的拼接方法来调整样本大小。
-
非对称情况: 如果使用NorS方法,增强后的数据集样本大小等于
原始数据集大小
乘以组件数量
。 -
对称情况: 如果使用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)
相关文章:

医学图像的数据增强技术 --- 切割-拼接数据增强(CS-DA)
医学图像的新型数据增强技术 CS-DA 核心思想自然图像和医学图像之间的关键差异CS-DA 步骤确定增强后的数据数量 代码复现 CS-DA 核心思想 论文链接:https://arxiv.org/ftp/arxiv/papers/2210/2210.09099.pdf 大多数用于医学分割的数据增强技术最初是在自然图像上开…...

git克隆/拉取报错过早的文件结束符(EOF)的原因及解决
近期使用git拉取仓库的时候,拉取了好几次都不行,总是反馈说过早的文件结束符 总是这样,当然我的报错信息并没有描述完整,因为在我检索此类问题的时候,我发现有好多种所谓的过早的文件结束符这样的报错,但是…...
【ARM 嵌入式 编译系列 2.5 -- GCC 编译参数学习 --specs=nano.specs选项 】
请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 概述nano.specs示例使用注意事项问题总结概述 ARM 工具链 (arm-none-eabi-) 包括了一个叫作 --specs 的编译器和链接器选项,这个选项允许用户指定一个或多个 “specs” 文件,以影响编译或链接阶段的行为。Sp…...
C语言大师(5)构造函数和析构函数
引言 在C的面向对象编程中,构造函数和析构函数扮演着至关重要的角色。它们分别管理对象的初始化和销毁过程,确保资源的有效分配和释放。了解这些函数如何工作,对于编写高效和可靠的C程序至关重要。 1. 构造函数 构造函数在每次创建类的新对…...

安全审查常见要求
一、是否有密码复杂度策略、是否有密码有效期 1)密码长度至少8位; 2)要求用户密码必须包含大小写字母、数字、特殊字符 3)避免常见密码 123456,qwerty, password; 4) 强制用户定期修改密码; 5&#x…...

最新 生成pdf文字和表格
生成pdf文字和表格 先看效果 介绍 java项目,使用apache的pdfbox工具,可分页,自定义列 依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.22<…...

安全基础~攻防特性3
文章目录 SSTI(模板注入)1. 简介2. 成因3. 常见框架存在注入4. 判断存在SSTI SSTI(模板注入) 1. 简介 (Server-Side Template Injection) 服务端模板注入 1、使用框架(MVC的模式),如python的flask,php的tp,java的sp…...

Windows7关闭谷歌浏览器提示“若要接收后续 Google Chrome 更新,您需使用 Windows 10 或更高版本”的方法
背景 电脑比较老,系统一直没有更新,硬件和软件版本如下: 操作系统版本:Windows7 企业版 谷歌浏览器版本:109.0.5414.120(正式版本) (64 位) 该版本的谷歌浏览器是支持…...

[一]ffmpeg音视频解码
[一]ffmpeg音视频解码 一.编译ffmpeg1.安装vmware虚拟机2.vmware虚拟机安装linux操作系统3.安装ftp和fshell软件4.在Ubuntu(Linux)中编译Android平台的FFmpeg( arm和x86 )5.解压FFmpeg6.Android编译脚本(1)…...

k8s-认证授权 14
Kubernetes的认证授权分为认证(鉴定用户身份)、授权(操作权限许可鉴别)、准入控制(资源对象操作时实现更精细的许可检查)三个阶段。 Authentication(认证) 认证方式现共有8种&…...

在全志H616核桃派上实现USB摄像头的OpenCV颜色检测
在给核桃派开发板用OpenCV读取图像并显示到pyqt5的窗口上并加入颜色检测功能,尝试将图像中所有蓝色的东西都用一个框标记出来。 颜色检测核心api 按照惯例,先要介绍一下opencv中常用的hsv像素格式。颜色还是那个颜色,只是描述颜色用的参数变…...

mac安装部署gitbook教程
mac安装部署gitbook教程 前言一、安装准备二、GitBook安装三、项目初始化 前言 一些自己实际操作的记录。 一、安装准备 Node.js gitbook基于Node.js,所以需要提前安装。 下载地址:https://nodejs.org/en/,可以下载比较新的版本。(但我的建议…...

有关软件测试的,任何时间都可以,软件测试主要服务项目:测试用例 报告 计划
有关软件测试的,任何时间都可以,软件测试主要服务项目: 1. 测试用例 2. 测试报告 3. 测试计划 4. 白盒测试 5. 黑盒测试 6. 接口测试 7.自动…...

快乐过寒假,安全不放假
寒假将至,春节即来,为了使孩子们过上一个平安、快乐、文明、祥和、健康、有益的寒假和春节,在共青团永宁县委员会、永宁县望洪镇人民政府的大力支持下,在永宁新华中心村校外少工委的积极配合下,1月20日下午宁夏妇女儿童…...
qt学习:模仿qq界面+添加资源+无边框界面+修改样式
目录 一,创建登录ui界面类 LoginWidget 二,添加图片资源 三,通过样式的方法将图片设置成圆圈的背景 四,新建登录后的ui界面 MWindow 简陋的就可以,因为只为了学习,可以自己补充 五,新建三个嵌套ui界面类,ChatWidget聊天界面 FriendWiidget好友界面 CollectW…...

【Linux】基本指令收尾
文章目录 日期查找打包压缩系统信息Linux和Windows互传文件 日期 这篇是基本指令的收尾了,还有几个基本指令我们需要说一下 首先是Date,它是用来显示时间和日期 直接输入date的话显示是有点不好看的,所以我们可以根据自己的喜欢加上分隔符&…...

精准核酸检测 - 华为OD统一考试
OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。 现在根据传染病流调以及大数据分析&a…...

LINUX文件fd(file descriptor)文件描述符
目录 1.文件接口 1.1open 1.2C语言为什么要对open进行封装 2.fd demo代码 第一个问题 第二个问题 打开文件流程 引言:在学习C语言的时候,我们见过很多的文件的接口,例如fopen,fwrite,fclose等等,但…...
SpringMVC 的理解
MVC MVC(Model-View-Controller)是一种软件设计模式,用于实现用户界面。它将应用程序划分为三个互相交互的部分,以分离内部逻辑表示和表现层。这种分离有助于管理复杂的应用程序,因为它允许开发者单独修改模型、视图或…...

SpringBoot 3.1.7 集成Sentinel
一、背景 我的项目需要引入限流,降级,熔断框架,由于 Spring Cloud 2022.0.4 已经不再支持 Hystrix,Spring Cloud 提供了替代方案,如 Resilience4j,可以使用它来替换 Hystrix。但是网上搜了一下国内Resilie…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...