scikit-imageを使った画像の平行移動

scikit-imageという便利なライブラリーを見つけた。 画像の平行移動が2行で実装できたので、以下に示す。

import skimage as ski
from skimage import io
from skimage.transform import rescale

def test(self):
    # Lennaさんの画像を読み込み
    img_raw = ski.io.imread(DIR+'lenna.jpg')
    # 512x512から32x32にリスケール
    img = ski.transform.rescale(img_raw, 32/512)
    # 左に3ピクセル、上に5ピクセルだけ平行移動
    matrix_trans = ski.transform.AffineTransform(translation=(3,5))
    img_trans = ski.transform.warp(img, matrix_trans)

    # 画像確認用の背景を白に
    fig = plt.figure()
    fig.patch.set_facecolor('white')

    # 元画像、リスケール画像、平行移動画像を横一列に標示
    plt.subplot(331)
    plt.imshow(img_raw)
    plt.subplot(332)
    plt.imshow(img)
    plt.subplot(333)
    plt.imshow(img_trans)
    plt.show()

画像標示結果は以下の通り。 f:id:Shoto:20170531011003p:plain

scikit-imageを使うためには、import skimage as skiだけで済むはずなのだが、ioとかrescaleは別にimportしないとエラーが出るので、原因を調査中。 またWindows環境だと、PowerShellでコードを実行した際に、画像の表示にio.imshow()が使えないため、上記のようにmatplotlibを利用している。 ただ、画像の回転や拡大にも簡単に行えるようなので、OpenCVとNumPyの組み合わせよりも、Data Augmentationが簡単に実装できそうである。

参考文献