这一篇接上一篇,介绍下常用的方法,目的是为了方便以后调用。后面附上常用方法的结果图。
#coding:utf-8
import imgaug as ia
from imgaug import augmenters as iaa
import numpy as np
import cv2
images = cv2.imread('./origin.jpg',1)
images = np.expand_dims(images,axis=0)
sometimes = lambda aug: iaa.Sometimes(p=0.5, then_list=aug)
####定义一个lambda表达式,可以以p的概率去执行sometimes传递的图像增强
seq = iaa.Sequential(
[
sometimes(iaa.Crop(percent=(0, 0.1),keep_size=True)),####以p=0.5的概率去执行图片裁剪
sometimes(iaa.Affine(
scale={"x": (0.8, 1.2), "y": (0.8, 1.2)},
translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)},
rotate=(-45, 45),
shear=(-16, 16),
order=[0, 1],
cval=(0, 255),
mode=ia.ALL
)),######order = 0 最临近插值 =1双线性插值
####mode取值 * "constant" -> cv2.BORDER_CONSTANT
#* "edge" -> cv2.BORDER_REPLICATE
#* "symmetric" -> cv2.BORDER_REFLECT
#* "reflect" -> cv2.BORDER_REFLECT_101
#* "wrap" -> cv2.BORDER_WRAP
########If ia.ALL, a value from the discrete range [0 .. 255] will be sampled per image。cval图像变化后padding的值
iaa.SomeOf((0, 5), ####从下列序列中挑选0-5个图像增强的方法 相当与random.choice,下面可以放些自认为不太重要的方法
[
sometimes(
iaa.Superpixels(
p_replace=(0, 1.0),
n_segments=(20, 200)
)
),#######执行 SLIC 超像素分割算法,对于每副图片p_replace=0-1的概率替换像素值。生成n_segments个超像素值
######iaa.OneOf == iaa.SomeOf(1,1) 下面3个方法选一个
iaa.OneOf([
iaa.GaussianBlur((0, 3.0)),
iaa.AverageBlur(k=(2, 7)),
iaa.MedianBlur(k=(3, 11)),
]),
####用于锐化图像并将结果与原始图像叠加
iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
# 浮雕图像并将结果与原始图像叠加。
iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
######边缘检测和方向边缘检测与原图相加
sometimes(iaa.OneOf([
iaa.EdgeDetect(alpha=(0, 0.7)),
iaa.DirectedEdgeDetect(
alpha=(0, 0.7), direction=(0.0, 1.0)
),
])),
iaa.OneOf([
iaa.Dropout((0.01, 0.1), per_channel=0.5), ####丢掉1%-10%的像素信息
iaa.CoarseDropout(
(0.03, 0.15), size_percent=(0.02, 0.05),
per_channel=0.2
), #####丢掉矩形块内的像素信息
]),
####5%的概率进行255-像素值进行图像反化
iaa.Invert(0.05, per_channel=True),
# 每个像素加上一个-10到10的值
iaa.Add((-10, 10), per_channel=0.5),
####灰度图 cv2图片通道顺序BGR
iaa.Grayscale(alpha=(0.0, 1.0),from_colorspace='BGR'),
######通过使用位移场在局部移动像素来转换图像。
#论文Simard, Steinkraus and Platt Best Practices for Convolutional Neural Networks applied to Visual Document Analysis in Proc. of the International Conference on Document Analysis and Recognition, 2003
sometimes(
iaa.ElasticTransformation(alpha=(0.5, 3.5), sigma=0.25)
),
#####图像上设置规则网格,并通过仿射变换随机移动这些点的邻域进行图片局部扭曲。
sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.05)))
],
# do all of the above augmentations in random order
random_order=True
)
],
# do all of the above augmentations in random order
random_order=True
)
images_aug = seq.augment_images(images)
print images_aug.shape
images_aug = np.squeeze(images_aug,axis=0)
cv2.imwrite('./all.jpg',images_aug)
原图 Add方法 Affine方法
CoarseDropout DirectedEdgeDetect Dropout
EdgeDetect ElasticTransformation Emboss
Grayscale Invert PiecewiseAffine
Sharpen Superpixels all