シリーズ3.ImageJマクロ言語を用いた画像解析~①輝度の統計量 ~

今回からはマクロ言語を用いた画像処理の実例をご紹介します。

目次

【記事の目標】

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

前回の記事シリーズ2でImageJの自動処理用開発言語(マクロ言語)を学びました。

今回からはマクロ言語を用いた画像処理の実例を勉強していきます。

第一回目は輝度の統計量 (面積 (単位はpixels) 、平均値、標準偏差、歪度、尖度、平均値) を算出する手法を紹介します。

【輝度とは?】

輝度とは単位ピクセルあたりの明るさを示す値です。

8bit画像では0-255までの256段階の数値で表現されます。画像解析においては面積や粒子数などと並び重要な測定値です。

【ImageJで輝度の統計量を算出する方法】

ImageJで輝度の統計量を出力する操作方法をはじめに説明します。

上記の画像の細胞内の赤色で示された抗原タンパクの輝度統計量を出力してみましょう。

1、
画像を開く。(ImageJサンプル画像のFluorescentCells.jpgを使用)

2、
Image→Color→Split ChannelsでRed、Green、Blueの3枚のモノクロ8bit画像に分ける。
これ以降の手順では(red)の画像を用いる。

3、
測定項目を設定する。
メニューバーのAnalyze→Set Measurements(計測の設定)をクリックする。
下記のような画面が表示されるので測定したい統計量にチェックを入れOKをクリックする。
ここではArea、Mean、Standard deviation、Skewness、Kurtosisにチェックを入れる。

※Area : 面積 (単位はpixels) 、Mean : 平均値、Standard deviation : 標準偏差、Skewness : 歪度 (分布の非対称性を表す数値) 、Kurtosis : 尖度 (輝度の分布をプロットしたときにその形がどれだけ尖っているかを示す数値)
※Redirect to: 選択された画像が、Measureをクリックして算出される統計計算の対象になる。
※Decimal Places: 結果に表示される各統計量の数値やヒストグラムのウィンドウで表示される数値の小数点以下の桁数を示す。
4、
ImageJのROI Managerを用いて解析する領域を指定する。ここでは細胞内を楕円で領域選択をする。メニューバーのAnalyze→Tools→ROI Manager…をクリックする(ROI Managerウィンドウが表示される)。

ImageJメニューにある楕円選択を用いて解析対象となる細胞を囲む。囲んだ後にROI ManagerウィンドウのAdd[t]をクリックする。

※領域指定しない場合は画像の全領域が解析対象となる。
5、
ROI ManagerのMeasureをクリックする。Resultsが表示されるので、これをFileからエクセルファイルとして保存する。

6、
測定した輝度の分布を確かめるためにHistogramを出力し、保存する。グラムが表示されるので保存する。メニューバーのAnalyze→Histogramをクリックすると下図のようなヒストグラムが表示されるので保存する。

【マクロ言語で記載する】

上記のImageJで画像に施した操作をマクロ言語で書くと以下のようになります。※上記の①~⑥までの操作で輝度統計量は測定できますが、下記のように背景領域を5つ選択し、その輝度の平均値を差し引く操作を追加したスクリプトを作成しました。
◆スクリプト

※1 中心のxy座標が (102, 183) x軸に平行な長さが74、y軸に平行な長さが42

※2 背景輝度を含んだ細胞輝度を変数originalMeanに代入しました。

※3 for文;プログラムにおいて繰り返しを命令するときに用いられる構文のことです。

for(最初に始める数字; 繰り返しの回数; 処理終了後に実行する命令)
{
繰り返しを行う処理に対応する命令文を記載する。
};
*for構文では変数と初期値を必要とし、多くの場合、変数iを0に設定してi=0と書かれることが多いです。例えば10回繰り返すときはfor(i=0; i<10; i++) のように書きます。

※4 背景輝度の合計

※5 背景輝度の平均値

※6 選択した領域の輝度から背景輝度を差分処理しました。

※7 saveAsに記載する保存先は目的のパスを書きます。
◆画像処理の結果

上記のスクリプトを実行すると、手動操作で出力された結果と同じ結果が得られることが確認できます。原画像の輝度値から背景の輝度値を差し引いた細胞の真の輝度値を出力することができましたか?実際の画像解析ではこのように複雑な処理をする場合がよくありますので理解しておくと応用範囲も広がります。

【まとめ】

マクロ言語を用いて輝度統計量を出力する手法が理解できたでしょうか。
今回紹介したスクリプトにはマクロ言語でよく用いられる1行で書かれた命令文だけでなく、新しい変数 (originalMean、backMean、subInt) による数値演算と、for文による繰り返し処理も習いました。
これら上記の処理を併せることでマクロ言語の書き方をより深く理解できたと思います。次回以降も画像解析の実例に加えて、できるだけ多くマクロ言語の書き方を紹介していきたいと思います。次回第二回目はIf文を使った条件分岐で二値化処理を施す手法を紹介します。