ImageJは、オープンソースのソフトウェアで、ユーザー自身でも目的に応じたオリジナルなプログラムを作成できます。C言語やベーシック言語などの一般的なプログラミング言語を勉強しなくても(していれば尚更)、非常に簡単に画像処理プログラムを作成できるところがImageJの強みの1つです。
特に、ImageJマクロ言語を用いた関数群は、バージョンが上がるごとに充実してきており、ImageJのプラグインを開発するためのJava言語サンプルプログラムも多く提供されています。
今回は、特にこのImageJのマクロ言語のプログラミングテクニックを紹介いたします。
マクロ言語によるプログラミングテクニック
ImageJのマクロ言語とはどのようなものか、基本的なことは、本連載の第28回で述べてきたので割愛します。
そして、早速ここでは、だれでも欲しいと思ってしまう、一連の処理の自動化「マクロ言語を用いた画像処理のバッチ処理」テクニックを紹介します。
ここでいうバッチ処理とは、ユーザーが行う一連の画像処理手順を自動化して、作業を効率化する処理です。
ImageJでバッチ処理を行う際、最も簡単な方法は、ImageJのメニューから(Plugins/ Macros/Record)を選択して、処理の一連の作業をRecorderエディタ上に自動的にマクロ のコマンド(命令)を記録する機能を活用する方法です。
この処理では、当然、ユーザーは最初にマクロを記載するまでのレコード機能の操作をマニュアルで行わなければなりません。ただし、上述のように、ImageJはこの作業内容をマクロ関数として記録することができますので、処理を繰り返したい場合、他の人にも共有したい場合や他の一連の処理の中に組み込みたい場合など、利用方法が広がると思います。
マクロの例として、Volume Viewerプラグインのマクロが公開されています。setBatchMode関数を用いたバッチ処理のサンプルプログラムになっています。
マクロコードは次の通りです。
//ここから
setBatchMode(true);
run("T1 Head (2.4M, 16-bits)");
stack1 = getImageID;
stack2 = 0;
n = 36;
for (i=0; i<n; i++) {
showProgress(i, n);
selectImage(stack1);
angle_y = i * 10;
run("Volume Viewer", "display_mode=4 scale=2.5 axes=0 interpolation=2 angle_x=0 angle_z=0 angle_y="+ angle_y );
run("Copy");
w=getWidth; h=getHeight;
close();
if (stack2==0) {
newImage("Plots", "RGB", w, h, 1);
stack2 = getImageID;
} else {
selectImage(stack2);
run("Add Slice");
}
run("Paste");
}
setSlice(1);
run("Select None");
setBatchMode(false);
close();
//ここまで
Recorder機能で貼り付けて、名前をつけて保存します。
ここで注意すべき箇所は、setBatchMode関数の引数を”true”にすることと、ImageJの使用物理メモリの許容を考慮することです。
ImageJマクロを躓かずに利用するために
ImageJ Macro LanguageProgrammer’s Reference Guide v1.46dに、チュートリアルコードがたくさん記載され、公開されています。
このチュートリアルの日本語化は、ぜひ、Visionary Imaging Services, Inc.が取り組ませていただきたい貢献活動です。
以上、主に、マクロのRecorder機能から、マクロ言語の自動処理への利便性について触れました。
上述のような、3D画像処理が可能なマクロ処理をはじめ、ユーザがやりたい処理を、思うがままに、再現性を99.9パーセント担保して、実行してみる術を身につけるために、試してみてはいかがでしょうか。
今回はImageJマクロ言語のプログラミングについてサンプルを用いて例示しました!
次回は、ImageJを用いた統計画像処理について説明を行います!
Reference
- 「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(23・2) 2008, p103-105」
0 件のコメント:
コメントを投稿