scikit-imageのお勉強 第2回 colorモジュール ~色空間~
scikit-imageの便利機能を、自分への備忘録としてメモしていきます。
第1回はコチラ。
plant-raspberrypi3.hatenablog.com
今回は第2回で色空間について。
colorモジュール
色空間に関するモジュールです。 画像の色空間を変更できます。
公式ページ: Module: color — skimage v0.14.0 docs
色空間を変換する方法は2種類です。
color.convert_colorspace()
関数を使う- 専用の関数(
color.rgb2hsv()
など)を使う
color.convert_colorspace
color.convert_colorspace()
を使う場合の引数は以下の通りです。
第1引数:画像データ
第2引数:元画像の色空間
第3引数:変換後の色空間
はじめに準備として、テスト画像をdata
モジュールで読み込みます。
%matplotlib inline import matplotlib.pyplot as plt from skimage import color, data def image_show(img): plt.imshow(img) plt.xticks([]) plt.yticks([]) plt.show() rocket = data.rocket() image_show(rocket)
早速、color.convert_colorspace()
を実行してみます。
rocket_hsv = color.convert_colorspace(rocket,'RGB','HSV') image_show(rocket_hsv)
専用の関数
color.rgb2hsv()
を試してみます。
rocket_hsv = color.rgb2hsv(rocket) image_show(rocket_hsv)
利用できる色空間はたくさんあります。
基本的な使い方は同じなので、今回はHSV空間に変換する場合のみをご紹介しました。
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モジュールにはこの他にも画像の表示やプラグインの呼び出しに関わる関数が存在しますが、今回は割愛します。
今日はここまで。
「TensorFlow」が「Raspberry Pi」を正式にサポートしたそうです!
これはうれしいニュース!
Pete Warden氏はTensorFlow 1.9について、「Raspberry Pi Foundationとの協力で、TensorFlowの最新リリース1.9は、Pythonのpipパッケージシステムを使い、ビルド済みバイナリからインストール可能になった」と記している。
時間ができたら試してみたいです。
3D可視化ツールMayaviを導入してみる
こんにちは。らずべりーです。特に脈絡もなくPythonの可視化ツールネタ。
Matplotlibにも3D表示機能がありますが、より高度な3D可視化ツールとしてMayaviというのがあるのを知ったので、お試しに導入してみました。
公式ページ
Mayavi: 3D scientific data visualization and plotting in Python — mayavi 4.6.1 documentation
日本語解説 (以下コメントの引用元)
3.5. Mayavi による 3D プロット — Scipy lecture notes
Mayavi は対話的な3次元プロットパッケージです。 matplotlib も簡単な3次元プロットを持っていますが、 Mayavi はより強力なエンジン ( VTK ) を利用し、大規模なデータや複雑なデータを表示するのに向いています。
まだちゃんと読めてません。ぼちぼち読む。
環境構築
参考ページ
実行環境
必要なパッケージVTKをHomebrewで入れます。 このあたりを参考に。
$ brew install vtk --with-python3 --without-python
30分以上かかる。(Macがウンウン言っていた、、、)
失敗したケース (Python3で動かそうとした)
とりあえず、普通にPython3のAnaconda環境でpip
する。
$ pip install mayavi $ python
インストール自体は問題なくできた。 とりあえずテスト。
from mayavi import mlab mlab.test_plot3d()
import
は実行できるものの、何も表示されない、、、orz
成功したケース (Python2で再挑戦)
仕方がないので、新たにPython2のAnacondaを導入。Python2はもうすぐ主要パッケージのサポートが打ち切られる見込みなのであまり触りたくなかったのですが、、、
まずはAnaconda2と必要なパッケージを導入。
$ pyenv install anaconda2-5.2.0 $ conda install -n py27mayavi numpy jupyter mayavi=4.4
pyenvとcondaを併用する場合、source activateがうまくいかないという情報があったため、こちらのページを参考に
pyenv localを他所で使っているため、以下のコマンドでactivate。
$ source $PYENV_ROOT/versions/anaconda2-5.2.0/bin/activate py27mayavi
ひとまず、問題なくクリア。
再びPythonを起動してテスト。
from mayavi import mlab mlab.test_plot3d()
動いた!!!
とりあえず、Python2環境で試してみようと思います。Python3で(Macで)うまくいく方法をご存知の方、いらっしゃったらコメントください、、、(切実)
GitHubのセキュリティ脆弱性アラートがPythonに対応
ニュースの備忘録。
GitHubでセキュリティ脆弱性アラート機能のPythonバージョンがリリースされたそうです。
以下、google翻訳で一部抜粋
昨年、RubyやJavaScriptパッケージのセキュリティ脆弱性を追跡するセキュリティ警告をリリースしました。それ以来、私たちは何百万という脆弱性を特定し、多くのパッチを要求してきました。 私たちはPythonのサポートを出荷したことをお知らせします。今週の時点で、Pythonユーザーは、依存関係グラフにアクセスし、リポジトリが既知のセキュリティ脆弱性を持つパッケージに依存する場合はいつでも、セキュリティ警告を受け取ることができます。
原文、全文はリンク記事を参照のこと。
requirements.txtやPipfile.lockがリポジトリに含まれていると自動でチェックしてくれるそうです。
requirements.txtはpip freezeから簡単に作ることができます。このあたりを参考に。