【記事の目標】
画像を触ったことがない人を対象とし、ImageJの自動処理用開発言語を用いて適切な画像解析を施すまでの学習過程を示す。
【自動処理用開発言語とは何か】
自動処理用開発言語とはコンピューターに指示を与えるために使われる言語のことで、コンピューターが解釈できる文法で書かれた命令文といえます。
この自動処理用開発言語にはさまざまな種類があり、ImageJではMacro (マクロ) 、JavaScript、Java、BeanShellという言語を用いることができます。これらの言語を使ってその画像に施したい処理を記述することにより、コンピューターが自動的に画像処理を行います。この記事では書き方がシンプルで習得しやすいマクロ言語に注目しその使い方を勉強します。
この自動処理用開発言語にはさまざまな種類があり、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での画像処理の手動操作方法とマクロ言語の書き方を対応させながら理解すると、画像処理を自動化する利点が実感できると思います。
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での画像処理の手動操作方法とマクロ言語の書き方を対応させながら理解すると、画像処理を自動化する利点が実感できると思います。
【スクリプトの例】
画像中に存在するすべての細胞数を計測・比較する操作をマクロで記述して実行してみましょう。
1:画像を開く(ImageJサンプル画像, Cell colony (31K)
2:ハイパスフィルタで明るさムラの補正
3:Gaussian Blurでノイズ除去
4:二値化
5:粒子解析
6:解析結果の保存(デスクトップに保存)
これら1~6までの操作をマクロで書くと以下のようになります。
1:画像を開く(ImageJサンプル画像, Cell colony (31K)
2:ハイパスフィルタで明るさムラの補正
3:Gaussian Blurでノイズ除去
4:二値化
5:粒子解析
6:解析結果の保存(デスクトップに保存)
これら1~6までの操作をマクロで書くと以下のようになります。
※//はコメントアウトといい、スクリプト内に記述してある注釈のことです。
※Desktopのディレクトリ;ディレクトリとはファイルが保管されるコンピューター内の場所を意味します。一般的にはフォルダと呼ばれることも多いです。ディレクトリは階層構造をしており、上位から順に¥¥を用いて記述したものをパスとよびます。デスクトップの最上位はローカルディスク(Cドライブ)になるのでパスはC:¥¥から始まります。デスクトップのアイコンを右クリックしプロパティを選択→表示された画面中の「場所」を見るとパスが確認できます。
ImageJメニューバーのPlugin→New→MacroをクリックするとMacro.txtというファイルが表示されます。ここに上記のスクリプトをコピーして貼り付けます。メニューのMacrosからRun Macroを選択してクリックすると上記のスクリプトが実行され細胞数のカウント結果(Summary.xls)がデスクトップに保存されます。
※Desktopのディレクトリ;ディレクトリとはファイルが保管されるコンピューター内の場所を意味します。一般的にはフォルダと呼ばれることも多いです。ディレクトリは階層構造をしており、上位から順に¥¥を用いて記述したものをパスとよびます。デスクトップの最上位はローカルディスク(Cドライブ)になるのでパスはC:¥¥から始まります。デスクトップのアイコンを右クリックしプロパティを選択→表示された画面中の「場所」を見るとパスが確認できます。
ImageJメニューバーのPlugin→New→MacroをクリックするとMacro.txtというファイルが表示されます。ここに上記のスクリプトをコピーして貼り付けます。メニューのMacrosからRun Macroを選択してクリックすると上記のスクリプトが実行され細胞数のカウント結果(Summary.xls)がデスクトップに保存されます。
デスクトップにはこのようなExcelファイルでSummaryが保存されます。