画像処理の勉強の仕方についてもっと知りたい。
これまでPythonでデータを扱い際に使用するライブラリのうち、Numpy,Matplotlibについて説明しました。(以下の記事も参照してください)
NumPyの入門【基礎から解説】
続きを見る
【Python】matplotlibの使い方【基本から応用まで】
続きを見る
今回は画像を処理するライブラリであるPillowについて解説していきます。画像を用いた機械学習でも画像の分類や画像処理をしていく必要があります。
この記事で画像を扱うライブラリに慣れましょう。
画像を扱うライブラリには以下の2 つがあります。今回はそのうちPillowの使い方について紹介していきたいと思います。
画像を扱うライブラリ
- Pillow
- Imageio
今回はこのうちPillowについて解説したいと思います。
Pillowとは
PillowはPythonで画像を取扱う際の基本となるライブラリです。
機械学習を行う際においても、Pillowを用いたライブラリで画像処理することも多いですので、画像処理の取り扱い方の基本を勉強していきましょう。
本記事の学習目標
- 画像の読み込む事ができる
- 画像をRGBからモノクロ画像(L画像)へ変換する方法を習得できる
- 画像の保存の仕方がわかる
では早速みていきましょう。
画像の読み込み方
Pillowを使うために、まずはJupyter Notebookを起動しましょう。
起動したら、下記のアイコン画像 tommy.png を保存してください。(右クリックして「名前をつけて保存」すればokです。(ファイル名は tommy.png としてください。その様に設定しています。))
その上で、Cloud9へアップロードしてください。アップロードする場所は作業を行うファイルを作成したフォルダと同じディレクトリにしましょう。
次に tommy.png を読み込みます。
type()
で確認してみましょう。
1 2 3 4 5 6 7 | from PIL import Image import matplotlib.pyplot as plt %matplotlib inline tommy = Image.open("tommy.png") print(type(tommy)) |
出力結果は以下です。
1 | <class 'PIL.PngImagePlugin.PngImageFile'> |
エラーの対処法
ここで以下のエラーが出た時の対処法です。
1 | ImportError: No module named 'PIL' |
この際には
1 | pip install pillow |
を入力してから、再度実行しましょう。※ PILはPython2系ではある様ですが、3系ではなさそうです。
次に、plt.imshow()
を実行すると、画像を表示する事ができます。
plt.imshow()
の引数 ()
には画像( tommy
)を指定してください。
1 | plt.imshow(tommy) |
出力するとこの様になります。
モノクロ画像に変換したい時には、Pillowのオブジェクトである convert()
を実行しましょう。
tommy.png のモノクロ画像をgray_tommy.pngとして保存します。
ちなみにモノクロ画像に変換するためには、convert()
の引数に "L"
と入力すればokです。
1 2 | gray_tommy = tommy.convert("L") gray_tommy.save("gray_tommy.png") |
これで gray_tommy.png が同じディレクトリに保存されました。
この様なモノクロトミーが表示されます。
画像のリサイズ・回転・平行移動
リサイズ
画像のサイズを変更するためには Pillow の Imageモジュールである resize()
を使用します。
引数は (画像の横のサイズ, 画像の縦のサイズ)
というタプル形式で指定します。
実際に tommy
のファイルを圧縮してresize してみましょう。新しくresizeしたファイルを tommy_resized
とします。
1 2 | tommy_resized = tommy.resize((250, 375)) plt.imshow(tommy_resized) |
回転
画像を回転させるには Pillow の Imageモジュールである rotate()
を使用します。rotate()
の引数 ()
に、回転させたい角度を記入します。注意点は反時計回りである事なので、留意してください。
今回は元々の画像を半時計回りに55度回転させて、新しく保存するオブジェクトを tommy_rotated
としました。
1 2 | tommy_rotated = tommy.rotate(55) plt.imshow(tommy_rotated) |
平行移動
画像を平行移動させる時も、回転させる時と同様にPillow の Imageモジュールである rotate()
を使用します。
平行移動する際には、回転しない様に回転角度を 0度
としてください。さらに平行移動させる時には、translate=(横の移動,縦の移動)
を追加しましょう。
記載の仕方としては オブジェクト.rotate(回転角度, translate = (横の移動, 縦の移動))
という様に記載します。
今回は35 度半時計回りに回転させつつ、横に110pxl、縦に110pxl平行移動させてみます。すると以下の様になります。
1 2 | tommy_translated = tommy.rotate(35, translate = (110, 110)) plt.imshow(tommy_translated) |
まとめ
如何でしたでしょうか。
今回はpillowを用いた画像の基本的な処理の仕方を学習しました。
医学の分野での機械学習として利用する際には、必ずしもカラー画像で学習させる必要がない場合があります。
例えば、色調の度合いのみが機械学習のために重要であるならばモノクロ画像にして機械学習を行う方が効率も良い時があり、その様な際にはモノクロ画像に変換したり、また画像の位置を調整する際に移動させたりしないといけない場合があります。
今回は以上とします。