Re - ImageJで学ぶ!: 2015-10-11

2015年10月17日土曜日

第38回 ImageJを用いた統計画像処理とパターン認識(fMRIへの応用)で学ぶ!

画像情報から何らかの統計値を計算し、その統計値そのものを画像化する手法はよく使用されます。

特に臨床においては、functional MRI(fMRI)や核医学イメージングなどの機能画像処理で利用されることが多く、lmageJでも関連するプラグインがいくつか紹介されています。

fMRIは、MRIの撮像法の分類の中の1つとして定義される場合や、画像解析法として定義される場合など、さまざまな解釈があり、本稿では、特に厳密なfMRIの解説は避けて、lmageJを用いた統計画像処理の1例としてMR画像を用いた応用例を紹介します

fMRIの概要


fMRIは、主に脳の活動レベルを計測するためのイメージング法であり、ヘモグロビン内の酸素レベルを利用する磁気イメージングの特別な方法です。 
fMRIの原理で最もよく説明されるのが、BOLD(blood oxygen level dependent)効果です

中に含まれるヘモグロビンは、酸素との結合状態によって磁性が変化します。素結合型のヘモグロビン(Oxy-Hb)反磁性体であり、酸素が離れたヘモグロビン(Deoxy-Hb)は磁化率が大きい常磁性体です。

脳活動による神経細胞の活動増加はまず酸素消費の増加をもたらし、その結果、Deoxy-Hb濃度が少しだけ上昇します。その数秒遅れで始まる脳血流量の急激な増加は、消費を大きく上回る酸素量を供給するため、Oxy-Hb度を急激に増大させ、MRI信号の増強とその緩和時間を長くします。

脳賦活時には、安静時に比べて賦活領域の局所脳血流が30~50%も大きく増加するのに対し、酸素消費量の増加は5パーセント程度という報告もあり、このため、脳が刺激を受けた場合、賦活領域での血流は増加し、常磁性体であるDeoxy-Hbの濃度低下とともに磁化率も減少し、T2*が延長すると考えられます。これは、T2強調画像において賦活部位で増加するMRI信号として検出されます。

fMRIには、活動部位に多量の血液が流入し,酸素化ヘモグロビンの量が増加し,それに伴って信号が増加するBOLD効果を利用する方法が主に利用されています。この他、パルスを加え、血液の磁化を反転させる方法によって、任意領域の血液のプロトンに異なる信号を持たせ、これを高速撮像で可視化することで、脳組織内での血液の灌流 (パーフュージョン)を観察する方法(ASL:Arterial spin labeling)や造影剤を使う撮像法(ダイナミック造影)などがあります。

MRI Analysis Calculator


MRI Analysis Calculatorは、University of Massachusetts Medical SchoolKarl Schmids氏によって提供されているMRIおよびfMRIデータ解析のためのImageJプラグインです。

このパッケージは、University of Massachusetts Medical SchoolCenter for Comparative Neuroimaging(CCNI)Harvard Medical School/Brigham&Women’s Hospitalの小動物対象のfMRI研究施設で開発・管理されているImageJのプラグインコード集です。

このプラグインの最も単純な機能は、MR画像からT1、T2、パーフュージョンおよびディフュージョン計算を行うものです。
以下に、具体的な使用方法を説明します。 

ImageJを起動して、異なるTRTESE法にて撮像したMR画像をPC取り込み、ImageJのプラグインである MRI Analysis Calculator (http://rsb.info.nih.gov/ij/plugins/mri-analysis.htmlからダウンロード)を起動します。

プラグインにはサンプル画像が含まれています。
T1/T2スタック画像は、Import>Rawデータから、以下の設定で読み込みます。


ちゃんと開けると、T1wなら6画像のスタック、T2wなら、16画像のスタックが開けます。

T1強調画像スタックのT1マップを作成する場合は、MRI Analysis Calculatorダイアログのポップアップメニューから〈T1Calculation>を選択すると、T1 Calculation Parameterセットアップメニューが開きます



ここで、スタック画像を構成する個々の画像のTR(100ms0.1s)をスペース区切りで入力します。次に、T1をゼロにするR(2)乗(以下、R2)の閾値を入力します。

こでR2は、得られた関数と測定値の一致度合いを示す相関係数を意味しています。 この相関係数画像も欲しい場合は、ウィンドウ下のチェックをつけておきます。

最後に、ClipT1 values exceedingT1値の上限を設定し、OKを押すと、T1マップ画像が生成されます(図左上)。
T2マップも、T1マップ画像の処理手順とまったく同様に設定を進めていくと、図(右上)のようなT2マップ画像が生成されます。


より詳しい情報は、プラグインに含まれているドキュメントを参照してください。

ImageJによるMR画像を用いたパーフュージョン計算例


MRI Analysis Calculatorでは、arterial spin labeling(ASL)画像とT1調像のスタックを用いてパーフュージョンの計算が可能です。

同プラグインのサンプル画像を用いて、次の各ステップを経てパーフュージョン画像を作成できます。

ASLは、MRの領域選択的RFを用い組織に流入する血液のスピンを反転させることで、血管内血液の磁化の状態をある種のトレーサーとして血液の分布を画像化するものです。
以下、このASLT1を用いたImageJによる処理方法を解説します。 
  1. ASL画像のスタックとT1強調像のスタックを読み込む。 
  2. MRI Analysis Calculatorを起動し, ポップアップメニューから〈Perfusion Calculation>を選択する。 
  3. Perfusion Calculationのパラメータを設定する
(パーフュージョン機能選択)

(計算設定)

(パーフュージョン結果)

R^2マップ(T1 fit quality)
 


ここでは、ダイアログの中にASL画像T1強調像の計算内容が示されています。ASLスタックからは、ASLコントラスト画像(ASLW)を生成し、T1マップは、指数関数によってそれぞれのスライスからの値をフィッティングさせる単純なアルゴリズムが用いられています。

最終的に、ASLWT1マップは、パーフュージョンを求める次式に利用されます。

Perfusion = (ASLW * 6000 * 0.9) / (1.6 * T1)

その次元はmL/100 mL/minで計算されています。

MRI Analysis Pakについて


MRI Analysis Pakは、MRI Analysis Calculatorよりも多くのfMRI用の機能がパッケージ化されているクラスライブラリです。概要は以下のとおりです


特記すべき解析機能は以下のようなものです。
  • continuous ASL (CASL) perfusion :MRIのデータを、BOLDcerebral blood flow(CBF)シリーズに分離する。 
  • キャリブレーションとスティミュレーションから、酸素消費率(CMRO2)マップを計算する。 
  • 時系列のgeneralized linear model (GLM)解析を行う。
  • 画像同士のカラーオーバーレイおよび位置合わせ処理を行う。


特殊な画像フォーマットを取り扱う必要がありますが、これらは、豊富な医用画像の統計的処理手法を提供してくれています。

また、これらの画像処理以前に、fMRIでは、例えば、脳の賦活を観察する場合には、画像信号になるまでの信号の発生源からその信号をキャッチするまでのメカニズムを理解する必要があります。
fMRIは、仮説を立てて検証的な解析を試み、そのためのシーケンスを考え、MR撮像後はさらに、統計画像処理によって定量かつ視覚化できます。

前回は、画像の統計処理として主成分分析や判別分析について述べましたが、その臨床応用としてfMRIへの適用も盛んに行われています。 
独立成分分析(independent component analysis:ICA)は、未知の線形作用によって混合された複数の独立な信号を、その統計的な性質に注目してもとの独立な信号に復元する手法です。
fMRI計測時には脳内の多数の部位が同時に活動するため、出力信号は複数の独立な成分が混ざり合ったものです。局所的な活動間に、ある種の独立性が成り立つのであれば、ICAによって観測信号の分解を行うことができますね。

今回はImageJによるfMRI統計画像処理の概要を紹介しました!

Reference
  • 「ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(23・6) 2008, p77-79」

2015年10月16日金曜日

第37回 ImageJを用いた統計画像処理とパターン認識(判別分析とクラスタリング)で学ぶ!

前回は、画像群(クラス)の中から共通する特徴量を画像化するための主成分分析について説明しました。今回は、クラスとクラスがよく区別されるような処理法である判別分析法および、あらかじめ分類すべきデータがどのクラスに属するのかわかっていない「教師なし 学習」におけるパターン認識をする処理手法であるクラスタリングについて述べます。

医用画像処理では、よく画像のセグメンテーション手法にクラスタリングが用いられます。その中でも、今回はImageJを用いたk-meansクラスタリングについてサンプル画像を用いてより実践的な解説を行います。

判別分析法


主成分分析は、あるクラス内の特徴を画像化する方法ですが、判別分析は、クラス間を分離するためにクラス特徴量を用いて判別する処理法です。

この方法は、主成分分析と同じく二次元の特徴空間から、のようにクラス間を最も識別できる基底を固有ベクトルより求めることによって判別します。

(特徴ベクトルが二次元の場合)

具体的な計算方法は、あるクラスCのパターンの数をN(c)とし、平均値をM(c)、全サンプル数をN、その平均ベクトルをMとした場合、全サンプルの分散共分散行列Sは、次の式で表されます。


次に、クラスCの分散共分散行列S(c) は、同様に、次の式で表されます。 


これらの分散共分散行列から、クラス内分散共分散行列S(w)とクラス間分散共分散行列S(b)を求める式は以下のとおりです 



上式から、クラス間の分離を最大にするためには、S(b)S(w)-1乗が大きくなるように、基底を配列すればよいことになります。
ここで固有ベクトルを求める式は以下の式です。


固有値λが大きい順に固有ベクトルを並べると、これが判別分析のための基底となります。この値を主成分分析と同様に画像化すれば、それがクラス間を区別するための特徴画像となります。

画像のクラスタリング


パターン認識は、まず画像群を収集して、その画像一つひとつの特徴量を抽出し、パターン学習を行い、クラスの特徴を記録した「辞書」を作成します。

力された画像は、このクラス辞書によってクラス分けされます。この場合、学習用の入力画像はあらかじめどのクラスに属するのかがわかっています。このような場合を「教師あり学習」と言います。また、クラスがわかっていない場合を「教師なし学習」と言います。

教師なし学習で、象となる入力画像が特徴空間の中でクラスごとに集まっていると仮定して、ラスのパターン認識をする処理手法をクラスタリングと言います。クラスタリングは、大きく2つに分類され、階層的クラスタリングと非階層的クラスタリングがあります。

階層的クラスタリングは、クラス数を減少させていく処理を行う場合、初期状態において個々のクラスの要素を1つのクラスと考え、互いの距離の近いものから順にクラスを結合し、目的とする数のグループに分割します。よって、この場合は、融合していく過程がツリー状に表現できます。

K-meansクラスタリング


k-meansクラスタリングは、非階層的クラスタリングの1つです。あらかじめ割り振ったクラスの数をk個設定し、それぞれのクラスの代表となる種子点をk個、特徴空間に分布させます。そして、それぞれの点からクラスの最も近い中心に調整して新たな分割を設定し、クラスの平均の位置を更新していきます。この処理を繰り返すことによって、クラスが、与えられたクラス数だけ、分割されていきます。

に、この処理の概要を示します。


より具体的な手順は以下のとおりです。 

  1. あらかじめ仮設定したクラスの代表として、種子点をランダムに特徴空間上に分布させ、種子点との距離で仮のクラスを作成する(a、b) 
  2. 割り振った種子点をもとに各クラスの中心を計算する。一般的にはクラス内平均値が使用される(図b)。 
  3. 各種子点と各クラスの中心との距離を求め、種子点を最も近い中心のクラスターに割り当て直す(c、d)
  4. 上記の処理で、すべての種子点のクラスの割り当てが変化しなかった場合(エラーがない場合)は処理を終了する。それ以外は、新しく割り当てられたクラス中心点を再計算して上記の処理を繰り返す(Iteration数を確認することで、何回繰り返したかわかる)。
k-meansクラスタリングは、階層的クラスタリングに比べアルゴリズムが簡単で、処理量も少ないという利点がありますが、初期値としての種子点によって結果が異なるという欠点もあります。

ImageJによるk-meansクラスタリング


ImageJk-meansクラスタリングを行う場合、Jarek Sacha氏がGNU Lesser General Public Licenseのもと、無償でImageJプラグインを提供しています


このプラグインでは、任意のクラス数を決めて、そのクラスに各画素を割り当てた結果の画像を作成できます。
このk-meansクラスタリングを医用画像処理で使用する場合、マルチバンドの画像のピクセル値をベースとした領域分割が可能です

処理対象がスタック画像の場合は、2つの解釈ができます。2D画像として、一つひとつの画像を1バンドと解釈し、その数kを初期値(画像)としてクラスタリングを行う、あるいは、1バンドの3D画像として解釈することができます。

RGBカラー画像の場合は、赤、緑、青のそれぞれのピクセル群をクラスとみなして、この場合は種子点を3としてクラスタリングを行います。それぞれのクラスは、カラー画像の場 合、三次元空間上で中心位置が定義され、画像のピクセル群はこの中心位置から距離の近いクラスタに割り振られます。

各クラスタは、n次元空間における重心によって定義されます。
ピクセルは、クラスタの重心への近接性によってグループ化されます。
クラス(クラスタ)の初期の中心位置はランダムに配置(k-means++アルゴリズムを使用して初期化)されます。それらの位置がインタラクティブに最適化されます。

ImageJk-meansプラグインのGUI(グラフィカルユーザー インターフェイス)から操作できる機能の特徴下記のとおりです。 

ROI内だけのk-meansクラスタリングが可能 
・クラスタリングの際の距離パラメータは、非等方性のマハラノビス距離が用いられる(マハラノビス距離についての説明は前回記事を参照して下さい) 
・ファジーk-meansへの拡張 ・クラスの検証用インデックス ・クラス数の自動選択 

実際に、ImageJを用いたk-meansラスタリングの処理例(プラグイン公開サイトのサンプルを使用)を示します。

まず、プラグインのk-means Configrationダイアログのクラスターの数を設定(ここでは"4":見た目で、青、オレンジ、緑、黒に領域が分かれそうだと最初にわかるので。)し、次に種子点をランダムに配置する際の種子数を決めます。計算の過程やクラスの分割を最適化していくにあたり、誤差を追って行く場合は、Point optimization traceにチェックを入れておきます。

実行後のログから、何色がクラスタリングされたのかわかります。RGBカラーは、こちらのサイトで確認できます。(http://mementoo.info/archives/594

(オリジナル)

(グレースケール)

(RGB k-meansクラスタリング結果)

(繰り返し回数4回で収束)

(ログ:4回目でエラー"0"=収束)

このように、処理画像を変えてやってみるといいかもしれません。単純X線写真、アンギオ画像、CT、MRI、PET、SPECT、エコー画像など、自分でクラス数を予想しながら、修正しつつ、クラスタリングしてみると、画像の特徴から、所見の内部構造分類などが可能になります。 

今回はImageJを用いた判別分析法とクラスタリングについて説明を行いました!
次回は少し臨床的な画像解析手法について説明します!

Reference
  • 山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(23・4) 2008, p92-94」

2015年10月15日木曜日

第36回 ImageJを用いた統計画像処理とパターン認識(ImageJによる主成分分析)で学ぶ!

最近のデジタルカメラは、綺麗な写真が撮れるだけでなく、例えば、笑顔を認識してシャッターを切るなど、パターン認識による画像処理をハードウェア側で制御する技術が話題になっています(例えば、こちらのような研究:http://www.face-rec.org/interesting-papers/General/ld.pdf)。

このような特別な用途で組み込まれたコンピュータシステムを組み込みシステムと言い、携帯電話やカーナビゲーションシステムなどはその代表的な例です。画像処理プログラムのマイクロチップへの組み込みは、コンピュータセキュリティ対策のための認証にもよく用いられており、その技術には、画像の特定領域の検出・追跡、特徴量の抽出・ 追跡、識別などの機能が一連の処理過程として適用されています。

今回は、その画像のパターン認識の基礎について説明を行っていきます!

画像のパターン認識とは


画像群が何らかの特徴量に基づいてクラス分けされている場合、対象となる画像がどのクラスに属しているかを識別することをパターン認識と言います。パターン認識は、まず画像群を収集してその画像一つひとつの特徴量を抽出し、ターン学習を行い、クラスのその特徴を記録した「クラス辞書」を作成します。

入力された画像は、このクラス辞書によってクラス分けされます。(具体的な画像の特徴抽出方法や特徴量解析はこれまでもご紹介してきました。)

画像の関心領域にある対象の形状を定量化するテクスチャメジャーや、淡値の特徴を示すテクスチャメジャーなどを画像から抽出し、特徴ベクトル x=(特徴量1、特徴量2、特徴量3、...特徴量k)を求め、この特徴ベクトルで形成される座標軸上(特徴空間)に入力画像の特徴量をプロットすれば、の画像がどのクラスに属するか判断が可能となります。

また、特徴量を使用せず、画像の画素値をそのまま使用する場合もあります。

二次元の特徴ベクトルによる特徴空間上でのクラス分け例を示します。

(特徴量1・2でプロットしたクラス分け)

入力画像の識別方法


画像群をクラス分けし、その特徴量をパラメータ化して記録する(クラス辞書の作成)ことを学習と言い、学習の際に用いられる代表値をプロトタイプといいます。プロトタイプとして最も単純でよく使用されるのが画素の平均値です。

入力画像の平均値を計算してその値を特徴空間にプロットし、各クラスの平均値との距離を求めることによって、一般的にはより短い距離にあるクラスに属すると識別します。

しかしながら、各クラス内の値の分散状態によって、入力画像の代表値がどのクラスに属するかが異なってくるため、距離の重み付けが必要となってきます。そのため、クラスの分布の特性を反映したマハラノビス距離が用いられます。

以下算出の手順を示します。はじめに、クラスごとの平均値と分散共分散を求めます。ここで、あるクラスの二次元の特徴量と、その特徴座標に n=5個の画像群があると仮定します。それぞれの座標点(Xni , Xnj),下記のように表現できます。Xは特徴量です。

X1=(X11, X12) 
X2=(X21, X22) 
X3= (X31, X32) 
X4= (X41, X42) 
X5= (X51, X52) 

このとき、クラスの平均M=(Mi, Mj), X1=((X11+X21+X31+X41+X51)/5, (X12+X22+X32+X42+X52)/5) ) となり、分散共分散行列は、次の式を用いて、


この式から次の行列を求めることで表されます。


ここで、ユークリッド距離duが、対象となる入力画像の特徴座標pで与えられた場合、ユークリッド距離は下記の式で算出されます。Tは転置を表す記号です。


マハラノビス距離dmは、上式を共分散行列の大きさで除した値となります。


よって、分散が大きいほど、マハラノビス距離は小さくなるため、2つのクラスの平均値の座標から、対象の画像の座標が同じ場合に、確率的に分散の大きな方法のクラスを選択できます(下図参照)

(マハラノビス距離)

画像の主成分分析


主成分分析法は、クラスの入力画像群の共通する特徴を選択する方法です。また、クラス間を区別するための入力画像群の特徴を選択する方法を判別分析法と言います。

主成分分析法には、画像データの画素値そのものがよく使用されます。そのため、特徴ベクトルは画素数がその次元となります。この高次元を低次元に落とした特徴空間を部分空 
間と言います。

また、あるクラスに属する画像群のおのおのの画像一つひとつの画素値を特徴空間にプロットすると、ある特徴を示す集合が観察できます。
クラスの画像群から3つの特徴量をx,y,z3軸として、三次元特徴空間にクラスの特徴をプロットし、二次元空間にマッピングすると、二次元特徴を画像として得ることができます。

これらの画像を得る具体的な方法は、前述したように、例えば、N個の学習用の入力画像群の特徴量をK個とすれば、入力画像は、次のようになります。


その平均ベクトルMと分散共分散行列Sは下記のようになります。 



ここで、低次元空間(二次元)に分布したこの平均値を通過し、特徴空間の分布の広がりが最も大きい方向の直線を第1主成分、その直行する方向の直線を第2主成分と言います。
この主成分を求めるのは、クラスの分散共分散行列Sの固有ベクトルを求めることと同等です 

そもそも画像は、ベクトルや行列に代替されて説明や計算されます。

画像は画素値の集合であり、画像同士はそれぞれの間で大きさを数倍に拡大したり、減算したりして、ベクトルの性質をそのまま適用できます。

よって、画像の主成分分析の場合でも、Sは行列であるため、固有値や固有ベクトルが計算できるという考え方です。



このとき、λjを固有値、ujを固有ベクトルといいます。固有値の大きい値から順に固有ベクトルをd個取り出して、d次元の主成分(u1,u2,...ud)を求めることによって、それぞれの主成分を画像として表示することができます。

ImageJによる主成分分析


ImageJを用いた主成分分析のプラグイン(PCA PIugin)は、Michael Abramoff氏(Department of Ophthalmology and Visual Sciences,University Iowa Hospitals and Clinics, lowa, USA.)Webサイト(http://bij.isi.uu.nl/)で紹介しています

プラグインは、こちらのサイトの「BIJ plugin only」をダウンロードして、任意のフォルダ名に変えて、フォルダごと、ImageJのpluginsフォルダに入れましょう。

同じように公開されているソースコードをダウンロードして、テキストエディタなどで参照してみると、Jacobi(ヤコビ法)を用いて、行列の固有値と固有ベクトルを求めていることがわかりますので、アルゴリズムの詳細が知りたい方は、このサイトから得られるソースコードを参照してみてください。より詳細な説明および論文も、同氏のサイトで紹介されています。

ヤコビ法は、アルゴリズム自体も簡単です。
単純な算数での説明がされているこちらの資料がわかりやすいです。(http://www.math.ritsumei.ac.jp/yasutomi/jugyo/Numerical_Analysis/note5.pdf)

次の図に、マンモグラフィの実質パターンを16パターン、40×40マトリックスで切り出し、タックした画像を示します。
※本当はもっと高解像度の画像(256以上など)で試した法が、信頼性のある統計処理ができます。

(切り出した位置)
(16画像をスタック)


そしてPCA pluginを実行して、この16パターンを1つのクラスとして、主成分分析した結果を示します。

(スライスごとの分散値グラフ)
(主成分平均値画像とその他、特徴成分画像)
※サンプルデータが40 ピクセルしかないのであまりいい結果が出ていません。
また、手順は今後改良したいと思います。


固有画像の左上は、16パターンの平均画像主成分を画像化したものです。
これが、このクラス(乳腺パターン)の特徴を示す画像となります。

同様の手順で、対象疾患やモダリティを変えて試算してみたり、画像診断の結果が異なる類似画像のクラス間を比較するなど、何か発見ができるかもしれませんね。ここからは、パターン認識の領域になっていきます。

この他、最近では、教師データを使うマシンラーニングも大きな注目を集めています。
このような最新技術の基礎は、本稿で紹介したシンプルな判別分析などが発展したものだということも、理解しないといけないですね。

今回はImageJを用いた主成分分析について説明を行いました。
次回も続けてパターン認識について述べます!

参考記事:「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(23・3) 2008, p100-103」

参考図書:研究方法論と基礎統計学.JSRT.株式会社メディカルトリビューン.

参考文献:
  1. Low-dimensional procedure for the characterization of human faces. 1987 Mar;4(3):519-24.

2015年10月14日水曜日

第35回 ImageJマクロ言語のプログラミングテクニックで学ぶ!

ImageJは、オプンソースのソフトウェア、ユ自身でも目的じたオリジナルなプグラムを作成できます。C言語やベーシック言語などの一般的なプログラミング言語を勉強しなくても(していれば尚更)、非常簡単画像処理プグラムを作成できるとろがImageJみの1つです。
特に、ImageJマクロ語を用いた関数群は、バージョンが上がるごとに充実してきており、ImageJのプラグイを開発するためJavaサンプグラムも多く提供されています

今回、特にこのImageJ言語ログラミングテクックを紹介いたします。

マクロ言語によるプログラミングテクニック


ImageJの言語とはどようなものか、基本的なことは、本連載28で述てきたので割愛します

そして、早速ここでは、だれでも欲しいと思ってしまう、一連の処理の自動化「マ言語を用いた像処理ッチ理」テククを紹介します。 
ここでいうバッチ処理とは、ユが行う連の画像処理手順を自動化し、作業率化す理で

ImageJでッチ処理を行う際、最も簡単方法は、ImageJのメニューから(Plugins/ Macros/Record)選択して、処理作業Recorderエディ上に自動的 コマン(命令)を記録する機能を活用する方法です。

この処理で、レコードする一作業終了すればRecorderディタ上に一連の処理のマクロが自動記述されます。そして、このエディタ上のCreateボタことで、Macroとして、これらの処理コードが自動的にマクロコード化されます。以上の操作を行ったのち、このを実行すると、一連の処理が自動で処理されます。もう、自分の手を、頭を、繰り返し使う必要がありません。


理では、当然、ユーザーは最初にマクロを記載するまでのレコード機操作をマュアルで行わなければなりません。ただし、上述のように、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」