使用keras中的方法对图像进行增强,包括 旋转,裁剪,灰度化,平移,仿射变换
from PIL import Image
import random
from keras.preprocessing.image import (
random_rotation, random_shift, random_shear, random_zoom,
random_channel_shift, transform_matrix_offset_center, img_to_array)
img = Image.open(f'./train/xxxx.jpg')
img_arr = img_to_array(img)
imgs = [
random_rotation(img_arr, 30, row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest') * 255 for _ in range(5)]
imgs = [
random_shift(img_arr, wrg=0.1, hrg=0.3, row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest') * 255 for _ in range(5)]
imgs = [
random_shear(img_arr, intensity=0.4, row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest') * 255 for _ in range(5)]
imgs = [
random_zoom(img_arr, zoom_range=(1.5, 0.7), row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest') * 255 for _ in range(5)]
def random_greyscale(img, p):
if random.random() < p:
return np.dot(img[...,:3], [0.299, 0.587, 0.114])
return img
imgs = [
random_greyscale(img_arr, 0.5) * 255 for _ in range(5)]
def augmentation_pipeline(img_arr):
img_arr = random_rotation(img_arr, 18, row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest')
img_arr = random_shear(img_arr, intensity=0.4, row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest')
img_arr = random_zoom(img_arr, zoom_range=(0.9, 2.0), row_axis=0, col_axis=1, channel_axis=2, fill_mode='nearest')
img_arr = random_greyscale(img_arr, 0.4)
return img_arr
imgs = [augmentation_pipeline(img_arr) * 255 for _ in range(5)]