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)

建立一連串的增量流程,這邊的增量都是隨機性的。

  1. iaa.Crop(px=(0, 16)): 隨機切除 0-16 pixel
  2. iaa.Fliplr(0.8): 0.8 的機率翻轉圖片
  3. 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 最強大的地方在於它可以隨機增量的流程。

  1. sometimes: 自定義的 lambda 利用 Sometimes 讓某個增量機率性發生
  2. SomeOf: 隨機使用序列中幾個增量方式
  3. 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)
                    ),
                ])),
        ])
])

留言

熱門文章