github地址 :https://github.com/albumentations-team/albumentations
官网地址:https://albumentations.readthedocs.io/en/latest/
github: https://github.com/aleju/imgaug
官网地址: https://imgaug.readthedocs.io/en/latest/
github地址:https://github.com/mdbloice/Augmentor
官网地址: https://augmentor.readthedocs.io/en/master/
github地址: https://github.com/UjjwalSaxena/Automold–Road-Augmentation-Library
github 地址:https://github.com/AgaMiko/data-augmentation-review
其中我所使用较多的是第一种:albumentation。接下来是我初次使用的一些方案
# python环境下安装的方式为:
pip install albumentations
import albumentations as A
import cv2
# 单种增强使用方式
img = cv2.imread("you path of image")
transform = A.RandomResizedCrop()
img_transform = transform(image=img)["image"]
# 多种增强使用方式
img = cv2.imread("you path of image")
transform = A.Compose([
A.RandomResizedCrop(),
A.CropAndPad()
])
img_transform = transform(image=img)["image"]
# 任意在多种增强方式中选择一种
img = cv2.imread("you path of image")
transform = A.Compose([
A.OneOf([
A.RandomResizedCrop(),
A.CropAndPad()
])
])
img_transform = transform(image=img)["image"]
# 任意在n种方式种选择n-1种
img = cv2.imread("you path of image")
transform = A.Compose([
A.SomeOf([
A.RandomResizedCrop(),
A.CropAndPad(),
A.RandomSizedCrop()
], n=random.randint(1, 2))
])
img_transform = transform(image=img)["image"]
# 还可以将SomeOf 和 OneOf 组合起来使用
# 每种变换还自带选择的概率
# 比如下面的概率为默认概率
transform = A.RandomResizedCrop()
# 将概率设置为0.8
transform = A.RandomResizedCrop(p=0.8)
#截取或者填充图片
#第一个参数和第二个参数同时只能设定一个
#第一个参数 px 指在图片四周添加一定px的填充 可以是int型数值 或者 2位元组 4位元组; 填充的颜色可以由pad_cval(0,255)修改
#第二个参数 percent 指按比例添加填充
#第一和第二 当为正数时,填充图片,为负数时裁剪图片
transform = A.CropAndPad(px=(random.randint(0,int(img.shape[0]*0.1))),pad_cval=random.randint(0,255))
#中心裁剪
#第一个参数 高度
#第二个参数 宽度
transform = A.CenterCrop(random.randint(int(height*0.7),int(height*0.9)),random.randint(int(weight*0.7),int(weight*0.9)))
#先随机裁剪 再 resize到一定的尺度
#第一个参数 高度
#第二个参数 宽度
#第三个参数 随机裁剪的比例
transform = A.RandomResizedCrop(224,224,(0.7,0.9))
如果遮罩为非空,则使用遮罩裁剪区域,否则进行随机裁剪。
未用
#裁剪输入的随机部分并将其重新缩放到某个大小
#第一个参数 为裁剪的最大最小值,相当于裁剪范围
#第二个参数 高度
#第三个参数 宽度
transform = A.RandomSizedCrop((100,height),height,weight)
这个是yolo ssd 数据增强使用的 现在不需要 所以不添加
#随机更改图片的亮度、对比度、饱和度、颜色
#第一个参数 亮度
#第二个参数 对比度
#第三个参数 饱和度
#第四个参数 颜色
#上面4个参数范围在(0,1)之间
transform = A.ColorJitter(0.2, 0.5, 0.5, 1)
#三原色在原本基础上增加或者减小
#前面三个参数分别是R、G、B三个通道在原来的基础上增加或者减小
transform = A.RGBShift(np.random.randint(0,255),np.random.randint(0,255),np.random.randint(0,255))
#gamma变换
#第一个参数是gamma变换的范围 目前不知道范围的局限
transform = A.RandomGamma((0,255))
# 将原来的图片灰度化
transform = A.ToGray()
#压缩图片
#第一个参数 是压缩图片的下界
#第二个参数 是压缩图片的上界
transform = A.ImageCompression(quality_lower=10,quality_upper=90)
#高斯模糊
#第一个参数 : blur_limit [0, inf)
#第二个参数 : sigma_limit [0, inf)
transform = A.GaussianBlur(blur_limit=(1, 7),sigma_limit=(1,8),p=1)
#中值模糊
#第一个参数 :模糊范围
#第二个参数 : 概率 p
transform = A.MedianBlur(blur_limit=9, p=1)
#原函数是cutout,随机在图上裁剪出小方块
#第一个参数是 方块的大小
#第二个参数是 方块最大高度
#第三个参数是 方块最大宽度
transform = A.CoarseDropout(max_holes=3,max_height=100,max_width=100,p=1)
# 随机加阴影
transform = A.RandomShadow(p = 1)
# 随机添加传感器噪声
transform = A.ISONoise(p=1)
# 浮雕
transform = A.Emboss(p = 1)
# 锐化
transform = A.Sharpen(p=1)
[2021/11/24]
#以缩小再放大的形式降低图片的质量
transform = A.Downscale(scale_min=0.1,scale_max=0.95,p = 1)
# 自适应直方图均衡化
transform = A.CLAHE(p = 1)
# 随机丢弃通道
transform = A.ChannelDropout(p=1)
# 随机变换通道
transform = A.ChannelShuffle(p=1)
#取一个输入数组,其中所有值都应位于 [0, 1.0] 范围内,将它们乘以 max_value,然后将结果值转换为 dtype 指定的类型。 如果 max_value 为 None 转换将尝试从 dtype 参数推断数据类型的最大值。
transform = A.FromFloat(max_value=random.randint(0, 10), p=1)
# 加入高斯噪声
transform = A.GaussNoise(var_limit=(10,1000),p=1)
# Glass模糊
transform = A.GlassBlur(max_delta=random.randint(1,5),p=1)
# 水平、垂直、翻转图像
transform = A.Flip(p=1)
# 添加网格
transform = A.GridDropout(unit_size_min=2,unit_size_max = random.randint(5,8),p=1,fill_value=random.randint(0,255),mask_fill_value=random.randint(0,100))