首页 > 其他分享 >图像数据增强方法概述

图像数据增强方法概述

时间:2024-07-23 17:54:16浏览次数:8  
标签:增强 plt 噪声 image cv2 概述 图像 Image

图像数据增强方法概述

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.shape
    angle = 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.5
    amount = 0.04
    out = np.copy(image)
    # Salt noise
    num_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 noise
    num_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] = 0

    return 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.

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

标签:增强,plt,噪声,image,cv2,概述,图像,Image
From: https://blog.csdn.net/m0_59257547/article/details/140641226

相关文章

  • 从图像到万象,InternVL 2.0 书生·万象多模态大模型发布!
    从图像到万象,InternVL2.0书生·万象多模态大模型发布!OpenGVLab​目录收起代码开源/模型使用方法:76B大模型,司南评测优于GPT-4O8B端侧小模型,消费级单卡可部署试用Demo:正文开始!1.多模态大模型的开始,AGI的黎明三年演进,多模态先行者的实至名归之路2.更少资源、更高......
  • 如何在 pyplot 中的条形右侧添加标志/图像
    这是我的代码importmatplotlib.pyplotaspltfig=plt.Figure()ax=fig.axes[0]ax.barh(bar_y_corodinates_list,bar_lengths_list,tick_label=countries_list)这是我想添加标志的地方,即小图像就像我传递Y轴标签的国家/地区列表一样我想传递光盘中标......
  • 尝试从图像 url 中抓取图像(使用 python urllib ),但获取 html
    我尝试从以下网址获取图像。http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg我可以右键单击并另存为,但是当我尝试使用urlretrievelikeimporturllibimg_url='http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'urllib.urlretriev......
  • AWS全服务历史年表:发布日期、GA和服务概述一览(三)
      我一直在尝试从各种角度撰写关于AmazonWebServices(AWS)的信息和魅力。由于我喜欢技术历史,这次我总结了AWS服务发布的历史年表。虽然AWS官方也通过“What'sNew”发布了官方公告,但我一直希望能有一篇文章将公告日期、GA日期(一般提供开始日期)、服务名称、服务概述等信息压......
  • 在 Python 中以非常高的质量保存图像
    如何以非常高的质量保存Python绘图?也就是说,当我不断放大PDF文件中保存的对象时,为什么没有任何模糊?另外,什么是最好的模式将其保存在?png,eps?或者其他的?我不能pdf,因为有一个隐藏的数字会扰乱Latexmk编译。要以非常高的质量保存Py......
  • Spring maven 依赖概述
    Spring依赖包SpringSecurity依赖包在SpringSecurity中,spring-security-config和spring-security-web是SpringSecurity的两个核心模块:spring-security-config:提供了SpringSecurity的配置功能;它包含了基于XML和Java的配置方式,可以用来定义安全策略,比如用户的认证和......
  • 《昇思25天学习打卡营第24天|生成式-Pix2Pix实现图像转换》
    Pix2Pix实现图像转换Pix2Pix概述Pix2Pix是基于条件生成对抗网络(cGAN,ConditionGenerativeAdversarialNetworks)实现的一种深度学习图像转换模型该网络学习从输入图像到输出图像的映射,如Isola等人在Image-to-imagetranslationwithconditionaladversarialnetwor......
  • RBAC权限模型概述
    RBAC即role-basedaccesscontrol,基于角色的访问控制通过角色来管理用户对系统资源的访问权限。RBAC是一种权限管理模型,核心思想是分离用户与具体权限,通过角色作为中介来实现用户与权限的关联RBAC的三个基本元素User:访问者Role:User和Permission的桥梁,他是权限的集合,用户通过被......
  • 嵌入式外设 -- ESP32-Cam图像透传到公网访问做个小监控(图文讲解)
    目录一前言局域网透传和环境安装可以看这里二准备工作1.账号注册2.软件下载3.软件安装4.软件使用5.程序烧录三重点来了1.获取分配的IP地址2.软件配置隧道IP地址3.获取到公网的访问地址4.配置摄像头参数四注意事项重新链接热点需要重新去走这几步......
  • 如何使用 Python 自动反转 .cal 和 .GP4 图像文件中的颜色?
    我在.cal和.GP4中有数千个计划,我需要反转其颜色(当它们处于“负”时切换到“正”模式)。我知道可以在像autocad这样的软件中一一完成,但出于明显节省时间的原因,我正在寻找一种批量处理方法。我创建了一个Python程序来执行该操作,但先验有没有允许轻松操作.cal和.GP4......