# imgaug包
-----
## 0.安装和使用
```bash
pip install imgaug
```
```python
import cv2
import imgaug.augmenters as iaa
seq = iaa.Sequential([iaa.Fliplr(0.5), ])
img=cv2.imread("./img/test1.jpg")
[img_seq,]=seq(images=[img])
cv2.imshow("test",img_seq)
cv2.waitKey(0)
```
## 1 单样本数据增强
### 1.1 几何空间变换
几何变换类即对图像进行几何变换,包括翻转,旋转,裁剪,变形,缩放等各类操作。
- 翻转
```python
iaa.Fliplr(0.5) # 左右翻转
iaa.Flipud(1) #上下翻转
```
- 剪切
```python
iaa.Crop((0,0,100,100))
```
- 剪切和padding
```python
iaa.CropAndPad(px=None,
percent=None,
pad_mode='constant',
pad_cval=0,
keep_size=True,
sample_independently=True,
name=None,
deterministic=False,
random_state=None)
```
参数:
px: 想要crop(negative values)的或者pad(positive values)的像素点。注意与percent不能同时存在。如果是None, pixel级别的crop不会被使用。int或者int list与上面相同。如果是一个4个元素的tuple,那么4个元素分别代表(top, right, bottom, left),每个元素可以是int或者int tuple或者int list。
percent:按比例来crop或者pad, 与px相同。但是两者不能同时存在。
pad_mode: 填充方式。可以是All, string, string list。可选的填充方式有: constant, edge, linear_ramp, maximum, median, minimum, reflect, symmetric, wrap。具体含义可查numpy文档。
pad_cval: float、int、float tuple、int tuple、float list、int list。当pad_mode=constant的时候选择填充的值。
keep_size: bool类型。经过crop后,图像大小会改变。如果该值设置为1,则在crop或者pad后再缩放成原来的大小。
sample_independently : bool类型。如果设置为False,则每次从px或者percent中选出来的值会作用在四个方位。
- 仿射
```python
# 仿射包括同时对图片做裁剪、旋转、转换、模式调整等多重操作
iaa.Affine(rotate=(-30, 30))
```
- 缩放变形
```python
iaa.Resize({"height": 100, "width": 100})
```
### 1.2 像素颜色变换
- 噪声
```python
# 随机噪声是在原来的图片的基础上,随机叠加一些噪声
#高斯噪声(又称白噪声)。
#将高斯噪声添加到图像中,每个像素从正态分布N(0,s)采样一次,其中s对每个图像采样并在0和0.05 * 255之#间变化:
iaa.AdditiveGaussianNoise(scale=(0, 0.05 * 255))
#矩形丢弃增强器
#在面积大小可选定、位置随机的矩形区域上丢失信息实现转换,所有通道的信息丢失产生黑色矩形块,部分通道
#的信息丢失产生彩色噪声。
#通过将所有像素转换为黑色像素来丢弃2%,但是在具有原始大小的50%的图像的较低分辨率版本上执行此操作,#丢弃2x2的正方形:
iaa.CoarseDropout(0.02, size_percent=0.5)
#丢弃2%的图像,但是在具有原始大小的50%的图像的较低分辨率版本上执行此操作,丢弃2x2个正方形。 此
#外,在50%的图像通道中执行此操作,以便仅将某些通道的信息设置为0,而其他通道保持不变:
iaa.CoarseDropout(0.02, size_percent=0.5, per_channel=0.5)
```
- 模糊
```python
# 减少各像素点值的差异实现图片模糊,实现像素的平滑化。
#使用高斯内核模糊图像的增强器。用高斯内核模糊每个图像,sigma为3.0:
iaa.GaussianBlur(sigma=(0.0, 3.0))
#像素位移增强器
#通过使用位移字段在本地移动像素来转换图像。
#通过在强度为0.25的失真场后移动单个像素来局部扭曲图像。 每个像素的移动强度范围为0到5.0:
iaa.ElasticTransformation(alpha=(0, 5.0), sigma=0.25)
```
- HSV变换
```python
# 通过向HSV空间中的每个像素添加或减少V值,修改色调和饱和度实现对比度转换
iaa.WithColorspace(
to_colorspace="HSV",
from_colorspace="RGB",
children=iaa.WithChannels(0, iaa.Add((10, 50))))
```
- RGB变换
```python
# 将图片从RGB颜色空间转换到另一颜色空间,增加或减少颜色参数后返回RGB颜色空间
#每个图像转换成一个彩色空间与亮度相关的信道,提取该频道,之间加-30和30并转换回原始的色彩空间。
iaa.AddToBrightness((-30, 30))
#从离散的均匀范围中采样随机值[-50..50],将其转换为角度表示形式,并将其添加到色相(即色空间中的H通
#道)中HSV。
iaa.AddToHue((-50, 50))
#通过随机值增加或减少色相和饱和度。
#增强器首先将图像转换为HSV色彩空间,然后向H和S通道添加随机值,然后转换回RGB。
#在色相和饱和度之间添加随机值(对于每个通道独立添加-100,100对于该通道内的所有像素均添加相同的
#值)。
iaa.AddToHueAndSaturation((-100, 100), per_channel=True)
#将随机值添加到图像的饱和度。
#增强器首先将图像转换为HSV色彩空间,然后将随机值添加到S通道,然后转换回RGB。
#如果要同时更改色相和饱和度,建议使用AddToHueAndSaturation,否则图像将被两次转换为HSV并返RGB。
#从离散的均匀范围内采样随机值[-50..50],并将其添加到饱和度,即添加到 色彩空间中的S通道HSV。
iaa.AddToSaturation((-50, 50))
```
- 超像素
```python
# 在最大分辨率处生成图像的若干个超像素,并将其调整到原始大小,再将原始图像中所有超像素区域按一定比例替换为超像素,其他区域不改变
#完全或部分地将图像变换为其超像素表示。
#每个图像生成大约64个超像素。 用平均像素颜色替换每个概率为50%。
iaa.Superpixels(p_replace=0.5, n_segments=64)
```
- 锐化(sharpen)与浮雕(emboss)
```python
# 对图像执行某一程度的锐化或浮雕操作,通过某一通道将结果与图像融合
#锐化图像,然后使用0.0到1.0之间的alpha将结果与原始图像重叠:
iaa.Sharpen(alpha=(0.0, 1.0), lightness=(0.75, 2.0))
#浮雕图像,然后使用0.0到1.0之间的alpha将结果与原始图像叠加:
iaa.Emboss(alpha=(0.0, 1.0), strength=(0.5, 1.5))
```
## 2 多样本数据增强
### 2.1 SMOTE
### 2.2 SamplePairing
### 2.3 Mixup