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)
),
])),
])
])
留言
張貼留言