简介
Augmentor是一个Python包,旨在帮助机器学习任务的图像数据人工生成和数据增强。它主要是一种数据增强工具,但也将包含基本的图像预处理功能。
特色
Augmentor是用于图像增强的软件包,重点在于提供通常用于生成机器学习问题的图像数据的操作。
Augmentor包含许多用于标准图像处理功能的类,例如Rotate 旋转类、Crop 裁剪类等等。 包含的操作有:旋转rotate、裁剪crop、透视perspective skewing、shearing、弹性形变Elastic Distortions、亮度、对比度、颜色等等;更多的操作及其参数设定,点击
数据增强通常是一个多阶段过程,Augmentor因此采用基于管道的处理方法,操作依次添加形成最终的操作管道。图像送到管道中,管道的操作依次作用到图片上形成新的图片,保存下来。
Augmentor 管道中定义的操作按照一定的概率随机地作用于图片上。
附上代码和解析:
#encoding:utf-8
from PIL import Image#导入处理图片用的库
import os#通过os模块调用系统命令
import os.path#获取文件的属性
from imgaug import augmenters as iaa#imgaug是一个封装好的用来进行图像扩容的python库
import cv2#在python中调用openCV的库
import sys#导入sys模块
import shutil#shutil是python中处理文件,文件夹的模块
def img_func(images, random_state, parents, hooks):
for img in images:
img[::4] = 0
return images
#网上找的lambda的图片关键点扩容的实例代码
def keypoint_func(keypoints_on_images, random_state, parents, hooks):
return keypoints_on_images
#根据图片关键点进行图片扩容
#定义一个图片数据扩容的的变换序列,将图片传入即可。
AugDict = {
"Affine-X-20": iaa.Sequential([iaa.Affine(translate_px={"x": -20})]),#图片向左移动20个像素点
"Affine-Y-20": iaa.Sequential([iaa.Affine(translate_px={"y": -20})]),#图片向上移动20个像素点
"AdditiveGaussianNoise": iaa.Sequential([iaa.AdditiveGaussianNoise(scale=0.1*255)]),#添加高斯噪声,缩放为百分之10
"CoarseDropout": iaa.Sequential([iaa.CoarseDropout(0.02, size_percent=0.5)]),#将原图百分之2的部分用原图的百分之50覆盖
"Dropout": iaa.Sequential([iaa.Dropout(p=(0, 0.2), per_channel=0.5)]),#随机去掉一些像素点,比例为一半,把这些像素点变为0
"MedianBlur": iaa.Sequential([iaa.MedianBlur(k=(3, 5))]),#中值模糊
"AverageBlur": iaa.Sequential([iaa.AverageBlur(k=((5, 8), (1, 3)))]),#均值模糊
"GaussianBlur": iaa.Sequential([iaa.GaussianBlur(sigma=(0.0, 1.5))]),#高斯模糊
"Lambda": iaa.Sequential([iaa.Lambda(img_func, keypoint_func)]),#对每个图像的关键点进行变换的函数,将每张图片每隔两行的像素点变成黑色的条带,关键点保留
"Affine-R+25": iaa.Sequential([iaa.Affine(rotate=25)]),#将图片向右旋转25度
"Affine-R-25": iaa.Sequential([iaa.Affine(rotate=-25)])#将图片向左旋转25度
}
srcDir = "G:/qdy2/srcDataRename"#待扩容图片的存放地址
imageNameDict = {}#存放图片名称的字典
for subDir in os.listdir(srcDir):#返回待扩容图片文件夹名字
subDirPath = os.path.join(srcDir, subDir)#得到待扩容文件夹的路径
imageNameList = []#新建一个列表
for imageName in os.listdir(subDirPath):#获取待扩容图片名称
imageNameList.append(imageName)#将待扩容图片名称存放到列表中
imageNameDict[subDir] = imageNameList
AUGPath = 'G:/qdy2/aug'#扩容后图片存放路径,扩容后得到的图片存放的地址
for AugDictKey in AugDict.keys():#遍历扩容字典中的键值对
subAugDirPath = os.path.join(AUGPath, '256Data%s'%AugDictKey)#将扩容后的存放图片路径与键联合生成新的路径
for iamgeDir in imageNameDict.keys():
classDirPath = os.path.join(subAugDirPath, iamgeDir)
for iamgeName in imageNameDict[iamgeDir]:
AugImagePath = os.path.join(classDirPath, iamgeName.split('.')[0] + '_%s.jpg'%AugDictKey)
DstImagePath = os.path.join(srcDir, iamgeDir, iamgeName.split('.')[0] + '_%s.jpg'%AugDictKey)
shutil.copy(AugImagePath, DstImagePath)