医学图像的数据增强技术 --- 切割-拼接数据增强(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…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...