Imgaug之导入和增强图像
参考Imgaug之导入和增强图像 - 云+社区 - 腾讯云
在机器视觉领域,想将深度学习应用于实际工程项目,并最终落地,会遇到很多问题:光照、遮挡等。而采集到的数据通常难以满足各种现实环境,需要进行数据增强操作。 imgaug是一个基于OpenCV的更高级的API,包含很多集成好的图像增强的方法。
安装方式:
conda config --add channels conda-forgeconda install imgaug
导入和增强图像
输入的图像需要符合以下两种规格之一:
可以是4D的numpy数组,形状需要满足“NHWC”原则,即(N, height, width, channels)
也可以是一个由3D numpy数组组成的列表list,3D numpy数组的形状需要满足(height, width, channels) 对于灰度图像,其形状必须满足(height, width, 1)
并且所有的图像必须是numpy数组的uint8格式,数值需要是在0-255之间。
uint8是所有API测试最彻底的数据类型,其余的格式例如float32,需要查看imgaug API的文档是否支持。
图像导入函数
imgaug只是进行图像增强的库函数,其中并没有相关图像的读取和输出的函数。因此,需要使用其他的库进行图像的导入:
imageio
cv2.imread()
另外,值得注意的是,cv2.imread()函数返回的图像颜色空间是BGR,而不是RGB,因此,需要手动改变其通道组成: cv2.imread(path)[:, :, ::-1]
因此,提倡使用imageio进行图像的导入。
导入并增强一张图片
imagio.imread("/path/to/the/file.jpg")
windows: imagio.imread("C:\path\to\the\file.jpg") 返回的是一个uint8格式的numpy数组,形状为HWC--RGB空间。
import imageio
import imgaug as ia
%matplotlib inline
image = imageio.imread("./pick1.jpg") # Image格式
print("Original")
ia.imshow(image)
Augmented:
imgaug没有读图像的语句,但是有显示图像的语句。
# 增强
from imgaug import augmenters as iaa
ia.seed(4)
rotate = iaa.Affine(rotate=(-25, 25)) # 旋转
image_aug = rotate(image=image) # 处理后是numpy数组格式
print("Augmented:")
ia.imshow(image_aug)
Augmented:
可以看出,图像发生了[-25, 25]之间角度的旋转。
在使用imgaug中包含的数据增强功能时,需要先通过传参生成某种数据增强的实例,再通过实例对图像进行处理。
尝试一下ia.seed(4),观察是否可以让旋转的角度相同。
ia.seed(4)
image_aug = rotate(image=image)
print("Re-Augmented:")
ia.imshow(image_aug)
Re-Augmented:
仿佛每次的结果都是一样的。
再试试更改一下数值。
ia.seed(5)
image_aug = rotate(image=image)
print("Augmented:")
ia.imshow(image_aug)
Augmented:
结果发生了随机性的变化。
增强一个batch数量的图像
实际使用中,我们通常需要处理更多份的图像数据,而不是一张。此时,可以将图形数据按照NHWC的形式或者由列表组成的HWC的形式对批量的图像进行处理。
如下述代码,将一份图像存储多次形成一个batch数量的图像。经过处理后,使用np.hstack()对处理后的图像进行显示。
import numpy as np
images = [image, image, image, image, image]
images_aug = rotate(images=images)
print("Augmented batch:")
ia.imshow(np.hstack(images_aug))
Augmented batch:
同时使用多种增强技术
之前使用的方法仅仅在一张图像或者多张图像上使用了一种Affine的增强技术,在实际深度学习模型训练中,往往需要同时使用多种图像增强技术,从而让模型适应变化的外界条件。
在使用多种图像增强技术时,可以使用imgaug中类似keras和Pytorch中Sequential方法,将多种增强技术拼接在一起。如下所示:
seq = iaa.Sequential([iaa.Affine(rotate=(-25, 25)), iaa.AdditiveGaussianNoise(scale=(10, 60)),iaa.Crop(percent=(0, 0.2))])
images_aug = seq(images=images)
print("Augmented:")
ia.imshow(np.hstack(images_aug))
Augmented:
Crop()默认会保持输入图像的尺寸,如果将keep_size=False,输入输出的尺寸将可能会发生变化。即该参数表示是否保持图像尺寸一致。
下述代码在Sequential中设置了random_order=True,并使用单张图片重复8次得到的结果。该参数表示是否启用随机顺序增强。
seq = iaa.Sequential([iaa.Affine(rotate=(-25, 25)),iaa.AdditiveGaussianNoise(scale=(30, 90)),iaa.Crop(percent=(0, 0.4))], random_order=True)
images_aug = [seq(image=image) for _ in range(8)]
print("Augmented:")
ia.imshow(ia.draw_grid(images_aug, cols=4, rows=2))
Augmented:
增强图像(不同尺寸)
在收集训练集时,训练集的尺寸往往难以做到统一尺寸。之前的示例中也总是使用的相同尺寸的图像。下述代码介绍了不同尺寸图像的处理和展示。
对于不同尺寸的图像,肯定不能使用numpy数组组成NHWC的形式,只能将不同尺寸的图像存储于列表中。
seq = iaa.Sequential([iaa.CropAndPad(percent=(-0.2, 0.2), pad_mode="edge"), # crop and pad imagesiaa.AddToHueAndSaturation((-60, 60)), # change their coloriaa.ElasticTransformation(alpha=90, sigma=9), # water-like effectiaa.Cutout() # replace one squared area within the image by a constant intensity value], random_order=True)# load images with different sizesimages_different_sizes = [imageio.imread("./pick1.jpg"),imageio.imread("./flower.jpg"),imageio.imread("./samoye.jpg")]
# augment them as one batch
images_aug = seq(images=images_different_sizes)
# visualize the results
print("Image 0 (input shape: %s, output shape: %s)" % (images_different_sizes[0].shape, images_aug[0].shape))
ia.imshow(np.hstack([images_different_sizes[0], images_aug[0]]))
print("Image 1 (input shape: %s, output shape: %s)" % (images_different_sizes[1].shape, images_aug[1].shape))
ia.imshow(np.hstack([images_different_sizes[1], images_aug[1]]))
print("Image 2 (input shape: %s, output shape: %s)" % (images_different_sizes[2].shape, images_aug[2].shape))
ia.imshow(np.hstack([images_different_sizes[2], images_aug[2]]))
Image 0 (input shape: (313, 500, 3), output shape: (313, 500, 3))
Image 1 (input shape: (621, 500, 3), output shape: (621, 500, 3))
Image 2 (input shape: (406, 500, 3), output shape: (406, 500, 3))
整理总结
本节教程主要包含以下几个方面的内容:
在利用imgaug图像增强的方法中,如何读取和显示图像; imageio.imread() imgaug.imshow() 不推荐使用opencv,因为其读入图像默认为BGR模式;
单/多张图像如何利用一/多种图像增强方法;
如何将不同尺寸的图像组合在一起进行图像增强。
本节教程中包含的图像增强的方法:
iaa.Affine(rotate=(-25, 25))
实现仿射变换,本节仅利用了其中的旋转操作;
iaa.AdditiveGaussianNoise(scale=(10, 60))
添加高斯白噪声
iaa.Crop(percent=(0, 0.2))
实现裁剪,参数为裁剪比例
iaa.CropAndPad(percent=(-0.2, 0.2), pad_mode="edge")
实现裁剪和边缘补充
iaa.AddToHueAndSaturation((-60, 60))
Hue空间调整饱和度
iaa.ElasticTransformation(alpha=90, sigma=9)
随机弹性变换(仿射变换的一种)
iaa.Cutout()
图像增强之 cutout 生成遮挡块
* CropAndPad使用效果:*
import imageio
import imgaug as ia
from imgaug import augmenters as iaa
import numpy as np
%matplotlib inline
image = imageio.imread("./pick1.jpg")
crop = iaa.CropAndPad(percent=(-0.2, 0.2), pad_mode="edge")
img_aug = crop(image=image)
print("Original")
ia.imshow(np.hstack([image, img_aug]))
#ia.imshow(image)
#ia.imshow(img_aug)
Original
* AddToHueAndSaturation使用效果 *
import imageio
import imgaug as ia
from imgaug import augmenters as iaa
%matplotlib inline
image = imageio.imread("./pick1.jpg")
hue = iaa.AddToHueAndSaturation((-60, 60))
img_aug = hue(image=image)
print("Original")
ia.imshow(np.hstack([image, img_aug]))
#ia.imshow(image)
#ia.imshow(img_aug)
Original
* ElasticTransformation使用效果 *
import imageio
import imgaug as ia
from imgaug import augmenters as iaa
%matplotlib inline
image = imageio.imread("./pick1.jpg")
trans = iaa.ElasticTransformation(alpha=90, sigma=9)
img_aug = trans(image=image)
print("Original")
ia.imshow(np.hstack([image, img_aug]))
#ia.imshow(image)
#ia.imshow(img_aug)
Original
Imgaug之导入和增强图像相关推荐
- imgaug数据增强神器:第一章 加载和增强图像
官网:https://imgaug.readthedocs.io/en/latest/ 教程:https://nbviewer.jupyter.org/github/aleju/imgaug-doc/ ...
- opencv把图片转换成二进制_如何增强图像,然后使用Python和OpenCV将其转换为二进制图像?...
我创建了一个简单的例子来说明我要做的事情:#!/usr/bin/python #------------------------------------------------------------ ...
- 【百战GAN】自动增强图像对比度和颜色美感,GAN如何做?
大家好,欢迎来到专栏<百战GAN>,在这个专栏里,我们会进行算法的核心思想讲解,代码的详解,模型的训练和测试等内容. 作者&编辑 | 言有三 本文资源与生成结果展示 本文篇幅:65 ...
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波11 - 直方图处理 - 使用直方图统计量增强图像
使用直方图统计量增强图像 全局均值和方差 μn=∑i=0L−1(ri−m)np(ri)(3.24)\mu_{n} = \sum_{i=0}^{L-1} (r_{i} - m)^{n} p(r_{i}) ...
- 此乃谎言_停止相信电视的谎言:关于“增强”图像的真实真相
此乃谎言 You've seen it over and over. The FBI uses their advanced technology to "enhance" a b ...
- Halcon 增强图像对比度
Halcon中增强图像的对比度也是预处理中的一环,主要有如下方式: 1. 灰度变换 a. scale_image 原理:可以理解为用一个模板扫描图像中的每一个像素,模板中像素最大值和最小值的 ...
- HSV模型简介以及利用HSV模型随机增强图像
文章目录 图像HSV模型简介 RGB模型转HSV模型 opencv关于HSV模型实验 随机增强图像HSV 图像HSV模型简介 HSV(Hue, Saturation, Value)是根据颜色的直观特性 ...
- imgaug: 一个很有用的图像数据增强库
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 在深度学习项目中,寻找数据花费了相当多的时间.但在很多实际的项目中,我们难以找到充足的数据来完 ...
- 使用Python中的OpenCV降噪功能增强图像的3个步骤
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在本文中,我们将展示如何通过三个简单的步骤来实现降噪.我们将使用机 ...
最新文章
- PostgreSQL 模式删除背后的代码
- Scrapy-redis实现分布式爬取的过程与原理
- Callable接口-创建线程的第三种方法
- 机器人的自述作文_机器人的自述作文600字
- 一文详解物化视图改写
- wx.checkjsapi 一直显示ok_Python下调用json.dumps中文显示问题及解决办法
- Mac(OS X)下的环境变量配置不生效解决办法
- NumPy 官方 中文文档 开发手册
- c语言中math的作用,C语言Math函数库简介
- 阿里笔试题20春招笔试题汇总_python版本
- DevExpress 设计Ribbon界面
- 当AI学会共情,港科大新研究赋予Chatbot同理心 | 一周AI最火论文
- 计算机之父童年的故事教学设计,计算机之父童年的故事 教学设计
- 【FACT】函数使用技巧
- java中如何将十进制转换为二进制
- mov DWORD PTR [rbp-0xc],0xa
- Android 根据时间显示问好语句(早上好、上午好、中午好、下午好、晚上好)
- 安卓语音识别(RecognizerIntent)
- function函数的各种写法
- org.apache.poi往word模板中填充数据(word2003)
热门文章
- php 打印 换页,html的打印代码支持翻页
- oracle数据库等保测评命令,Oracle等保测评相关指令
- unity实践————第一人称射击游戏
- 为 TradingView 添加电话报警(纯文本格式)
- 新的 self-attention 网络结构,Visual Attention Network
- bounce css,Bounce
- 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:8.工厂模式总结
- Verilog笔记——数据检测/独热码检测——Quartus与Modelsim仿真
- 博睿数据一体化智能可观测平台入选中国信通院2022年“云原生产品名录”
- matlab中total函数用法,SUBTOTAL函数的用法及实列