【Python講座7】Pythonで画像処理

画像のより詳細な情報を取得します。前回は縦横の大きさ、ファイルの名前だけでしたが、項目をより細かく分類して、タイトル、長さ、幅、(スタック画像なら)スライスの有無、そして、何bitの画像であるのかまでを調べることが出来ます。

まずは、事例を見てみましょう。

実行すると、以下のようになります。(下のウィンドウをご覧下さい。)

前回と同様に、getImageによって、画像情報を取得し、impに代入しています。
しかし、今回は、impに含まれている項目についてより詳細な情報を取り出しています。
全部で8項目ありますね。

ここで、{}という記号に、何やら沢山の情報が書かれていて見慣れないと思いますので、簡単に紹介します。

{}とは、辞書リストというもので、ちょうど辞書のようにページ番号に対して紐づいた内容を
表示するもので、{要素:中身}という順番で記述し、中身の情報を出力する時は[要素:中身]と記述します。

ここでは、print "image type:",types[imp.type]とありますので、typesという辞書リストの中で、対応する画像の種類を表示します。今回の場合は、カラー画像だったので、ImagePlus.COLOR_RGBに対応しており、image type: RGBと表示されます。

ところで、試しにどんな画像でもよいので、画像ファイルのプロパティを見てみましょう。

ほぼ同じような情報が表示されていることが分かると思います。

次に、チュートリアルのObtaining pixel statistics of an image (and your first function)をご覧下さい。

次に紹介するのは、幅とか画像の種類とか、簡単に分かる情報だけでなく、最も高い値、平均の値、中央値などの統計情報について取得する方法です。以下のコードをご覧下さい。

こちらのコードを実行すると、以下のような情報を得ることが出来ます。

まず、冒頭の宣言の中で、from ij.process import ImageStatistics as IS という項目があります。

このImageStatisticsは、扱う画像の統計情報に関するClassを示しています。ijというImageJの機能をまとめた
モジュールを扱う過程で、統計情報を使いますよということを言っています。as ISというのは、ISという形で書くと
いう意味です。

具体的には、例えば、画像の一部を関心領域(ROI)とした時に、その中のヒストグラム等の統計量を調べています。

ここでは、options = IS.MEAN | IS.MEDIAN | IS.MIN_MAX とあるように、MEAN(平均値)、MEDIAN(中央値)、MIN_MAX(最小値・最大値)という3つの項目について情報を取得するよと言っています。

それから、stats = IS.getStatistics(ip, options, imp.getCalibration())という形で統計情報を取得し、

return ~で情報を出力しているのですが、ここでよく見ると、ipというまた見慣れない表記があります。

ここで、皆さん、ipとは一体何だと思いますか?もしimpに近いもの?と思われた方はほぼ正解です!

ipとは、image processorの略で、ここでは2次元の画像を指しています。画像1スライスに対応しています。

impと違うのは、impの場合は奥行きや時間軸など3次元や4次元の情報を持っていることです。
impの場合は、z軸方向のスライスを持つ画像データのこともあります。

さて、これまでの画像解析処理は、画像全体から主な情報を取り出していました。

次回以降は、ピクセル単位で編集を行うような画像解析処理を行います。

以下のコードを見て予習してみて下さい!

また、参考までにFijiのドキュメント(http://javadoc.imagej.net/Fiji/)と、FijiのAPI(http://imagej.nih.gov/ij/developer/api/index.html)について紹介しておきます。

どんな関数やクラスがあるのか見てみると面白いと思います。