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

六、CV_图像增强方法

六、图像增强方法

大规模数据集是成功应用深度神经网络的前提。例如,可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度,色彩等因素来降低模型对色彩的敏感度。

图像增强概念

  • 图像增强是指通过剪切,旋转/反射/反转变换,缩放变换,平移变换,尺度变换,对比度变换,噪声扰动,颜色变换等一种或多种组合数据增强变换的方式来增加数据集的大小

图像增强的意义

  • 通过对训练图像做一系列随即改变,来产生相似又不相同的训练样本,从而扩大训练数据级的规模,而且随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力

图像增强方式分类

实现图像增强可以通过tf.image来完成,也可以通过tf.keras.imageGenerator来完成

(1)几何变换类

  • 主要是对图像进行几何变换操作,包括 翻转,旋转,裁剪,变形,缩放 等

(2)颜色变换类

  • 通过模糊,颜色变换,擦除,填充等方式对图像进行处理

tf.image进行图像增强(离线实现)

导入所需工具包并读取要处理的图像

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
# 读取图像并显示
Insp = plt.imread('./Inspiration.jpg')
plt.imshow(Inspiration)

(1)翻转与裁剪

A、左右翻转

可以通过<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">tf.images.random_flip_left_right</font>实现图像左右翻转

# 左右翻转并显示
Insp1 = tf.image.random_flip_left_right(Insp)
plt
B、上下翻转
# 上下翻转
Insp2 = tf.image.random_flip_up_down(Insp)
plt.imshow(Insp2)
C、随机裁剪

堆积裁剪出一块面积为原面积10%100%的区域,且该区域的宽和高之比随机取自0.52,然后再将该区域的宽和高分别缩放到200像素

# 随即裁剪
Insp3 = tf.image.random_crop(Insp, (200, 200, 3))
plt.imshew(Insp3)

(2)颜色变换

A、亮度

将图像的亮度随机变化为原图像的50%(1-0.5)~150%(1+0.5)

Insp4 = tf.image.random_brightness(Insp, 0.5)
plt.imshow(Insp4)
B、色调
Insp5 = tf.image.random_hue(Insp, 0.5)
plt.imshow(Insp5)

使用ImageDataGenerator()进行图像增强(在线实现)

  • <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">batch_size</font>的数据随机进行指定的增强方式,增强后数据直接送入网络之中进行训练
  • <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">ImageDataGenerator()</font><font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">keras.preprocessing.image</font>模块中的图片生成器,可以在batch中对数据进行增强,扩充数据集大小,增强模型的泛化能力。比如旋转,变形等。
keras.preprocessing.image.ImageDataGenerator(rotation_range = 0, # 整数,随即旋转度数范围width_shift_range = 0.0, #浮点数,宽度平移height_shift_range = 0.0, # 浮点数,高度平移brightness_range = None,  # 亮度调整shear_range = 0.0, # 裁剪zoom_range = 0.0, # 浮点数  或  [lower, upper] 随机缩放范围horizontal_flip = False, # 左右翻转vertical_flip = False, # 垂直翻转rescale = None # 尺度调整
)

水平翻转结果:

from tensorflow.keras.datasets import mnist
# 获取数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# ( ,28,28)--->( ,28,28,1) 将本来缺少的通道维度加上
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
# 实例化
datagen = tf.keras.preprocessing.image.ImageDataGenerator(horizontal_flip = True)for x, y in datagen.flow(x_train, y_train, batch_size=9):plt.figure(figsize=(8, 8))for i in range(0, 9):plt.subplot(330+1+i) # # 创建3行3列的子图(330表示3行3列起始索引0)plt.imshow(x[i].reshape(28, 28),cmap = 'gray') # # 显示图像(转回28×28维度,灰度模式)plt.title(y[i]) # # 显示图像对应的标签(真实数字)plt.show()break
http://www.dtcms.com/a/322342.html

相关文章:

  • Python 程序设计讲义(66):Python 的文件操作——数据的处理
  • 多模态RAG赛题实战--Datawhale AI夏令营
  • 计算BERT-BASE参数量
  • 基于windows10/11的可用的自动日记启动脚本
  • Irix HDR Pro:专业级 HDR 图像处理软件
  • STM32H503不同GPIO速度配置(HAL库)对应的最高速度
  • Linux网络转发系统框架分析
  • 栈和队列应用实操
  • RAGFoundry:面向检索增强生成的模块化增强框架
  • 深入剖析Spring MVC核心原理:从请求到响应的魔法解密
  • 如何在linux(CentOS7)上面安装 jenkins?
  • linux php版本降级,dnf版本控制
  • 【LeetCode 热题 100】(五)普通数组
  • 贪心----1.买卖股票的最佳时机
  • 【JS-8-Json】深入理解JSON语法及Java中的JSON操作
  • AutoML 的下半场——从“模型选择”到“端到端业务闭环”
  • 集成电路学习:什么是RQT图形用户界面工具
  • USRP X310 X410 参数对比
  • 区块链密码学简介
  • 【洛谷题单】--分支结构(三)
  • Meta AI水印计划的致命缺陷——IEEE Spectrum深度文献精读
  • CodeBuddy AI·编程新维度
  • GitHub第三方登录全解析:OAuth 2.0流程详解(适合初学者)
  • C++实现MATLAB矩阵计算程序
  • 计算机网络:深入了解CIDR地址块如何利用VLSM进行子网划分的过程
  • Kotlin反射详解
  • 学习Java的Day28
  • STM32CubeMX(十三)FatFs文件系统(SPI驱动W25Qxx)
  • 软考 系统架构设计师系列知识点之杂项集萃(119)
  • 传输线模拟经验谈