Re - ImageJで学ぶ!: 2015-12-06

2015年12月10日木曜日

第62回 ImageJによる関心領域計算手法ーいろいろなROI計測方法についてで学ぶ!

ImageJが持つほかのソフトウェアにはない強みの1つとして、多彩な画像解析機能が挙げられます。画像解析を行う場合、入力画像全体を解析するよりも画像の中心の関心領域(region of interest:ROI)を抽出し、その中の統計解析や定量解析を行うことが圧倒的に多いです。本稿では、ImageJの基本ツールの部分に立ち返り、ROIを用いた便利な計測方法を紹介します。


ROIツール



まず、ImageJのメニューにあるROIツールアイコンについての簡単な使用例を示します。





ROIの形状には矩形、円形、ポリゴン形状、フリーハンド形状などがあります。また、領域を囲むという定義からは外れますが、ラインツールやポイントツールもROIツールの1つとして説明していきます。

ROIのアイコンには赤い逆三角形のマークが右下についているものとついていないものがあります。




ついているものはROI上で右クリックするかダブルクリックするとより詳細な機能がダイアログとして現れます。図は、円形ROIを選択して、画像上にROIを描画したシーンと、このROIを右クリックしてブラシツールに切り替えたシーンです。


(ImageJメニューの円形ROIアイコンを右クリック)

(Selection Brush Toolで輪郭を変形)

このように円形ROIではブラシツールと使い分けることができます。

また、次の図は、ラインツールをラインの幅を変えて使用しているシーンです。



線幅を増やしたラインのプロファイルは、幅のピクセル値の平均値をプロットしていくため、通常のラインツールを使用したときよりも滑らかに描かれていることがわかります。

ライン上のピクセル値を位置ごとにプロットしたもの(ラインプロファイル)
線幅を30ピクセルにしたラインツール(Edit>Options>Line Width)のプロファイル
このように、ラインツールは幅を変えるだけでなく、さまざまな形状で利用できます。通常のライン描画に加えて、ポリゴンラインや自由線、矢印線などを描画でき、それぞれのライン上の画素値を上記のようにプロットすることができます。


ROIの計測項目



画像上の任意の領域を描画するだけではなく、その領域内の統計値を計算したい場合は、まず最初に評価項目を決定します。ImageJのメニューから、Analyze>Set Measurements...を選択し、計測に必要な項目をチェックします。


マルチROI、マルチ画像対応ROIの自動計測



ImageJには画像上に複数のROIを設定して、すべてを同時に計測する作業や、その作業を複数の画像にわたり一挙に解析してしまう特別なツールが備わっています。それが、"ROI Manager"です。ImageJメニューのAnalyze>Tools>ROI Manager...を選択すると、図のようなダイアログ画表示されます。これがROI Managerです。


(すでにいくつかのROIが記録された状態のものです)

このROIマネージャーを表示したまま、画像上にユーザが使いたいROI(上記図の場合は、円形ROIですが、ラインツールも使用可能)を設定し、ROIマネージャーの<Add>ボタンを押すと、上図のように、ROIの位置とROI番号が記録されます。これを同様に繰り返し、複数のROIを"Add"機能によって付加していきます。最後に、Measureボタンを押すと、表示している現在の画像のみの複数のROIの統計値がすべて結果テーブルに自動的に表示されます。



この結果テーブルを見てわかるとおり、先ほど、Set Measurementsで設定した項目になっています。


スタック画像、マルチフレーム、別シリーズスタックの計測



測定対象とする画像が1枚だけでなく、多チャンネルもしくはスタック画像で、同一箇所のROIを複数の画像上で測る場合にも、ROIマネージャで一挙に計測することができます。ROIマネージャ上のMoreボタンを押して、Multi Measureを押すと、複数画像ROI計測用ダイアログが出現するので、Measure all slicesをチェックしてOKを押すと全画像にわたり同一箇所のROIが計測されます。



さらに、一度計測を行ったROIのポジションと大きさをImageJを起動するたびに設定しなおすのは非常に煩雑な作業です。その対応として、同じダイアログのMoreボタンからSaveでいったん保存しておくと、次回からはImageJを立ち上げて同一の画像でも別の画像を読み込んでもROIマネージャを起動して同じMore機能でOpenを押すと、以前と同じ位置にROIが表示されます。



実践的な例では、ファントムを用いた計測などがあります。
以下は、NEMA NU 2 2012 PET bodyファントムを計測した画像ですが、ROIもたくさん作る必要があり、かつ、マルチフレームでシリーズが複数に分かれます。
このような場合でも、上記のようにROIデータを保管して、複数シリーズに適用することや、スタック画像であっても、その中の一枚だけを計測したり、スタック画像全てを対象として、全データテーブルを作ったりできます。


NEMA NU 2 2012 PET bodyファントム

このように、ImageJではROI計測の作業が非常に便利で使いやすくかつ高速です。

今回はImageJによるROIの計測方法について説明を行いました。次回も続けてImageJならではの便利な機能と使い方の説明を行います。


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

第61回 ImageJによるコントラスト調整の応用ーCLAHEについてで学ぶ!

ImageJの標準の画像処理機能の中には、ヒストグラムを均一にしてコントラストを調整するメニューもありますが、同じ画像の中でも濃淡コントラストが極端に異なる領域が存在する場合、画像ノイズも強調されてしまい、期待通りの画像処理結果が得られないことがあります。このような場合に、ユーザー側で許容できるノイズレベルや、画質を調整できるコントラスト制御機能があれば非常に便利です。

今回は、このコントラストの均一化について、パラメータの調整が可能な”CLAHE”(コントラスト制限付適応ヒストグラム均一化/均等化)について説明します。
医用画像処理の応用として、CLAHE処理は、放射線治療の分野で使用されるリニアックグラフィ(ポータルイメージ)やマンモグラフィなどにも適応されています。


CLAHEとは


ヒストグラム均一化処理は、処理対象となる画像全体に機能しますが、コントラスト制限付適応ヒストグラム均一化/均等化処理(Contrast Limited Adaptive Histogram Equalization:CLAHE)は、画像内のtilesと呼ばれる分割されたブロックごとに処理をすることで、画像の局所領域のコントラストを強調し、細部の可視性を高める手法です。CLAHEは局所領域のノイズの過剰な増幅を抑えた強調処理ができるといわれています。

CLAHEでは、分割されたtileに対して、近似的かつ最適なヒストグラムのコントラストになるよう自動濃淡調整を行います。この処理の際、計算ブロックごとの境界にアーチファクトが生じるため、 双一次内挿(バイリニア補間)を使って、近傍のtileに補間処理をかけます。

ImageJでは、Stephan Saalfeld氏によって開発されたCLAHEプラグイン(http://rsbweb.nih.gov/ij/plugins/clahe/CLAHE_.java)が用意されており、通常のヒストグラム均一化と一味違う結果が得られます。
以下にCLAHEのコントロールパラメータを示します。
  • ブロックサイズ:画像を分割するtileのサイズの決定。目安として画質を維持したい対象のサイズよりも大きなブロックサイズを選択すと良い。
  • ヒストグラムのビン数:8および24ビットカラー(RGB)のみ対応のヒストグラムで、ビン数はtileのピクセル数よりも小さく設定しなければならない。
  • 最大スロープ:強度伝達関数(intensity transfer function)によるコントラスト伸張の制限を決める。この値の1は、元画像を基準として、それよりも大きな値を入力することによって画像局所の最大コントラストを決定する。

ImageJを用いたCLAHE処理


ここからは、実際にImageJでCLAHEを利用する方法を紹介します。
まず、CLAHEのプラグインファイルをImageJプラグインのWebサイトからダウンロードし、ImageJのプラグインフォルダ下に置きます。ダウンロードできない場合は、上記URLのソースをすべてテキストにコピーしてから、拡張 子を".java"に変えます。

対象となる画像をImageJに表示し、インストールしたCLAHEプラグインをプラグインメニューのコンパイル&ランから選択して起動します。



すると、前述したパラメータを入力するウィンドウが現れるので、それぞれの値を入力します。図に、同一症例におけるImageJを用いた標準的なコントラスト均一化処理を行った場合と、CLAHE処理を行った場合を示します。

標準的なコントラスト均一化処理(Process>EnhanceContrast...)

CLAHE処理


この例では、tileのサイズを127×127にし、ヒストグラムビン数は画像が8ビットであるため256とし、maximum slopeをオリジナルの1より大きな値の3で処理してみた例となります。
その結果、目視評価では、CLAHEによる処理は、ノイズを抑制しながらコントラストのバランスが良くなったように見えます。

図は、前述の比較例をImageJのSNR計測プラグインを用いて定量的に行った例です。


(Term1:オリジナル、Term1-1:均一化処理、Term1-2:CLAHE(tile:127)、Term1-3CLAHE(tile:63)、Term1-4CLAHE(tile:27))

それぞれ、オリジナルを元画像(リファレンス)としてSNR(Signal-to-noise ratio)、PSNR(Peak signal-to-noise ratio)、RMSE(Root mean square error)、MAE(Mean absolute error)を求めた値を示しています。

CLAHEでtileを細かくしていくほど、すべてのデータが元データと比べて改善していることがわかります。tileなどの設定値や解析対象物によって使い分けをすると、より良い結果が導けるかもしれません。腹部MRI画像での処理例では、かなり改善されるようです。


今回は濃淡値の均等化による調整を行う際、従来のヒストグラム均一化処理とは異なるCLAHE処理を用いて、ノイズを抑制を調整しながら、コントラストを均一に強調する方法を紹介しました。次回もImageJの便利な機能を紹介します。


参考記事:「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(25・11) 2010, p114-115」

第60回 ImageJによるGUIの活用で学ぶ!

ImageJではユーザが独自にプログラム開発を行ってオリジナルのImageJを作成することができます。(その方法には、ImageJの開発用にパッケージ化されたJava言語のライブラリを用いる方法や、マクロというImageJ特有のマクロ言語を用いる方法の二つがあります。)

今回はImageJを使いやすくするために、ユーザ自らがアイコンなどを作成して、ImageJのルックアンドフィールをアレンジする方法を紹介します。

プラグインの準備


まず、ImageJでグラフィカルユーザインターフェース(GUI:ジーユーアイまたはグイ)を作成するためのプラグインをインストールします。プラグインファイルは”Action Bar Plugin”です。

http://imagejdocu.tudor.lu/doku.php?id=plugin:utilities:action_bar:start

このプラグインは、Jerome Mutterer氏(Institut de Biologie Moleculaire des Plantes, Strasbourg)によって作成されたものです。

このActionBarプラグインは、ダウンロード後、解凍して、フォルダごとPluginsフォルダにコピーすれば使えるようになります。フォルダ構成と内容は以下のようにしてみました。

ImageJ/plugins/ActionBar               Action Bar プラグイン用フォルダ
action_bar202.jar        ActionBarフォルダにjarを配置
icons/              ActionBarフォルダにiconsフォルダを作成

さっそく、ActionBarの動作を確認していきましょう。
次のようなGUIが自在に使えるようになりますよ。

(http://imagejdocu.tudor.lu/doku.php?id=plugin:utilities:action_bar:startより引用)

ユーザー自身でよく使うアイコンをあらかじめ作成しておき、開始時に表示させれば作業効率が向上します。

アイコンの操作方法


アイコンを独自でコントロールする場合に、ActionBarの構成を変更することができます。プラグインメニューから”ActionBar”を選択すれば、図のようなウィンドウが表示されます。


このウィンドウの中のタイトルに従って、テキストボックスを埋めていくと、独自のGUIを構成することができます。
前述の図のテキストボックス変更せず、デフォルトでOKボタンを押すと、次の図のようなGUIとマクロコードが自動表示されます。



このコードを改変すると、独自のGUIが作成できます。例として、次のようなコードに改変してみました。1つ目のボタンを以下のように変更してみます。

<line>
<button> 1 line 1
label=hello
icon=noicon
arg=<macro>
showMessage("Good luck");

</macro>

もし、ActionBarプラグインを起動させている場合は、一旦GUIを終了させてから、このマクロを、ImageJのメニューから"Run Macro"します。(もしくは、このコード上で、Ctrl+Rを押す)そうすると、ビルドされて、書き換えられたGUIが表示されます。

(ライン1の一つ目のボタンが変わり、ボタンを押すと、指定した文字列が表示される。)

このように、新しいボタンを作成するには以下のルールに従うようにします。

⑴新しいボタンは<button>タグを宣言する
⑵2番目のラインは、「label=」キーワードで続けて入力する
⑶3番目のラインは「icon=」キーワードで画像を入力できる
→ImageJ/Plugins/ActionBar/icons folder下に画像を用意しておくか、アイコンを使用しない場合は「noicon」キーワードを入力する。画像を用意する場合は、画像までの相対パスを"icon="以降に記録する(例えば、"VIS-test-ActBar/abc.png"など)。
⑷最後のコードには「arg=」キーワードを入力する。これはボタンキーが押された時に動作するアクションを入力する。

arg=の書き方は、標準的には1ラインで下記のように記述します。
arg=if(isOpen(“Log”)) selectWindow(“Log”); run(“Close”);

しかし、これではわかりにくという場合には、arg=の次に<macro></macro>または<tool></tool>を挟んで記述すれば、プログラムがわかりやすくなる場合があります。

・簡単な実行処理記述が長くなる時は<macro></macro>で囲む。

arg= <macro>
if (isOpen(“Log”)) { 
selectWindow(“Log”); 
run(“Close”); 
}
</macro> 

・ImageJ Tool機能を使う場合は、<tool></tool>で囲む。

arg=<tool>
getCursorLoc(x, y, z, flags);
print(“Pixel: ”+x+“ ”+y+“ Value: ”+getPixel(x,y));

</tool>

より詳しいGUIのタグの説明は割愛しますが、同プラグイン配布ページにPDFファイルによる詳細な説明があるので、参照してみてください。

(こちら)
http://imagejdocu.tudor.lu/lib/exe/fetch.php?media=plugin:utilities:action_bar:mutterer_workshop.pdf

ActionBarのフォルダ下には幾つかのサンプルマクロが入っているので、参考にしながら、独自のアイコンとイベント処理コードを書くのが最も近道です。特に画像を開くと、その画像に磁石のようにアタッチメントされるSticky Barマクロなどは、非常に便利なGUIマクロです。

FigureJ


もう一つ、このJerome Mutterer氏が新たに開発されているプラグイン「FigureJ」を続けてご紹介いたします。

http://imagejdocu.tudor.lu/doku.php?id=plugin:utilities:figurej:start

このプラグインは、ActionBarとは違い、論文やレポートに画像の図を綺麗に作る時に使われるツールです。

機能は以下の通りです。

  • 簡単に図のレイアウトを作成
  • 視覚的にパネルに画像を配置
  • 画像のスケーリングやローテーション
  • ラベルやスケールバーの設置
  • パネルごとにオリジナルの画像データソースを扱える
  • 保存と再編集
  • 各パネルの編集ログと一緒に画像を一般的な画像フォーマットでエクスポート
インストールは、いつも通り、以下のJarファイルを一つのフォルダにまとめ、pluginsフォルダに配置します。

  • figurej_110b.jar → get it from this link
  • LSM_Reader.jar → get it from this link and unzip it in your plugins folder.
インストールができたら、プラグインメニューからFigureJを起動してみます。すると、次のような小さいウィンドウが現れます。


この図の「New」または「Open」を押して、編集ウィンドウを開きます。今回は、「New」を押してみます。
すると、図の作成をするためのウィンドウの設定画面が現れるので、そのままデフォルトのままOKします。


そうすると、図を編集するためのメインウィンドウが立ち上がります。


ここで、レイアウトを決めてみます。例えば、2段にして、上を2列、下を1列にしてみます。この作業を行うには、図を表示するウィンドウをアクティブにしてから、設定画面の「Split -」「Split |」を使います。

(まず上下に分割)
(上の列を2つに分割)

それから、パネルに画像をはめ込んでいきます。任意のパネルを選択してから、Open imageから画像を選択して、切り取りたい領域をROIを調整したら、「OK」として、それぞれのパネルに画像をはめていきます。

(任意の画像を開き、カットしたい領域を選択)
(すべてをはめ込んだ後の画面)

そして、せっかくなら文字も、という場合も、「more」ボタンからOption画面を起動して、Panel labelsの設定を調整して、アクティブになっている画像パネルの四隅に好きな文字、例えば、ABCなどをそれぞれの図に順番につけることもできます。この機能を使わなくとも、ImageJのテキスト入力機能でも同じような操作が可能です。



(順序を入力)

今回はImageJの操作に便利なマクロによるGUI作成方法および論文やレポートのための図のレイアウト作成について説明を行いました。次回も便利なツールの解説を行います。

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

2015年12月9日水曜日

第68回ImageJによる粒子画像流速測定法の利用で学ぶ!

この記事は参考記事を援用して、筆者の考えも交えつつ、記述しています。

前回、OpenCVをImageJで利用する方法を紹介しましたが、今回はより実践的にOpenCVを応用した粒子画像流速測定法(Particle Image Velocimetry:PIV)をご紹介します。

粒子画像流速測定法(PIV)とは


粒子の流れを可視化する画像処理手法の一つに粒子画像流速測定法があります。追跡対象の粒子が何らかの媒体の中でどのように動くのか、その流れや挙動を可視化することによって流れの速度分布を定量計測することができます。1つの粒子を追跡することで、速度と方向が把握できます。
コンピュータ内でなく、実際のウェットな実験では、拡散する粒子の追跡はレーザードプラ速度計測器や熱線流速計などが用いられます。

流量の解析には、2つのレーザー光を照射し、高速フレームカメラで撮像して計測します。医用画像に応用する場合でも、スタックさえれた動画像の関心領域の動態挙動を可視化することは血流の解析や、そのほかの生理的な動きベクトルを観察するのにも応用可能です。

ImageJを用いたPIV


ImageJを用いたPIVの方法は、

第27回 連続画像処理 ImageJによる動画像の取り扱いについてで学ぶ!

をご参照ください!

次回もImageJによる応用画像処理方法について述べます。

参考記事:「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(26・9) 2011, p118-119」

Visionary Imaging Services, Inc.は、イメージング技術サポートを通じて、創薬研究や医療機器開発など、臨床研究(臨床試験)サポートサービスを展開しております。OsiriXシリーズも販売中です!よろしくお願いします!