Python imgaug (1) Basic Image Augmentation
imgaug 是一個簡單好用的 Image Augmentation package,它可以簡單並隨機組合各種圖像增量的方法 (e.g., GaussianBlur, AdditiveGaussianNoise, Affine, etc)。
1. 基本用法:
import 一些會用到的套件,這邊用 plt 和 PIL 因為它們都是 RGB 的影像套件。
seed 用來設定 imgaug 的隨機算法。
import imgaug as ia import imgaug.augmenters as iaa import numpy as np import matplotlib.pyplot as plt from PIL import Image ia.seed(10)
建立一連串的增量流程,這邊的增量都是隨機性的。
- iaa.Crop(px=(0, 16)): 隨機切除 0-16 pixel
- iaa.Fliplr(0.8): 0.8 的機率翻轉圖片
- iaa.GaussianBlur(sigma=(3.0, 10.0)): GaussianBlur sigma 設定在 3-10 之間
seq = iaa.Sequential([ iaa.Crop(px=(0, 16)), iaa.Fliplr(0.8), iaa.GaussianBlur(sigma=(3.0, 10.0)) ])
最後讀取增量圖像,圖像批次的維度順序是 [N H W C]。
我們這裡只讀取一張影像所以 batch size 為 1。
images = np.expand_dims(Image.open("keroro.jpg"), axis=0) # [1 H W C] images_aug = seq(images=images) for org, aug in zip(images, images_aug): plt.figure("org") plt.imshow(org) # 原圖 plt.figure("aug") plt.imshow(aug) # 增量 plt.show()
原圖:
增量處理:
2. 隨機選擇增量方式:
imgaug 最強大的地方在於它可以隨機增量的流程。
- sometimes: 自定義的 lambda 利用 Sometimes 讓某個增量機率性發生
- SomeOf: 隨機使用序列中幾個增量方式
- OneOf: 隨機使用序列中一個增量方式
sometimes = lambda aug: iaa.Sometimes(0.5, aug) seq = iaa.Sequential([ iaa.Crop(px=(0, 16)), iaa.Fliplr(0.8), sometimes(iaa.Crop(percent=(0, 0.1))), iaa.GaussianBlur(sigma=(3.0, 10.0)), iaa.SomeOf((0, 3), [ sometimes( iaa.Superpixels( p_replace=(0, 1.0), n_segments=(20, 200) ) ), iaa.OneOf([ iaa.GaussianBlur((0, 3.0)), iaa.AverageBlur(k=(2, 7)), iaa.MedianBlur(k=(3, 11)), ]), sometimes(iaa.OneOf([ iaa.EdgeDetect(alpha=(0, 0.7)), iaa.DirectedEdgeDetect( alpha=(0, 0.7), direction=(0.0, 1.0) ), ])), ]) ])
留言
張貼留言