# 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