前言 以下示例显示了包含许多不同增强器的大型增强序列,从而导致增强图像发生重大变化。根据用例,这些增强可能过于强大,有可能导致图像的破坏,为了削弱的影响,可以降低的值来减少。如以下代码的概率
#Sometimes(0.5, ...) 以50%的概率下应用我们指定的图像增强,
sometimes = lambda aug: iaa.Sometimes(0.3, aug)
代码 【图像处理|python-快速图像增强-imgaug库的运用】直接上代码,每一段都添加了注释。注意一点,不需要把所有的功能都运用到你的模型中去(过多的操作可能导致图片原始休息被破坏),通过注释的方式选择合理的处理操作。
# Sometimes(0.5, ...) 以50%的概率下应用我们指定的图像增强,
sometimes = lambda aug: iaa.Sometimes(0.3, aug)# 定义将应用于每个图像的增强步骤序列。
seq = iaa.Sequential(
[
#
#1, 将以下增强器应用于大多数图像.
#
iaa.Fliplr(0.5), # 水平翻转所有图像的50%
iaa.Flipud(0.2), # 垂直翻转所有图像的20%#2,将一些图像裁剪为其高度/宽度的0-10%
sometimes(iaa.Crop(percent=(0, 0.1))),#对某些图像应用仿射变换
#- 缩放到图像高度/宽度的80-120%(每个轴独立)
#- 相对于高度/宽度(每轴)从-20转换为+20
#- 旋转-45到+45度
#- 剪切-16到+16度
#- order:使用最近邻居或双线性插值(快速)
#-mode:使用任何可用模式填充新创建的像素
#查看可用模式的API或scikit-image
#-cval:如果模式是常量,则使用随机亮度
#为新创建的像素(例如,有时是黑色,
#有时是白色的)
#3
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
)),# 4,每个执行0到5个以下(不太重要)的增强器图片。 不要执行所有这些,因为这往往太强大了,会导致图片信息破坏。
iaa.SomeOf((0, 5),
[
#4-1,将一些图像转换为超像素表示,每个图像采样20到200个超像素,但不要用平均值替换所有超像素,只用其中一些(p_replace)。
sometimes(
iaa.Superpixels(
p_replace=(0, 1.0),
n_segments=(20, 200)
)
),#4-2,用不同的强度模糊每个图像
#curssian blur(sigma在0到3.0之间),
#average / uniform blur(内核大小介于2x2和7x7之间)
#incentral blur(内核大小介于3x3和11x11之间)。
iaa.OneOf([
iaa.GaussianBlur((0, 3.0)),
iaa.AverageBlur(k=(2, 7)),
iaa.MedianBlur(k=(3, 11)),
]),,4-3锐化每个图像,使用0(无锐化)和1(完全锐化效果)之间的alpha将结果与原始图像叠加。
iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),# 4-4与锐化相同,但具有压花效果。
iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),#4-5 在一些图像中搜索所有边缘或有向边缘。 然后将这些边缘标记为黑白图像,并使用0到0.7的alpha覆盖原始图像。
sometimes(iaa.OneOf([
iaa.EdgeDetect(alpha=(0, 0.7)),
iaa.DirectedEdgeDetect(
alpha=(0, 0.7), direction=(0.0, 1.0)
),
])),# 4-6,为某些图像添加高斯噪声。 在50%概率下,每个通道和像素随机采样噪声。在所有情况的另外50%中,每个像素采样一次(即亮度改变)。
iaa.AdditiveGaussianNoise(
loc=0, scale=(0.0, 0.05*255), per_channel=0.5
),#4-7,随机丢弃所有像素的1到10%(即将它们设置为黑色)或将它们放在原始大小的2-5%的图像上。
iaa.OneOf([
iaa.Dropout((0.01, 0.1), per_channel=0.5),
iaa.CoarseDropout(
(0.03, 0.15), size_percent=(0.02, 0.05),
per_channel=0.2
),
]),#4-8,以5%的概率反转每个图像的通道。
iaa.Invert(0.05, per_channel=True),# 4-9,为每个像素添加-10到10的值。
iaa.Add((-10, 10), per_channel=0.5),#4-10, 更改图像的亮度(原始值的50-150%)。
iaa.Multiply((0.5, 1.5), per_channel=0.5),# 4-11,提高或降低图像的对比度。
iaa.ContrastNormalization((0.5, 2.0), per_channel=0.5),#4-12,将每个图像转换为灰度,然后使用随机alpha覆盖原始图像。即 去除不同强度的颜色。
iaa.Grayscale(alpha=(0.0, 1.0)),# 4-13, 在一些图像中局部移动像素(具有随机强度)。
sometimes(
iaa.ElasticTransformation(alpha=(0.5, 3.5), sigma=0.25)
),#4-14 ,在一些图像中,扭曲局部区域的强度。
sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.05)))
],
# 以随机顺序执行上述所有增强操作
random_order=True
)
],
#以随机顺序执行上述所有增强操作
random_order=True
)
查看效果 这里用到的是kaggle比赛的数据,如下:
import numpy as np
import imgaug as ia
import imgaug.augmenters as iaa
ia.seed(1)#读取图片
train_file=pd.read_csv("train.csv")['id_code'].values
train_label=pd.read_csv("train.csv")['diagnosis'].valuestrain_file1=[]
for file in tqdm(train_file):
dirs_="train_images/"+file+".png"
train_file1.append(dirs_)train_img=[]
for name in tqdm(train_file1[0:12]):
img =cv2.resize(cv2.imread(name),(224,224))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#img = crop_image_from_gray(img)
train_img.append(img)
del img
train_img=np.array(train_img,dtype="uint8")
#显示原始图像
fig, ax = plt.subplots(nrows=1, ncols=11, figsize=(20,12))
for i in range(11):
ax[i].imshow(train_img[i])
文章图片
接下来我们看看经过处理之后的图像:
images_aug = seq(images=train_img) #把原始数据进行处理
fig, ax = plt.subplots(nrows=1, ncols=11, figsize=(20,12))#显示图像
for i in range(11):
ax[i].imshow(images_aug[i])
文章图片
如上是使用所有操作后的图像。这里再次建议,合理选择需要的操作,不然不止你不认得处理出来是个啥玩意,你的模型也不会认得…
推荐阅读
- 图像增强|Python imgaug库 安装与使用 (图片加模糊光雨雪雾等特效)
- 人工智能|要么到岗,要么离职!马斯克(特斯拉「远程办公」到此结束)
- 机器学习|windows环境下安装TensorRT 5.0教程(win10)
- 机器学习|机器学习&深度学习资料汇总
- 超分辨率重建|论文阅读笔记之——《Multi-level Wavelet-CNN for Image Restoration》及基于pytorch的复现
- MATLAB|【QSPK图像传输】基于QPSK的多用户图像无线传输matlab仿真
- 模式识别|《模式识别》学习笔记(三)
- 初学萌新|《机器学习方法(第三版)——李航》学习笔记(一)
- 机器学习|Spark ALS 协同过滤算法实践