Pynote

Python、機械学習、画像処理について

Keras - 画像を扱う utility 関数について

概要

Keras で画像を扱う際の utility 関数について紹介する。
画像をファイルから読み込み ndarray として取得する、画素値が [0, 1] に正規化された画像をファイルに保存するといった場合に利用できる。

関数一覧

PIL 形式から ndarray に変換する。

image.img_to_array(img)
  • 引数
    • x: PIL 形式の画像
  • 返り値
    • 3次元の ndarray

ndarray から PIL 形式に変換する。

前処理等の影響で画素値の範囲が [0, 255] でない場合、[0, 255] の範囲に直した上で PIL 形式の画像に変換してくれる。

image.array_to_img(x)
  • 引数
    • x: 3次元の ndarray
  • 返り値
    • PIL 形式の画像

画像をファイルから読み込み、PIL 形式で返す。

グレースケールの変換、リサイズも読み込むタイミングで行える。

image.load_img(path, color_mode='rgb', target_size=None, interpolation='nearest')
  • 引数
    • path: 画像を読み込むファイルパス
    • color_mode: 読み込んだ後に指定した形式に変換する。('rgb', 'rgba', 'grayscale')
    • target_size: リサイズする大きさ
    • interpolation: リサイズする手法 ('nearest', 'bilinear', 'bicubic')
  • 返り値
    • PIL 形式の画像

画像を表す ndarray をファイルへ保存する。

※ Keras 2.2.0 から導入されたのでそれ以前のバージョンでは利用できない。

前処理等の影響で画素値の範囲が [0, 255] でない場合、[0, 255] の範囲に直した上で保存してくれる。
保存形式は拡張子から判断される。

image.save_img(path, x, **kwargs)
  • 引数
    • path: 画像を保存するファイルパス
    • x: 3次元の ndarray
    • kwargs: PIL.Image.save() に渡す引数

使用例

import numpy as np
from keras.preprocessing import image
from PIL import Image

img = Image.open('dog.jpg')

# PIL 形式から ndarray に変換する。
x = image.img_to_array(img)
print(x.shape, x.dtype)  # (270, 360, 3) float32

# ndarray から PIL 形式に変換する。
img = image.array_to_img(x)
print(type(img))  # <class 'PIL.Image.Image'>

# 画像をファイルから読み込み、PIL 形式で返す。
img = image.load_img('dog.jpg')
print(type(img))  # <class 'PIL.JpegImagePlugin.JpegImageFile'>

# 画像をファイルから読み込み、PIL 形式で返す。
x = np.array(img)
image.save_img('dog.png', x)  # Keras 2.2.0 から導入