• 検索結果がありません。

image J 富山消化管撮影研究会

N/A
N/A
Protected

Academic year: 2018

シェア "image J 富山消化管撮影研究会"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

はじめに

 近年,医用画像診断装置の急速な発展に伴い,よ り情報量の多い大量のデジタル画像が容易に得られ る時代が訪れた.これによって,診療画像技術学を 背景とした分野においても,業者等が作成した画像 解析ソフトで標準的に備わっている機能を超えて, ユーザーが独自に考案したアルゴリズムを適用する, といった機会が増加している傾向にある.そこで,本 稿では,独自のアルゴリズムによりデジタル画像を容 易に処理することが可能な技術の一例として,フリー の 画 像 処 理ソフトとして 知られ ている ImageJ の Plugin機能(Java 言語使用)を用いた画像処理プログ ラミング法の基礎について解説する.

 ImageJ1, 2)とは,NIH Image を Java プラットホーム 専用に開発したフリーの画像解析ソフトである.Java を採用することによって,従来の NIH Image や Scion Imageとは異なり,Windows,Macintosh,Linux など 複数の OS 上で動作可能となり,さまざまな研究分野 で活躍する多くのユーザーを獲得するに至った.更 に,Plugin(「プラグイン」と読む)をサポートしている ことが大きな特徴として挙げられる.Plugin とは,ソ フトを使用するユーザーが,自分がほしい機能のみを 追加できるようにする補助プログラムであり,Java に よるプログラミングが 可能である.ImageJ では, Pluginから呼び出し可能なさまざまなライブラリが準 備されていることから,これらを有効利用することに より「ImageJ 上で表示された画像を,何らかのアルゴ リズムで処理し,すぐさま結果の画像を画面に表示 する」プログラムを容易に作成することが可能とな る.ここで,Plugin プログラミングに関する解説の詳 細については参考文献 3)を,また,ImageJ の Plugin プログラムの例題を含んだデジタル画像処理に関す る教科書としては参考文献 4)をそれぞれ参照された い.

1.Macro 機能 vs Plugin 機能 1-1 Macro 機能

 ImageJ では,「Macro 機能」または「Plugin 機能」を

パーソナルコンピュータを用いた医用画像処理の基礎

− ImageJ を用いて Plugin 開発編−

北里大学医療衛生学部

村石 浩

−パソコンソフト活用術−

用いることにより,ユーザー独自のコードを作ること が可能である.ここでは,まず Macro 機能について 例を挙げて説明する.Macro 機能は,「Plugin 機能」 に比べて簡易的な方法であり,「ImageJ に既に内蔵さ れたコマンドのみ」を自由に組み合わせて実行するこ とが可能な方法である.Fig. 1 に Macro 機能を利用 した例を示す.ImageJ のメインウィンドウにおいて Plugins→Macros→Record を実行すると,タイトルが

「Recorder」と書かれたテキストボックスが表示され る.この状態で,ユーザーが任意のコマンドを実行す ると,実行コマンドがこのテキストボックス内に順次 表示される.Fig. 1 では,まず File→New→Image で 8 bit型 256×256 pixels の黒色画像(画素値ゼロ)を 1 枚表示させ,次に,Edit→Selection→Specify で 128×128 pixelsの ROI を 画 像 の 中 央 に 設 定 し, 最 後 に Edit→Clear で ROI 内を白色(画素値 255)にした結果 が表示されている.ここでは 3 回の操作を行ったこと から,テキストボックス内に 3 行の実行コマンドが表 示されているのがみてとれる.この状態で,テキスト ボックス内の「Create」ボタンを押すと,「Macro.txt」と 書かれたテキストボックスが新たに表示され,Macro プログラムが完成する.ここで,このテキストボック ス内の Macros→Run Macro を実行すると,先ほどの 一連の操作が自動で再現される.また,File→Save As で例えばデスクトップにテキスト形式で保存し, 一度 ImageJ を再起動した後,Plugins→Macros→Edit を選び保存したマクロファイル(Macro.txt)を開くと, 再び Macro.txt と書かれたテキストボックスが表示さ れる(もしくは,Macro.txt のアイコンをマウスでつか んで ImageJ のメインメニューにドラッグ & ドロップ しても表示される).ここで,同様に,Macros→Run Macroを選べば,ImageJ を再起動後も同じ操作を実 行することが可能となる.

1-2 Plugin 機能

 次に,Plugin 機能について説明する.Macro 機能 では,既に準備されているコマンドのみ使用可能で あったが,Plugin 機能では,Java によるプログラミン

(2)

グが可能であり,ユーザーが独自にアルゴリズムを組 み込んで,特定の画素のレベルで任意の演算処理を 行うことが可能である.この種の演算処理は,通常, C/C++ や Fortran などの高度なプログラミング言語を 用いる必要がある.これらの言語では,対象とする画 像データをまず読み込んで一度配列に入れてから演 算を行い,演算終了後に配列をふたたび画像ファイ ルとして出力し,最後に,画像表示ソフトを用いて画 像を表示させる,といったたいへん複雑なプロセス が必要である.一方で,ImageJ の Plugin 機能では, 最低限の演算部分については Java によるプログラミ ングが必要であるが,それ以外については自動で実 行されるため,プログラミングがたいへん容易となっ ている.言い換えると,「ImageJ で表示した画像に対 して Plugin を実行するだけで,表示画像に対して任 意の処理を適用し再表示することが可能」というわけ である(これはまさに診療画像技術学を背景とした分 野において最も適した技術の一つであると言える).  Plugin プログラムの実際の作成方法については, 次章で説明することとし,ここでは,既に準備された Pluginのインストール方法について説明する.ImageJ はフリーソフトであることから,世界中のユーザーが 開発した大量の Plugin プログラムがホームページに おいて無 償で 公開されている5).ここで,好 みの Pluginのページに入り,Plugin の実行ファイルである

「.class」ファイルを各自コンピュータ内にダウンロード する.ダウンロード先は,いま ImageJ がインストー ルされているフォルダ(Windows であれば,C:¥Program Files¥ImageJ¥であるが)を <ij> と定義した時,その サブフォルダである <ij>¥plugins¥ 内に必ずダウン ロードする(このフォルダ内に置かないと Plugin プロ グラムは動作しないため).その後,ImageJ を再起動 しメニューの Plugins をマウスでクリックすると,そ こにダウンロードした Plugin が新たに登録されてい るの が 分 か る.実 は,ImageJ は 起 動 す るた び に

<ij>¥plugins¥ 内にある .class ファイルを検索し,メイ ンメニューの Plugins 内に登録を行っている.すなわ ち,独自に作成した Plugin プログラム(次章参照)も このフォルダ内に置く必要がある.

 一方で,Plugin のソースプログラムは,.class ファ イル(コンパイルされた機械語で書かれた実行ファイ ル)ではなく .java ファイル(Java によるテキストファイ ル)である.すなわち,各ユーザーが独自に Plugin を 作成した場合には,各自でコンパイルをして .class ファイルを作成する必要がある.その方法を以下に 説明する.例として,先ほどの Macro 機能で作成し た Macro.txt を ImageJ で開く(Plugins→Macros→Edit を選び,保存したマクロファイル「Macro.txt」を選択).

ここで,表示されたテキストボックス(タイトルが

「Macro.txt」のもの)内 に お い て,Edit→Convert to Pluginを実行する.すると,タイトルが「Converted_ Macro.java」と書かれた Plugin プログラムがテキスト ボックスとして表示される(Fig. 2).このテキストボッ クス内の File→Compile and Run を実行すると,保存 先を聞かれるので,<ij>¥plugins¥ を選択し OK を押 す.すると,先ほどの Macro プログラムと同じ操作 が Plugin プログラムによって行われる.ここで,

<ij>¥plugins¥ のフォルダ内をみてみると,Convert- ed_Macro.java(ソ ー ス プ ロ グ ラ ム)と Converted_ Macro.class(実行ファイル)が新たに作成されている のが分かる.すなわち,先ほどの操作で File→Compile and Runを実行したことにより,コンパイルで .class ファイルが作成され,続いて .class ファイルが実行さ れた,というわけである.更に,一度 ImageJ を終了 し,再起動してみる.すると,メインメニューの Plugin 内に「Converted Macro」というコマンドが登録されて いるのが分かる(これを実行すると先ほどの操作が再 現される).このように,Plugin で独自に作成したプ Fig. 1 Macro 機能を利用した例

(3)

ログラムは,ImageJ の新しいコマンドとしてメインメ ニューの Plugins 内にインストールすることが可能で ある.

2.Plugin プログラムの構成

 ここでは,Plugin の構成について例を挙げながら 説明する.ImageJ では,以下に示す二つの基本的な Pluginのフレームが準備されている.

・「① PlugIn フレーム」∼ プログラム実行の際に画像 を必要としない

・「② PlugInFilter フレーム」∼ プログラム実行の際に 画像を必要とする

 まず,「① PlugIn フレーム」についてみていこう. ImageJのメインウィンドウにおいて Plugins→New→ Pluginを実行すると,タイトルが My_Plugin.java と 書かれた「① PlugIn フレーム」の例題プログラムが表 示される(Fig. 3).ここで,前章のようにまず実行し てみよう.テキストボックス内の File→Compile a nd Runを 実 行 す ると 保 存 先 を 聞 か れ るの で,

<ij>¥plugins¥ を選び OK を押す.すると,コンパイ ル後にプログラムが実行され,画面に “Hello World!” と表示されたダイアログが現れ,OK をクリックする と実行が終了する(<ij>¥plugins¥ 内に My_Plugin.java と My_Plugin.class ができていることをチェックして おこう).ここで,Fig. 3 に示した実際のプログラムを みていこう.まず,“import” で始まる最初の数行で は,ImageJ 専用のライブラリ等を読み込んでいる. その下の “public class My_Plugin …” から最後までの 部分が Plugin 本体であり(Java では,これを “ クラ ス ” と呼ぶ),ここでは “My_Plugin” というクラス名 がつけられている(このクラス名はユーザーが好きな 名前をつけることができるが).ここで,① クラス名 とファイル名を同一にする必要があり,更に ② クラ ス名にアンダーバー ( _ ) を一文字以上入れる必要が

あるので注意しよう.更に,実際に実行したい内容 は,“public void run …” 内に書けばよい(図中の黒線 で囲んだ部分).ここでは,テキストをダイアログに 表示させる関数である “IJ.showMessage” を使って

“Hello World!” を画面に表示させている.一方で,こ の例題プログラム(Fig. 3)を先ほどの Fig. 2 のプログ ラムと比較してみる.すると,黒線で囲んだ部分以外 は全く同じ構成になっているのが分かり,Macro プロ グラムから作成した Plugin プログラムは「① PlugIn フレーム」を使用していることが理解できる.

 次に,「② PlugInFilter フレーム」についてみていこ う.ImageJ のメインウィンドウにおいて Plugins→ New→Plugin Filter を実行すると,タイトルが Filter_ Plugin.javaと書かれた「② PlugInFilter フレーム」の例 題プログラムが表示される(Fig. 4).ここで,プログ ラムを実行する前に何か画像を ImageJ で一つ開いて おこう(前章の Macro 機能の説明で作成した画像を用 いるとよい).先ほどと同様に,テキストボックス内の File→Compile and Run でプログラムを実行してみ る.すると,表示された画像の画素値(白黒)が 0.5 秒 間反転してからもとに戻るのが分かるであろう(何度 か繰り返し実行してみよう).ここで,Fig. 4 に示した 実際のプログラムをみてみる.Fig. 3 と同様に,最初 の部分で “import” から始まる初期設定が行われてい るが,最後の行(“import ij.plugin.filter.*; ”)が先ほど と異なるのが分かる.これは,「① PlugIn フレーム」 と「② PlugInFilter フレーム」で使用するライブラリが 異なるためである.次に,プラグイン本体であるクラ ス名として,ここでは “Filter_Plugin” という名前が用 いられており,更にこのクラス内において “public void run …” の前に “public void setup …” が新たに宣 言されているのが分かる.この “setup” 内では,表示 された画像の画素値をプログラム内の配列に自動で 読み込むための宣言が行われており,ここでは 8 bit, Fig. 2 Macro.txt(Fig. 1)を Plugin プログラムに変換したも

の(Converted_Macro.java) Fig. 3 「① PlugIn フレーム」の例(My_Plugin.java)

(4)

16 bit, 32 bitグレイスケール,8 bit カラーなどの任意 の画像形式を読み込み可能とする “DOES_ALL” が 宣言されている[もし 8 bit グレー画像のみに限定する 場合には “DOES_8G” とする(次章参照)].更に,

“run” 内をみていくと,まず “ip.invert ( ); ” で読み込 んだ画像の画素値が入った配列の値を反転させる計 算が行われ,“imp.updateAndDraw ( ); ” により計算 後の配列の数値を表示画像に反映させることにより, 表示画像の白黒を反転させている.次に, “IJ.wait (500)” で 0.5 秒間待った後,再び “ip.invert ( ); ” で配 列の数値を再び反転させてもとに戻し,“imp.update AndDraw ( ); ” で再表示が行われプログラムが終了し ているのが分かる.

3.Plugin プログラムの作成

 ここでは,前章で説明した「② PlugInFilter フレー ム」の応用として,表示した画像の特定の部分につい て操作を行う方法について説明する.まず,前章の 要領で ImageJ のメインウィンドウにおいて Plugins→ New→Plugin Filter を 実 行し てタイトル が Filter_ Plugin.javaと書かれたテキストボックスを表示させ る.このテキストボックスにおいて File→Save As と すると保存先を聞かれるので,<ij>¥plugins¥ 内にお いて,例えば Program_1.java というファイル名で保 存する.すると,先ほどのテキストボックスのタイト ルが Program_1.java に変わり,更にプログラム内の クラス名を宣言している部分が,“public class Filter_

Plugin …” から “public class Program_1 …” に変わっ ているのが分かる.すなわち,ファイル名とクラス名 が自動で統一されたことにより,新しい Plugin プロ グラムが作成されたことになる.ここで,Fig. 5 にプ ログラムの例を示すので,実際に作成してみる.この 例題プログラムでは,読み込む画像の形式を 8 bit グ レイスケールと指定しているため,“setup” 内におい て “DOES_ALL” ではなく “DOES_8G” と宣言されて いる.また,“run” 内では,まず “int w = …” と “int h

= …” で,それぞれ表示画像の横と縦のピクセル数を 読み込んで,整数型で宣言された変数 w と h にそれ ぞれ代入している.次に,u を w 回,v を h 回ループ させ,ある画素 (u, v) に入っている数値を “ip.getPixel (u, v)” により,整数型で宣言された変数 p に一度入 れ,その後,“ip.putPixel (u, v, 255−p)” により,画素 (u, v) に 255 から p を引いた数値を入れ直す,といっ た操作をすべての画素 (u, v) について行っている.こ のループ計算が終了後,“imp.updateAndDraw ( ) ; ” で更新された配列の値を表示画像に反映させてい る.すなわち,このプログラムを実行すると,8 bit グ レイスケールの表示画像の画素値(白黒)が反転する 結果が得られることになる.ここで,ループの範囲を 工夫すれば,画像の特定の領域のみに操作を適用す Fig. 4 「② PlugInFilter フレーム」の例(Filter_Plugin.java)

Fig. 5 「② PlugInFilter フレーム」による例題(Program_1. java)

(5)

ることが可能となる.また,“ip.putPixel (u, v, p/2)” と すれば,画素値が 1/2 の画像を作ることができる.以 上のように,「② PlugInFilter フレーム」を独自に応用 することにより,簡単な画像処理ソフトを作成するこ とが可能となる6)

おわりに

 本稿では,ImageJ の Plugin 機能の使用に関する初 歩的な部分について読者の皆さんに実際に体験して いただくことを目的として,例題による実践的な解説 を行った.今後,多くの方々に Plugin 開発を挑戦し ていただく際に,本稿の内容が役に立てばたいへん 光栄である.

参考文献

1) Rasband WS. ImageJ. U. S. National Institutes of Health, Bethesda, Maryland, USA, 1997-2009.

http://rsb.info.nih.gov/ij/

2) Abramoff MD, Magelhaes PJ, Ram SJ. Image Processing with ImageJ. Biophotonics International 2004; 11(7): 36-42.

3) Bailer W. Writing ImageJ PlugIns − A Tutorial.

http://www.imagingbook.com/fileadmin/goodies/ijtutorial/ tutorial171.pdf, 2003

4) Burger W, Burge MJ. Digital Image Processing. An Algo- rithmic Introduction using Java. Springer, 2008.

http://www.imagingbook.com/ 5) ImageJ Plugin ホームページ.

http://rsbweb.nih.gov/ij/plugins/index.html

6) 村石 浩,他.ImageJ による診療放射線技師養成向け画 像再構成ソフトの作成.I. 投影及び画像再構成.Japanese Journal of Medical Physics 2006; 26(2): 155-156.

Fig. 2  Macro.txt (Fig. 1)を Plugin プログラムに変換したも
Fig. 5  「② PlugInFilter フレーム」 による例題(Program_1. java)

参照

関連したドキュメント

音節の外側に解放されることがない】)。ところがこ

そこで本解説では,X線CT画像から患者別に骨の有限 要素モデルを作成することが可能な,画像処理と力学解析 の統合ソフトウェアである

メラが必要であるため連続的な変化を捉えることが不

め測定点の座標を決めてある展開図の応用が可能であ

機械物理研究室では,光などの自然現象を 活用した高速・知的情報処理の創成を目指 した研究に取り組んでいます。応用物理学 会の「光

この設定では、管理サーバ(Control Center)自体に更新された Windows 用の Dr.Web Agent のコンポ ーネントがダウンロードされませんので、当該 Control Center で管理される全ての Dr.Web

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

本論文での分析は、叙述関係の Subject であれば、 Predicate に対して分配される ことが可能というものである。そして o