呈色反応モデル画像の数値化をImageJのマクロで自動化〜自宅でできる簡単な研究(FR-1.4)

2023-08-09

 呈色反応の結果をデジカメでデジタル画像を取得し、ImageJで解析して数値化する方法を「ImageJを用いた呈色反応モデルの画像解析法」で紹介しました。ここでは、ImageJのマクロを作成して自動的に解析した数値データーをcsvファイルに保存する方法を紹介します。

考え方と目次

何かの役には立たないし、人から見たらどうでも良いことで自己満足の世界でありますが、デンプンやタンパク質を測定する実験の構想で述べた考えをもとに個人研究として取り組んでいます。

目次
 1. マクロにするマニュアル操作の概要
 2. Record機能を用いてマクロの作成
 3. “List" “Data" ボタン操作のマクロ
 4. 参考情報

1. マクロにするマニュアル操作の概要
 最初に、数値化したい画像をImagJで開きます。開いた画像を「選択領域ツール」の「長方形選択ツール」で解析領域を選択します。

以下、マクロで自動化する操作は、 

数値化するための操作

 (1) Edit >> Copyメニューで解析領域をコピー
 (2) File >> New >> Internal Clipboardメニューで解析領域をペースト
 (3) Image >> Split Channelsを実行
   "red","green","blue"のチャンネルに色分解される
   一番上に表示されているアクティブな"blue"のチャンネルの画像を解析する
 (4) Edit >> Invertで色分解されたの画像を反転
 (5) Edit >> Selection >> Select Allで選択
 (6) Analyze >> plot Profileを実行
 (7) 解析データーをCSVファイルに名前をつけて保存
 (8) 解析を終了した"blue"のチャンネルのProfileと画像を閉じる 

 この操作を"blue","green","red"のチャンネルで順番に行います。

2. Record機能を用いてマクロの作成
 マクロの作成は、"Plugins >> Macros >> Record…"の機能を使います。

 Recordを選択し、上記の(1)から(8)の操作を実施するとマクロ文が記録されていきます(下の写真、左)。"Create"ボタンをクリックするとマクロファイル(下の写真、右)を保存することができます。拡張子は “.ijm" で、テキストエディタで編集できます。

 (1)から(6)までと(8)の操作は、マクロ文を記録することが出来ました。しかし、(7)の操作であるグラフの下の"List"ボタンまたは、"Data>>"ボタンをクリックして解析データーをCSVファイルとして保存する操作を記録することが出来まませんでした(下の写真)。

3. “List" “Data" ボタン操作のマクロ
 Plot Profileを実行して得られた数値データを “/Users/ABC/Desktop/" (環境に合わせて書き換えて下さい)に “Blue_m_.csv" というファイルで保存するマクロ文は、後に述べる情報を参考にしました。

List, Data操作のマクロ文


run(“Clear Results");
Plot.getValues(x, y);
for (i=0; i<x.length; i++){
setResult(“X", i, x[i]);
setResult(“Y", i, y[i]);
}
saveAs(“Results", “/Users/ABC/Desktop/Blue_m_.csv");

となります。このマクロ文を上の写真の左の「記録されない」の部分に書き足すと以下のようになります。

Blueチャンネルを数値化するマクロ文


run(“Copy");
run(“Internal Clipboard");
run(“Split Channels");

run(“Invert");
run(“Select All");
run(“Plot Profile");

run(“Clear Results");
Plot.getValues(x, y);
for (i=0; i<x.length; i++){
setResult(“X", i, x[i]);
setResult(“Y", i, y[i]);
}
saveAs(“Results", “/Users/ABC/Desktop/Blue_m_.csv");

close();
close();

 これで、Blueチャンネルの数値データをcsvファイルに保存することが出来ます。
 以下、「run(“Select All");」から「close();」までを保存ファイル名をGreenチャンネル、Redチャンネルにしたプログラムを書き足せば出来上がりです。

 Blue, Green, Redチャンネルの順にするのは、Split Channelsを実行するとBlueチャンネルがアクティブな状態で次にGreenチャンネル、Redチャンネルの順になっているからです(下の写真)。

以下、マクロの例文は、

マクロ 全文

run(“Copy");
run(“Internal Clipboard");
run(“Split Channels");
run(“Invert");
run(“Select All");
run(“Plot Profile");
run(“Clear Results");
Plot.getValues(x, y);
for (i=0; i<x.length; i++){
setResult(“X", i, x[i]);
setResult(“Y", i, y[i]);
}
saveAs(“Results", “/Users/ABC/Desktop/Blue_m_.csv");
close();
close();

run(“Invert");
run(“Select All");
run(“Plot Profile");
run(“Clear Results");
Plot.getValues(x, y);
for (i=0; i<x.length; i++){
setResult(“X", i, x[i]);
setResult(“Y", i, y[i]);
}
saveAs(“Results", “/Users/ABC/Desktop/Green_m_.csv");
close();
close();

run(“Invert");
run(“Select All");
run(“Plot Profile");
run(“Clear Results");
Plot.getValues(x, y);
for (i=0; i<x.length; i++){
setResult(“X", i, x[i]);
setResult(“Y", i, y[i]);
}
saveAs(“Results", “//Users/ABC/Desktop/Red_m_.csv");
close();
close();

となります。
 ファイルを"ImageJ"の"macros"フォルダーに入れマクロを呼び出し実行すれば R, G, B チャンネルのデータがそれぞれCSVファイルの形で /Users/ABC/Desktop/ に保存されます。

 マイクロプレートで複数の行を解析する時は、「選択領域ツール」の「長方形選択ツール」を次の行の解析したい領域へ移動させ、再びマクロを実行すれば数値データーを得られます。ファイル名が同じだと上書きされますので前のファイルの名前は、pythonなどでファイル名をナンバリングするなどした方が良いと思います。

4. 参考情報
  "List" “Data" ボタン操作のマクロの作成には、以下の情報を参考にしました。ありがとうございます。