scikit-imageのお勉強 第1回 dataモジュールとioモジュール ~画像の入出力~
scikit-imageの便利機能を、自分への備忘録としてメモしていくシリーズです。 今回は第1回です。
scikit-imageとはなんぞや
公式ページはコチラ: scikit-image: Image processing in Python — scikit-image
Pythonで画像処理を可能にするためのパッケージです。SciPyのためのツールボックスとのことですが、単体で使っても便利です。コンピュータービジョンがらみで色々な機能が使えます。
pip
でインストールできます。
$ pip install scikit-image
今回の環境は
です。
18種類のモジュール
APIのページを見てもらうとわかりますが、モジュールが18種類あります。
API Reference for skimage 0.14.0 — skimage v0.14.0 docs
- color 色空間
- data テスト画像呼び出し等
- draw 線・円などの図形描画
- exposure 露出補正
- external TIF操作
- feature 特徴抽出など
- filters フィルター処理
- future
- graph グラフ
- io 画像ファイル出入力・画像表示
- measure 測定
- morphology モルフォロジー処理
- novice
- restoration 復元
- segmentation 区画化
- transform 変換
- util ユーティリティ
- viewer ビューワー
たくさんあるので大変ですが、細かく使い方について解説しているページがあまりない気がしたので、使えそうな関数について地道に見ていく予定にしています。
今回は2番のdata
と10番のio
から解説します。
dataモジュール
scikit-imageに付属しているテスト画像を読み込むことができます。
準備
まず、Jupyterを起動します。
ロードした画像をmaplotlibで表示できるように準備します。
%matplotlib inline import matplotlib.pyplot as plt
画像表示用の関数を作成しておきます。
def image_show(img): plt.imshow(img) plt.xticks([]) plt.yticks([]) plt.show()
テスト画像のロード
data.load()
でロードできます。
skimage
フォルダの中にdata
フォルダがあり、その中にテスト画像が入っています。
もし場所がわからない場合でも(邪道ではありますが、、、)、試しに存在しない画像ファイルで実行してみると、エラーメッセージからどこを探索しているのかがわかります。
from skimage import data data.load('.png')
#FileNotFoundError: [Errno 2] No such file or directory: '/Users/xxx/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/skimage/data/.png'
フォルダの場所がわかったら、試しにこのフォルダに入っているpng形式のファイル一覧を表示してみます。
import os folder = '/Users/xxx/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/skimage/data/' files = [img for img in os.listdir(folder) if img.endswith('.png')] print(files)
['astronaut.png', 'block.png', 'brick.png', 'bw_text.png', 'camera.png', 'checker_bilevel.png', 'chelsea.png', 'chessboard_GRAY.png', 'chessboard_RGB.png', 'clock_motion.png', 'coffee.png', 'coins.png', 'color.png', 'foo3x5x4indexed.png', 'grass.png', 'horse.png', 'ihc.png', 'logo.png', 'moon.png', 'motorcycle_left.png', 'motorcycle_right.png', 'page.png', 'palette_color.png', 'palette_gray.png', 'phantom.png', 'rough-wall.png', 'text.png']
これらの画像ファイルをdata.load()
で呼び出すことができます。
f = 'camera.png'
loaded_img = data.load(f)
image_show(loaded_img)
テスト画像のロードその2
ファイル名を指定してロードする以外に、関数として呼び出す方法もあります。
rocket = data.rocket() image_show(rocket)
chels = data.chelsea() image_show(chels)
immuno = data.immunohistochemistry() image_show(immuno)
とても簡単ですね。
ちなみに、ロードしたデータ型はNumPyアレイに
type(immuno) #numpy.ndarray
データは3次元で、「縦、横、色」の順になっています。
chels.shape
#(300, 451, 3)
ioモジュール
ioモジュールには自前の画像の読み込みや保存に関わる機能が含まれています。
いらすとやさんより画像をダウンロードさせてもらってテストしてみます。
データの読み込み
io.imread()
で読み込むことができます。
from skimage import io f = 'gardening_tane.png' img1 = io.imread(f) image_show(img1)
データの保存
io.imsave()
で書き出すことができます。
第1引数:保存先ファイル名
第2引数:保存する画像
io.imsave('test.png',img1)
ioモジュールにはこの他にも画像の表示やプラグインの呼び出しに関わる関数が存在しますが、今回は割愛します。
今日はここまで。