各种参数设置下的扩充效果可见:https://blog.csdn.net/a486259/article/details/120225202
扩充后的某些数据必然是不符合原先的语义标签的,扩充后应该人工对数据进行筛选
from PIL import Image
import numpy as np
from keras.preprocessing import image
import os
# 生成图片地址和对应标签
file_dir1 = r"语义分割\img"
save_path1="数据-kc\img"
file_dir2 = r"语义分割\label"
save_path2="数据-kc\label"
if not os.path.exists(save_path1):
os.makedirs(save_path1)
if not os.path.exists(save_path2):
os.makedirs(save_path2)
shape=(200,200)
seed = 1
# 设置生成器参数
datagen = image.ImageDataGenerator(
fill_mode='nearest', #操作导致图像缺失时填充方式。constant,nearest,eflect,wrap
rotation_range=90 , # 指定旋转角度范围
zca_whitening=True,#图像白噪音
brightness_range=[0.3,1.5],#添加随机光照
width_shift_range=0.2, # 水平位置平移
height_shift_range=0.2, # 上下位置平移
zoom_range=[0.9,1],
horizontal_flip=True, # 随机对图片执行水平翻转操作
vertical_flip=True, # 对图片执行上下翻转操作
shear_range=20,
rescale=1./255, # 缩放
data_format='channels_last')
gen1=datagen.flow_from_directory(file_dir1,
target_size=shape,
batch_size=15,
save_to_dir=save_path1,
save_prefix='xx',
seed=seed,
save_format='jpg')
gen2=datagen.flow_from_directory(file_dir2,
target_size=shape,
batch_size=15,
save_to_dir=save_path2,
save_prefix='xx',
seed=seed,
save_format='jpg')
import math
step=math.ceil(len(gen1.classes)/gen1.batch_size)
#把数据扩充50倍
for i in range(50*step):
gen1.next()
gen2.next()