2016年9月29日 更新

シリーズ2.ImageJの基礎~自動処理用開発言語 (マクロ) ~

前回の記事シリーズ1ではデジタル画像について知っておくべき基礎知識を勉強しました (ImageJの基礎〜画像とは〜) 。今回はImageJの自動処理用開発言語を用いて自動的に画像処理を施す手法についてご説明します。

7,623 view お気に入り 0

【記事の目標】

画像を触ったことがない人を対象とし、ImageJの自動処理用開発言語を用いて適切な画像解析を施すまでの学習過程を示す。

【自動処理用開発言語とは何か】

自動処理用開発言語とはコンピューターに指示を与えるために使われる言語のことで、コンピューターが解釈できる文法で書かれた命令文といえます。

この自動処理用開発言語にはさまざまな種類があり、ImageJではMacro (マクロ) 、JavaScript、Java、BeanShellという言語を用いることができます。これらの言語を使ってその画像に施したい処理を記述することにより、コンピューターが自動的に画像処理を行います。この記事では書き方がシンプルで習得しやすいマクロ言語に注目しその使い方を勉強します。

【画像処理を自動化する意義】

ImageJの操作が理解できれば十分でマクロ言語は不要だと考える人も多いかもしれません。しかし、研究に必要な画像解析は多くの場合、大量の画像に同じ処理を繰り返し行う作業が求められます。ImageJのマクロ言語を使用すると手動で行った操作を自動化することが可能になります。さらに作業記録をスクリプトとして残し、第3者が同じスクリプトを使って全く同じ処理を実行することも可能になります。

【マクロ言語の書き方】

それでは実際のマクロ言語を見ていきましょう。マクロ言語と聞いただけではどんな書き方をするのか想像つかないかもしれませんが、操作を英語でいうとどうなるか。。。?と考えてみると理解しやすいと思います。

ImageJでよく使われる操作の一例をマクロで表すと下記のようになります。

各操作とマクロ言語を対応させてみました。

○ファイル
ファイルを開く⇔open("ファイルの保管場所\\ファイル名");
ファイルを保存する⇔saveAs("保存形式", "ファイルの保管場所\\ファイル名");

○領域選択
四角く囲む⇔makeRectangle(x, y, width, height);
楕円形で囲む⇔makeOval(x, y, width, height);
直線をひく⇔makeLine(x1, y1, x2, y2);

# x: 選択領域の始点 (左上) のx座標
# y: 選択領域の始点 (左上) のy座標
# width: 幅(選択範囲の大きさを示す)
# height: 高さ(選択範囲の大きさを示す)
# x1, y1: 直線の始点の座標
# x2, y2: 直線の終点の座標

○編集
Clear⇔run("Clear", "slice");
8bit変換する⇔run("8-bit");

※上記以外にもほとんどの操作がrun(“操作の命令文“);という書き方で実行できるので覚えておくと便利だと思います!

また、Built-in Macro Functions(http://rsbweb.nih.gov/ij/developer/macro/functions.html)には各画像処理操作をマクロ言語で表現した書き方が多数掲載されています。
マクロ言語といっても簡単な英単語で表現されていることが実感できたでしょうか?

実際の画像処理はより複雑で、マクロ言語の書き方としては上記に挙げたような操作の命令文を組み合わせた形になります。

ImageJでの画像処理の手動操作方法とマクロ言語の書き方を対応させながら理解すると、画像処理を自動化する利点が実感できると思います。

【スクリプトの例】

 (1844)

画像中に存在するすべての細胞数を計測・比較する操作をマクロで記述して実行してみましょう。

1:画像を開く(ImageJサンプル画像, Cell colony (31K)

2:ハイパスフィルタで明るさムラの補正

3:Gaussian Blurでノイズ除去

4:二値化

5:粒子解析

6:解析結果の保存(デスクトップに保存)

これら1~6までの操作をマクロで書くと以下のようになります。
 (1846)

※//はコメントアウトといい、スクリプト内に記述してある注釈のことです。

※Desktopのディレクトリ;ディレクトリとはファイルが保管されるコンピューター内の場所を意味します。一般的にはフォルダと呼ばれることも多いです。ディレクトリは階層構造をしており、上位から順に¥¥を用いて記述したものをパスとよびます。デスクトップの最上位はローカルディスク(Cドライブ)になるのでパスはC:¥¥から始まります。デスクトップのアイコンを右クリックしプロパティを選択→表示された画面中の「場所」を見るとパスが確認できます。

ImageJメニューバーのPlugin→New→MacroをクリックするとMacro.txtというファイルが表示されます。ここに上記のスクリプトをコピーして貼り付けます。メニューのMacrosからRun Macroを選択してクリックすると上記のスクリプトが実行され細胞数のカウント結果(Summary.xls)がデスクトップに保存されます。
 (1848)

デスクトップにはこのようなExcelファイルでSummaryが保存されます。
18 件

関連する記事 こんな記事も人気です♪

シリーズ6.マクロ言語を使った画像処理の応用編~ノイズ軽減① 空間フィルタ処理~

シリーズ6.マクロ言語を使った画像処理の応用編~ノイズ軽減① 空間フィルタ処理~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。 今回の記事から応用編としてさらに詳しく画像処理を学んでいきます。最初のテーマはノイズ軽減です。
ImageJ Plugin で数値計算をしてみる #5

ImageJ Plugin で数値計算をしてみる #5

非情報科学研究者 (特に生物系研究者) が ImageJ plugin を作るために超えるべき壁やTipsをまとめます。今回は、面積の平均値や中央値、分散を出力するためのコードをご紹介します。
湖城 恵 | 1,375 view
ImageJインストール(Mac)#ImageJの初心者から中級者まで#

ImageJインストール(Mac)#ImageJの初心者から中級者まで#

ImageJのインストールの仕方についてまとめました! 「ImageJってなに?」から「ImageJって面白い!!」へ!
三好 裕之 | 3,470 view
ImageJ まとめ

ImageJ まとめ

「このページを見れば,ImageJ のこと全てが解決する」をモットーに,日々更新を行っています.
三好 裕之 | 2,482 view
シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。 今回の記事ではImageJのユーザー定義関数について学んでいきます。

この記事のキーワード

この記事のキュレーター

エルピクセル編集部 エルピクセル編集部