在上一篇文章 <https://blog.csdn.net/zong596568821xp/article/details/83105173>
中,介绍了常用的数据增强的方法,并提到了实现这些方法的一个库imgaug,这篇文章就对该库的使用方法进行一个总结。

1 介绍

imgaug是一个用于机器学习实验中图像增强的python库,支持python2.7和3.4以上的版本。
它支持多种增强技术,允许轻松组合这些技术,具有简单但功能强大的随机界面,可以在这些界面上增加图像和关键点/界标,并在后台进程中提供增强功能以提高性能。

相关文档:快速开始 <http://imgaug.readthedocs.io/en/latest/source/examples_basics.html>、
函数示例 <http://imgaug.readthedocs.io/en/latest/source/augmenters.html>、API介绍
<http://imgaug.readthedocs.io/en/latest/source/api.html>、github
<https://github.com/aleju/imgaug>

2 安装方法

首先安装依赖
pip install six numpy scipy matplotlib scikit-image opencv-python imageio pip
install imgaug
如果想安装最新版本的imgaug,可直接在github上下载源码进行安装,方法如下
pip install git+https://github.com/aleju/imgaug
或者
git clone https://github.com/aleju/imgaug cd imgaug python setup.py install
3 效果预览



4 测试程序

整体流程为:定义变换序列(Sequential)→读入图片(imread)→执行变换(augment_images)→保存图片(imwrite)
#!usr/bin/python # -*- coding: utf-8 -*- import cv2 from imgaug import
augmenters as iaa #imgaug test seq = iaa.Sequential([ iaa.Crop(px=(0, 16)), #
从每侧裁剪图像0到16px(随机选择) iaa.Fliplr(0.5), # 水平翻转图像 iaa.GaussianBlur(sigma=(0, 3.0))
# 使用0到3.0的sigma模糊图像 ]) imglist=[] img = cv2.imread('kobe.jpg')
imglist.append(img) images_aug = seq.augment_images(imglist)
cv2.imwrite("imgaug.jpg",images_aug[0])
原图kobe.jpg



结果imgaug.jpg



5 函数介绍

在API里边,我们可以看到有很多函数可以实现数据增强,接下来对这些函数的功能进行介绍,参数的具体含义请参考另一篇博文
<https://blog.csdn.net/u012897374/article/details/80142744>或者函数说明
<https://imgaug.readthedocs.io/en/latest/source/augmenters.html>

函数 描述
Sequential(C, R) 选取一系列子增强器C作用于每张图片,第二个参数表示是否对每个batch的图片应用不同顺序的Augmenter
list。当设置为True时,不同batch之间图片的处理顺序都会不一样,但是同一个batch内顺序相同
SomeOf(N, C, R)
将Augmenter中的部分变换应用在图片处理上,而不是应用所有的Augmenter。例如:可以定义20种变换,但每次只选择其中的5个。但是不支持固定选择某一个Augmenter。
OneOf(C) 每次从一系列Augmenters中选择一个来变换。.
Sometimes(P, C, D) 对batch中的一部分图片应用一部分Augmenters,剩下的图片应用另外的Augmenters。
WithColorspace(T, F, C)
在某个特定的颜色空间对图像进行变换。即:先将图片从一个颜色空间变换到另一个颜色空间,然后在另一个颜色空间中对图像进行变换,最后再变换回原来的颜色空间。
WithChannels(H, C) 从图片中挑选出一个Channel来进行变换,变换完了之后再将该channel merge回去
Noop() 不进行任何变换。某些情况下只想使用一个Augmenter作为占位符,这样可以继续调用augment_image()函数,但实际不作变换。
Lambda(I, K) 自定义一些变换函数
AssertLambda(I, K) assert要变换的图片和keypoint的shape。如果不满足就抛出异常。
AssertShape(S) 如果输入的图像大小不是S,则抛出异常
Scale(S, I) 将图像缩放到固定大小。
CropAndPad(PX, PC, PM, PCV, KS) 截取(crop)或者填充(pad),填充时,被填充区域为黑色。
Pad(PX, PC, PM, PCV, KS) 与CropAndPad()相同,只接受positive values。
Crop(PX, PC, KS) 与CropAndPad()相同,只接受negative values。
Fliplr(P) 水平镜面翻转。
Flipud(P) 上下镜面翻转。
Superpixels(P, N, M) 以(最大)分辨率M生成图像的N个超像素,并调整回原始大小。
然后原始图像中所有超像素区域的P百分比被超像素替换,(1-P)百分比保持不变。
ChangeColorspace(T, F, A) 改变图像空间
Grayscale(A, F) 变成灰度图。
GaussianBlur(S) 高斯扰动。
AverageBlur(K) 从最邻近像素中取均值来扰动。
MedianBlur(K) 通过最近邻中位数来扰动
BilateralBlur(D, SC, SS) 使用距离为D的双边滤波器(如内核大小)模糊图像。
SC是颜色空间中(影响)距离的西格玛,SS是空间距离的西格玛。
Convolve(M) 对图像使用卷积。
Sharpen(A, L) 锐化
Emboss(A, S) 浮雕效果
EdgeDetect(A) 边缘检测
DirectedEdgeDetect(A, D) 特定方向的边缘检测
Add(V, PCH) 随机加上一个值
AddElementwise(V, PCH) 按像素加
AddToHueAndSaturation(V, PCH, F, C) 将值V添加到HSV空间中的每个像素(即修改色调和饱和度)。
AdditiveGaussianNoise(L, S, PCH) 以像素为单位向图像添加高斯白噪声。
Multiply(V, PCH) 给图像中的每个像素点乘一个值使得图片更亮或者更暗。
MultiplyElementwise(V, PCH) 按像素值乘。
Dropout(P, PCH) 随机去掉一些像素点, 即把这些像素点变成0。
CoarseDropout(P, SPX, SPC, PCH) 将矩形框的值设置为0。
Invert(P, PCH) 翻转,将每个像素值p变成255-p。
ContrastNormalization(S, PCH) 改变图像的对比度。
Affine(S, TPX, TPC, R, SH, O, M, CVAL)
仿射变换。包含:平移(Translation)、旋转(Rotation)、放缩(zoom)、错切(shear)。仿设变换通常会产生一些新的像素点,我们需要指定这些新的像素点的生成方法,这种指定通过设置
cval和mode两个参数来实现。参数order用来设置插值方法。
PiecewiseAffine(S, R, C, O, M, CVAL) 随机放置一些规则的网格点然后移动这些点的周围的像素。这回导致局部的扭曲。
PerspectiveTransform(S, KS) 对图像应用随机四点透视变换(有点像高级裁剪形式)。 
ElasticTransformation(S, SM) 通过移动局部像素来变换。
Alpha(F, A, B, PCH) 使用增强器A和B独立增强图像,然后使用Alpha F覆盖结果。如果未提供,A和B默认不执行任何操作。 例如,
使用Alpha(0.9,A)通过A增强图像,然后混合结果,保留原始图像的10%(在A之前)。
如果PCH设置为真,则该过程在通道方面发生,可能具有不同的F(每个图像计算一次A和B)。
AlphaElementwise(F, A, B, PCH)
与Alpha相同,但使用从F采样的连续掩码(值0.0到1.0)逐像素地执行混合。如果PCH设置为true,则过程以像素和通道两种方式发生。
SimplexNoiseAlpha(A, B, PCH, SM, UP, I, AGG, SIG, SIGT)
与Alpha类似,但使用遮罩来混合来自增强器A和B的结果。遮罩是从单纯形噪声中采样的,单层噪声往往是blobby。
掩模在Iiterations中收集(默认为1-3),每次迭代使用聚合方法AGG(默认最大值,即每个像素的所有迭代的最大值)进行组合。
每个掩模在低分辨率空间中采样,最大分辨率为SM(默认为2到16px),并使用方法UP(默认:线性或立方或最近邻居上采样)放大到图像大小。
如果SIG为真,则将sigmoid应用于具有阈值SIGT的掩码,这使得blob具有接近0.0或1.0的值。
FrequencyNoiseAlpha(E, A, B, PCH, SM, UP, I, AGG, SIG, SIGT)
与SimplexNoiseAlpha类似,但会从频域生成噪声掩码。 指数E用于增加/减少频率分量。 高值导致更明显的高频分量。
使用-4到4范围内的值,-2大致生成类似云的模式。