imgaug库指南(14):从入门到精通的【图像增强】之旅

引言

在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的关键所在。而imgaug,作为一个功能强大的图像增强库,为我们提供了简便且高效的方法来扩充数据集。本系列博客将带您深入了解如何运用imgaug进行图像增强,助您在深度学习的道路上更进一步。我们将从基础概念讲起,逐步引导您掌握各种变换方法,以及如何根据实际需求定制变换序列。让我们一起深入了解这个强大的工具,探索更多可能性,共同推动深度学习的发展。


前期回顾

链接主要内容
imgaug库指南(三):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 高斯模糊
imgaug库指南(四):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 均值模糊
imgaug库指南(五):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 中值模糊/滤波,并介绍了如何利用【中值滤波】过滤椒盐噪声
imgaug库指南(六):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 双边模糊/滤波
imgaug库指南(七):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 运动模糊
imgaug库指南(八):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 均值迁移模糊
imgaug库指南(九):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 加性噪声(Add方法)
imgaug库指南(十):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 加性噪声(AddElementwise方法)
imgaug库指南(11):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 加性高斯噪声(AdditiveGaussianNoise方法)
imgaug库指南(12):从入门到精通的【图像增强】之旅详细介绍了imgaug库的数据增强方法 —— 加性拉普拉斯噪声(AdditiveLaplaceNoise方法)

在本博客中,我们将向您详细介绍imgaug库的数据增强方法 —— 乘法运算(Multiply方法)


乘法运算(Multiply方法)

功能介绍

iaa.Multiplyimgaug库中的一个方法,用于对图像进行逐元素的乘法运算。这种运算通常用于调整图像的色彩和饱和度。

语法

import imgaug.augmenters as iaa
aug = iaa.Multiply(mul=(0.8, 1.2), per_channel=False)
  • mul: 与图像像素值相乘的值。
    • mul为整数,则图像像素值相乘的值即为value
    • mul为元组(a, b),则图像像素值相乘的值为从区间[a, b]中采样的随机数;
    • mul为列表,则图像像素值相乘的值为从列表中随机采样的数;
  • per_channel:
    • per_channelTrue,则为每幅图像的每个像素点对应的通道上加上随机整数 ==> RGB图像指定像素位置上的三个通道分别对应三个随机整数,且每个像素点都对应不同的三个随机整数;
    • per_channelFalse,则为每幅图像的每个像素点对应的通道上加上随机采样的相同整数 ==> RGB图像指定像素位置上的三个通道都是同一个随机整数,但每个像素点都对应不同的随机整数;
    • per_channel为区间[0,1]的浮点数,假设per_channel=0.6,那么对于60%的图像,per_channelTrue;对于剩余的40%的图像,per_channelFalse

示例代码

  1. 使用不同的mul
import cv2
import imgaug.augmenters as iaa
import matplotlib.pyplot as plt

# 读取图像
img_path = r"D:\python_project\lena.png"
img = cv2.imread(img_path)
image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


# 创建数据增强器
aug1 = iaa.Multiply(mul=0.6, per_channel=False)
aug2 = iaa.Multiply(mul=1.2, per_channel=False)
aug3 = iaa.Multiply(mul=1.8, per_channel=False)



# 对图像进行数据增强
blurred_image1 = aug1(image=image)
blurred_image2 = aug2(image=image)
blurred_image3 = aug3(image=image)

# 展示原始图像和数据增强后的图像
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
axes[0][0].imshow(image)
axes[0][0].set_title("Original Image")
axes[0][1].imshow(blurred_image1)
axes[0][1].set_title("Augmented Image1")
axes[1][0].imshow(blurred_image2)
axes[1][0].set_title("Augmented Image2")
axes[1][1].imshow(blurred_image3)
axes[1][1].set_title("Augmented Image3")
plt.show()

运行结果如下:

图1 原图及数据增强结果可视化

可以看到,当固定参数per_channel=False时:

  • mul参数小于零,新图像相比于原图,亮度会出现一定的降低。
  • mul参数大于零,新图像相比于原图,亮度会出现一定的升高。
  1. per_channelTrue
import cv2
import imgaug.augmenters as iaa
import matplotlib.pyplot as plt

# 读取图像
img_path = r"D:\python_project\lena.png"
img = cv2.imread(img_path)
image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


# 创建数据增强器
aug1 = iaa.Multiply(mul=(0.6, 1.4), per_channel=True)
aug2 = iaa.Multiply(mul=(0.6, 1.4), per_channel=True)
aug3 = iaa.Multiply(mul=(0.6, 1.4), per_channel=True)



# 对图像进行数据增强
blurred_image1 = aug1(image=image)
blurred_image2 = aug2(image=image)
blurred_image3 = aug3(image=image)

# 展示原始图像和数据增强后的图像
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
axes[0][0].imshow(image)
axes[0][0].set_title("Original Image")
axes[0][1].imshow(blurred_image1)
axes[0][1].set_title("Augmented Image1")
axes[1][0].imshow(blurred_image2)
axes[1][0].set_title("Augmented Image2")
axes[1][1].imshow(blurred_image3)
axes[1][1].set_title("Augmented Image3")
plt.show()

运行结果如下:

图2 原图及数据增强结果可视化

可以从图2看出,当使用元组类型的mul,且per_channel为True时 ⇒ 增强器为RGB图像的三个通道分别添加了三个随机整数 ⇒ 数据增强后,新图像的颜色整体上发生了很大的变化。

注意事项

  1. mul参数的选择mul参数的选择会影响图像的色彩和饱和度。较大的常数可能会导致颜色过于饱和,而较小的常数可能会导致颜色过于暗淡。需要根据实际需求调整。
  2. 通道独立性:如果设置了per_channel=True,则每个通道将使用独立的常数。这可以用于独立调整不同颜色通道的色彩和饱和度。
  3. 与其他增强器的结合使用:可以与其他图像增强方法结合使用,以获得更丰富的效果。例如,可以先应用色彩平衡增强器,然后再应用逐元素的乘法运算。
  4. 结果的可重复性:每次应用增强器可能会产生稍微不同的结果,因为它是非线性操作。为了确保结果的可重复性,可以使用aug.to_deterministic()方法将增强器转换为确定性状态。
  5. 数值范围:在应用逐元素的乘法运算时,需要确保结果不会超出像素值的范围(例如,对于8位图像,像素值范围是0-255)。如果超出范围,可能会导致图像失真。

总结

iaa.Multiply无方法允许用户通过逐元素的乘法运算,精准地调整图像的色彩和饱和度,从而为创作提供无限可能。与其他增强器协同工作,其效果更是锦上添花,为图像带来层次丰富、细节饱满的视觉体验。

当然,为了确保每一次操作的准确性,使用iaa.Multiply时必须慎重对待一些关键因素。首先,选择合适的mul至关重要,它直接影响着色彩和饱和度的调整程度。其次,考虑到通道的独立性,针对不同通道应用不同的常数可以进一步增强效果。此外,与其他增强器的结合使用也是一门艺术,需要不断尝试和磨合。


小结

imgaug是一个强大的图像增强库,它可以帮助你创建出丰富多样的训练数据,从而改进你的深度学习模型的性能。通过定制变换序列和参数,你可以轻松地适应各种应用场景,从计算机视觉到医学影像分析。随着深度学习的发展,imgaug在未来将继续发挥重要作用。因此,将imgaug纳入你的数据增强工具箱是一个明智的选择。

参考链接


结尾

亲爱的读者,首先感谢抽出宝贵的时间来阅读我们的博客。我们真诚地欢迎您留下评论和意见,因为这对我们来说意义非凡。
俗话说,当局者迷,旁观者清。的客观视角对于我们发现博文的不足、提升内容质量起着不可替代的作用。
如果您觉得我们的博文给您带来了启发,那么,希望能为我们点个免费的赞/关注您的支持和鼓励是我们持续创作的动力
请放心,我们会持续努力创作,并不断优化博文质量,只为给带来更佳的阅读体验。
再次感谢的阅读,愿我们共同成长,共享智慧的果实!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/316180.html

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

相关文章

【服务器数据恢复】服务器硬盘磁头损坏的数据恢复案例

服务器硬盘故障: 一台服务器上raid阵列上有两块硬盘出现故障,用户方已经将故障硬盘送到其他机构检测过,其中一块硬盘已经开盘,检测结果是盘片损伤严重;另一块硬盘尚未开盘,初步判断也存在硬件故障&#xff…

代码随想录 Leetcode160. 相交链表

题目: 代码(首刷看解析 2024年1月13日): class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *A headA, *B headB;while (A ! B) {A A ! nullptr ? A->next : headB;B B ! nullpt…

Legion R7000 2021(82JW)原装出厂Win10/WIN11系统预装OEM系统镜像

LENOVO联想拯救者R7000 2021款(82JW)笔记本电脑原厂Windows10/11系统 链接:https://pan.baidu.com/s/1m_Ql5qu6tnw62PbpvXB0hQ?pwd6ek4 提取码:6ek4 原装出厂系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属联想的LOGO标…

金蝶云星空和吉客云单据接口对接

金蝶云星空和吉客云单据接口对接 对接系统:吉客云 吉客云是基于“网店管家”十五年电商ERP行业和技术积累基础上顺应产业发展需求,重新定位、全新设计推出的换代产品,从业务数字化和组织数字化两个方向出发,以构建流程的闭环为依归…

阿里云服务部署docker容器

1.1 为什么要用docker 问题 开发、测试、生产环境不统一,造成项目测试、部署时产生问题 解决方案 使用容器化技术,将环境和项目一起发送给测试、部署人员,测试人数和运维人员直接使用发过 来的环境和项目进行操作,避免环境不统一…

详解Skywalking 服务Overview页面的参数含义(适合小白)

本文针对刚刚接触skywalking的同学,重点讲解服务Overview页面中各个参数的含义,为大家快速上手skywalking会起到帮助作用! 最重要的三个指标 Service Apdex(数字):当前服务的评分 Successful Rate(数字&a…

分布式系统架构设计之分布式消息队列的实际应用场景分析以及未来展望

一、分布式消息队列的实际应用场景 随着企业业务的不断发展和数据量的持续增长,分布式消息队列已经成为了许多系统中不可或缺的一部分。它提供了异步通信、流量削峰、数据缓冲等功能,为构建高并发、高可用、可扩展的系统提供了有力的支持。本部分会通过…

列表解析与快速排序

排序是在对文本、数值等数据进行操作时常用的功能,本文介绍两种常用的排序方式,借此学习列表解析,并巩固递归算法。 1 选择排序 说到排序,以数值为例,肯定涉及到值大小的对比,选择排序即通过依次在子集中…

win11下载Hbuliderx 安装闪退解决教程+安装包分享

在官网下载 目录 在官网下载 出现闪退 下载失败 2.2. 最终在百度网盘里下载了历史版本 2.3. 然后解压文件 2.4. 双击打开 2.5. 安装成功 出现闪退 下载失败 结果下载失败,一下子弹出的下载框就会闪退 2.2. 最终在百度网盘里下载了历史版本 下载的网盘链接: …

【详解】结构体的内存对齐(每步配图)

目录 引言: 为什么存在结构体内存对齐? 结构体内存对齐规则: 练习一: 测试代码: 结果如下: 第二个练习:结构体的嵌套问题 测试代码: 代码结果如下: 两个关于结构体的易错…

第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

【重明】机器视觉QT/C++实现工业相机二次开发框架

工业相机二次开发是机器视觉行业必不可少的技能之一。 而如何实现一个框架,能够兼容所有工业相机二次开发,从而支持多种类型的工业相机,就是机器视觉行业的进阶技能了。 重明工业相机二次开发项目就是在实现相机二开框架的基础上&#xff0c…

Java面试汇总——redis篇

1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存就形同虚设(只有数据库查到了,才会让redis缓存,但现在的问题是查不到),会频繁的去访问数据库。 解决…

6. 逻辑删除

逻辑删除对应的是物理删除,分别介绍一下这两个概念: 物理删除 :指的是真正的删除,即:当执行删除操作时,将数据表中的数据进行删除,之后将无法再查询到该数据逻辑删除 :并不是真正意…

whistle代理+mock轻松解决“页面端“测试接口没数据难题

0、whistle是什么?怎么用? 自行百度,此处不再赘述! 1、示例演示(交易订单测试) 背景和痛点最近在测试一个小需求,需要涉及订单侧服务商品库侧服务库存侧服务财务侧线下交易服务。痛点主要在订…

淘宝商家实现批量上货API接口调用接入说明(淘宝开放平台免申请接入)

API接入详细步骤: 第一步:在淘宝开放平台中选择接口塡写应用申报递交给我司,确认接口是否都有。 第二步:确认接口都有,需交1000元进行测试,可以测试三天,测试数据符合淘宝开放平台接口参数说明&…

【python】09.面向对象进阶

面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。 property装…

轴组【CAN】

如果有126个轴,你程序里挨个添加轴很麻烦。 可以用轴组批量添加。【数组】 CAN驱动器 0x164 就是下个驱动器 p_CAN主站地址:ADR(IoConfig_Globals.CANopen_Manager_SoftMotion);p_CAN从站地址1:ADR(IoConfig_Globals.DMA882_CAN);p_CAN从站地址2:ADR(IoConfig_Gl…

超维空间M1无人机使用说明书——61、ROS无人机物体识别与精准投放

引言:基于空中物流的项目背景。我们提供了使用基于诗句的物体识别和精准投放、降落。实现原理如下: 1、在ROS下使用机载电脑实现物体识别 2、记载电脑根据反馈的位置发布运动控制指令 3、PX4解析机载电脑发布的命令,作出运动控制 4、设置…

PCL 使用克拉默法则进行四点定球(C++详细过程版)

目录 一、算法原理二、代码实现三、计算结果本文由CSDN点云侠原创,PCL 使用克拉默法则进行四点定球(C++详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 已知空间内不共面的四个点,设其坐标为 A (…