当前位置: 首页 > news >正文

图像数据增强方法概述

图像数据增强方法概述

  • 1. 什么是图像数据增强技术?
  • 2. 图像数据增强技术分类
    • 2.1 几何变换
          • Python 示例代码
    • 2.2 颜色变换
    • 2.3 噪声添加
  • 3. 参考文献

1. 什么是图像数据增强技术?

  • 基础概念:图像增强技术是计算机视觉和图像处理领域中的一个关键技术,主要用于改善图像的质量或者使其更适合后续的图像分析任务。通过对原始图像进行一系列变换,生成新的图像样本,从而增加训练数据集的多样性和丰富性,最终提升机器学习模型的性能和鲁棒性。
  • 相关应用:帮助模型学习到更广泛的数据特征,有效避免过拟合问题,使模型在面对未见过的数据时表现得更加稳健。在深度学习领域,特别是在卷积神经网络(CNN)的应用中,图像增强已经成为了一个标准的预处理步骤,极大地促进了模型的泛化能力和准确性。

对于图片数据集数量和种类较少的应用场景更加有效

2. 图像数据增强技术分类

2.1 几何变换

定义:几何变换是图像数据增强中最基本且常用的方法。其主要目的是通过修改图像的空间结构,来生成新的样本。这类方法可以使模型更加鲁棒,适应不同的物体位置和方向。

  • 旋转:旋转是指将图像围绕其中心点进行旋转,可以模拟不同角度的视图,从而使模型对物体在不同方向上的表现更加稳定。

  • 平移:平移是将图像在水平方向或垂直方向上移动一定的像素。平移操作可以帮助模型学习到物体在不同位置的特征。

  • 缩放:缩放是指改变图像的大小。缩放可以使模型适应不同尺寸的物体,增强其对比例变化的鲁棒性。

  • 翻转:翻转是将图像进行水平或垂直翻转。翻转操作可以帮助模型学习到镜像对称的特征。

在这里插入图片描述

Python 示例代码
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('img.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 定义几何变换
def augment_geometric(image):# 旋转rows, cols, _ = image.shapeangle = 30  # 旋转角度M_rotate = cv2.getRotationMatrix2D((cols / 2, rows / 2), angle, 1)rotated = cv2.warpAffine(image, M_rotate, (cols, rows))# 平移M_translate = np.float32([[1, 0, 50], [0, 1, 50]])  # 水平和垂直平移50像素translated = cv2.warpAffine(image, M_translate, (cols, rows))# 翻转flipped = cv2.flip(image, 1)  # 水平翻转return rotated, translated, flipped# 进行增强
rotated_image, translated_image, flipped_image = augment_geometric(image)# 可视化
plt.figure(figsize=(12, 8))plt.subplot(2, 2, 1)
plt.title('Original Image')
plt.imshow(image)
plt.axis('off')plt.subplot(2, 2, 2)
plt.title('Rotated Image (30 degrees)')
plt.imshow(rotated_image)
plt.axis('off')plt.subplot(2, 2, 3)
plt.title('Translated Image')
plt.imshow(translated_image)
plt.axis('off')plt.subplot(2, 2, 4)
plt.title('Flipped Image')
plt.imshow(flipped_image)
plt.axis('off')plt.tight_layout()
plt.show()

2.2 颜色变换

定义:颜色变换是通过改变图像的颜色特性来增强图像数据。这类方法主要包括亮度调整、对比度调整、饱和度调整和色相调整等。颜色变换能够帮助模型适应不同光照条件和色彩变化。

  • 亮度调整:亮度调整是通过增加或减少图像的亮度值来改变图像的整体亮度。此方法可以模拟不同的光照条件。

  • 对比度调整:对比度调整是通过改变图像中亮度值的分布来增强图像的对比度。提高对比度可以使得图像中的细节更加清晰。

  • 饱和度调整:饱和度调整是通过改变颜色的饱和程度来影响图像的色彩表现。增加饱和度可以使颜色更加鲜艳,而降低饱和度则会使颜色趋向灰色。

  • 色相调整:色相调整是通过改变颜色的色相值来改变图像的整体色调。此方法可以用来生成不同色彩风格的图像。
    在这里插入图片描述

Python 示例代码

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('image.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 定义颜色变换
def augment_color(image):# 亮度调整bright = cv2.convertScaleAbs(image, alpha=1, beta=50)  # alpha=1保持亮度,beta增加亮度# 对比度调整contrast = cv2.convertScaleAbs(image, alpha=2, beta=0)  # alpha>1增加对比度# 饱和度调整hsv = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)  # 转换到HSV颜色空间hsv[..., 1] = hsv[..., 1] * 1.5  # 增加饱和度saturated = cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB)  # 转回RGB颜色空间return bright, contrast, saturated# 进行增强
bright_image, contrast_image, saturated_image = augment_color(image)# 可视化
plt.figure(figsize=(12, 8))plt.subplot(2, 2, 1)
plt.title('Original Image')
plt.imshow(image)
plt.axis('off')plt.subplot(2, 2, 2)
plt.title('Brightness Adjusted')
plt.imshow(bright_image)
plt.axis('off')plt.subplot(2, 2, 3)
plt.title('Contrast Adjusted')
plt.imshow(contrast_image)
plt.axis('off')plt.subplot(2, 2, 4)
plt.title('Saturation Adjusted')
plt.imshow(saturated_image)
plt.axis('off')plt.tight_layout()
plt.show()

2.3 噪声添加

噪声添加是通过在图像中引入随机噪声来增强数据。这种方法可以帮助模型提高对噪声干扰的鲁棒性,模拟真实场景中可能出现的干扰。

  • 高斯噪声:高斯噪声是常见的噪声类型,其分布服从高斯分布。添加高斯噪声可以模拟传感器噪声。

  • 椒盐噪声:椒盐噪声是指图像中随机出现的亮点(盐)和暗点(胡椒),这种噪声可以模拟图像传输中的干扰。

  • 泊松噪声:泊松噪声通常用于模拟光子计数过程中的噪声,特别是在低光照条件下。

还可以是图像压缩噪声等等,这里不再一一介绍
在这里插入图片描述

Python 示例代码

def augment_noise(image):# 添加高斯噪声gauss = np.random.normal(0, 25, image.shape).astype(np.uint8)noisy_gauss = cv2.add(image, gauss)# 添加盐和胡椒噪声s_vs_p = 0.5amount = 0.04out = np.copy(image)# Salt noisenum_salt = np.ceil(amount * image.size * s_vs_p)coords = [np.random.randint(0, i - 1, int(num_salt))for i in image.shape]out[coords] = 1# Pepper noisenum_pepper = np.ceil(amount* image.size * (1. - s_vs_p))coords = [np.random.randint(0, i - 1, int(num_pepper))for i in image.shape]out[coords] = 0return noisy_gauss, out# 进行增强
noisy_gauss, noisy_sp = augment_noise(image)# 可视化
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.title('Gaussian Noise Added')
plt.imshow(noisy_gauss)
plt.axis('off')plt.subplot(1, 2, 2)
plt.title('Salt and Pepper Noise Added')
plt.imshow(noisy_sp)
plt.axis('off')plt.show()

3. 参考文献

[1] J. Liu, et al. "Image Data Augmentation for Deep Learning: A Review." IEEE Access, 2020.[2] S. Perez and W. Wang. "The Effectiveness of Data Augmentation in Image Classification using Deep Learning." 2017.[3] A. Shorten and T. Khoshgoftaar. "A survey on Image Data Augmentation for Deep Learning." Journal of Big Data, 2019.[4] A. Ge, et al. "Data augmentation for deep learning: A review." Computer Science Review, 2021.[5] F. Zhang, et al. "Noise Robust Image Classification using Deep Learning." IEEE Transactions on Image Processing, 2018.[6] Y. Liu, et al. "Image Classification with Noise Robustness via Data Augmentation." International Journal of Computer Vision, 2020.

创作不易,烦请各位观众老爷给个三连,小编在这里跪谢了!
在这里插入图片描述

相关文章:

图像数据增强方法概述

图像数据增强方法概述 1. 什么是图像数据增强技术?2. 图像数据增强技术分类2.1 几何变换Python 示例代码 2.2 颜色变换2.3 噪声添加 3. 参考文献 1. 什么是图像数据增强技术? 基础概念:图像增强技术是计算机视觉和图像处理领域中的一个关键技术,主要用…...

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(五)-无人机跟踪

目录 引言 5.3 无人机跟踪 5.3.1 无人机跟踪模型 5.3.2 无人机位置报告流程 5.3.3 无人机存在监测流程 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everyth…...

分享从零开始学习网络设备配置--任务6.1 实现计算机的安全接入

项目描述 随着网络技术的发展和应用范围的不断扩大,网络已经成为人们日常生活中必不可少的一部分。园区网作为给终端用户提供网络接入和基础服务的应用环境,其存在的网络安全隐患不断显现出来,如非人为的或自然力造成的故障、事故&#xff1b…...

双向链表(C语言版)

1. 双向链表的结构 注意:这里的“带头”跟单链表的“头结点”是两个概念,实际上在单链表阶段称呼不太严谨,但是为了更好地理解就直接称为单链表的头结点。带头链表里的头结点,实际为“哨兵位”,哨兵位结点不存储任何有…...

【算法/学习】前缀和差分

前缀和&&差分目录 1. 前缀和的概念及作用 🌈概念 🌈用途 🌙一维前缀和 🌙二维前缀和 2. 差分的概念及用途 🌈概念: 🌈用途 🌙一维差分 🌙二维差分 1. …...

idea Project 不显示文件和目录

idea Project 不显示文件和目录 File - Close Project - 重新打开项目即可删除.idea文件夹,重新打开项目即可。 原因分析: 可能与使用不同ide例如java、python打开同一项目有关 参考: https://blog.csdn.net/hgnuxc_1993/article/details/132595900 解决打开IDE…...

Linux--Socket编程预备

目录 1. 理解源 IP 地址和目的 IP 地址 2.端口号 2.1端口号(port)是传输层协议的内容 2.2端口号范围划分 2.3理解 "端口号" 和 "进程 ID" 2.4理解 socket 3.传输层的典型代表 3.1认识 TCP 协议 3.2认识 UDP 协议 4. 网络字节序 5. socket 编程接…...

100个python的基本语法知识【下】

50. 压缩文件: import zipfilewith zipfile.ZipFile("file.zip", "r") as zip_ref:zip_ref.extractall("extracted")51. 数据库操作: import sqlite3conn sqlite3.connect("my_database.db") cursor conn.c…...

Git如何将一个分支上的修改转移到另一个分支

在我们使用git进行版本控制时,当代码写错分支,怎么将这些修改转移到正确的分支上去呢?这时,我们可以使用git stath命令来暂存我们的修改,然后再切换到其他分支 未commit(提交)操作时 1. 先将修…...

jvm-证明cpu指令是乱序执行的案例

package jvm;/*** 证明cpu指令是乱序执行的** author 1* version 1.0* description: TODO* date 2024-07-19 9:31*/ public class T04_Disorder {private static int x 0, y 0;private static int a 0, b 0;public static void main(String[] args) throws InterruptedExcep…...

《流程引擎原理与实践》开源电子书

流程引擎原理与实践 电子书地址:https://workflow-engine-book.shuwoom.com 第一部分:流程引擎基础 1 引言 1.1 流程引擎介绍 1.2 流程引擎技术的发展历程 1.3 相关产品国内外发展现状 1.4 本书的内容和结构安排 2 概念 2.1 基础概念 2.2 进阶…...

谷粒商城实战笔记-52~53-商品服务-API-三级分类-新增-修改

文章目录 一,52-商品服务-API-三级分类-新增-新增效果完成1,点击Append按钮,显示弹窗2,测试完整代码 二,53-商品服务-API-三级分类-修改-修改效果完成1,添加Edit按钮并绑定事件2,修改弹窗确定按…...

uni-app 影视类小程序开发从零到一 | 开源项目分享

引言 在数字娱乐时代,对于电影爱好者而言,随时随地享受精彩影片成为一种日常需求。分享一款基于 uni-app 开发的影视类小程序。它不仅提供了丰富的影视资源推荐,还融入了个性化知乎日报等内容,是不错的素材,同时对电影…...

Python使用正则替换字符串

Python小技:使用正则替换字符串 java中有String.replaceAll()方法使用正则替换字符串, 在Python中,字符串也有一个replace方法,但是这个方法只能精准替换, 如果想正则替换,就要改成re.sub方法,而…...

每日一练,java03

目录 题目wait()、notify()和notifyAll()方法的特性和使用场景wait() 方法notify() 方法notifyAll() 方法使用场景 注意事项 题目 选自牛客网 1.下面关于JAVA的垃圾回收机制,正确的是( ) A.当调用“System.gc()”来强制回收时,系…...

【机器学习】深入理解损失函数(Loss Functions)

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 深入理解损失函数(Loss Functions)什么是损失函数?常见损失函数类型1. 均方误差…...

python实现特征检测算法3

python实现SIFT(尺度不变特征变换)算法、SURF(Speeded Up Robust Features)算法 1.SIFT算法详解算法步骤Python实现详细解释优缺点应用领域2.SURF算法详解算法步骤Python实现详细解释SURF算法原理优缺点应用领域尺度不变特征变换(SIFT,Scale-Invariant Feature Transform…...

软件更新的双刃剑:从”微软蓝屏”事件看网络安全的挑战与对策

引言 原文链接 近日,一场由微软视窗系统软件更新引发的全球性"微软蓝屏"事件震惊了整个科技界。这次事件源于美国电脑安全技术公司"众击"提供的一个带有"缺陷"的软件更新,如同一颗隐形炸弹在全球范围内引爆,…...

Redis 主从搭建

Redis主从搭建 7.2.5 文章目录 一. 同主机搭建Redis主从1. 环境介绍2. 环境前准备工作3. 安装 Redis 7.2.54. redis 配置修改并且启动4.1 修改配置文件4.2 编写启动脚本 5. 开启主从5.1 开启5.2 主库实例查看主从信息5.3 从库实例查看主从信息5.4 验证主从配置是否生效 6. 解除…...

LeetCode 129, 133, 136

文章目录 129. 求根节点到叶节点数字之和题目链接标签思路代码 133. 克隆图题目链接标签思路代码 136. 只出现一次的数字题目链接标签思路代码 129. 求根节点到叶节点数字之和 题目链接 129. 求根节点到叶节点数字之和 标签 树 深度优先搜索 二叉树 思路 由于本题需要 从…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...