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

2015年10月23日金曜日

第42回 ImageJのソースコード分解(Eclipseを用いたImageJのプラグイン実行方法)で学ぶ!

前回、lmageJ本体のソースコードの内容を理解するための第1歩として、Eclipseという無償のプログラミングツール(統合開発環境:IDE)を用いて、lmageJのソースコードを表示し、ビルドという作業によってlmageJの実行ファイルを作成するための手法を紹介しました。

今回は、前回に引き続き、lmageJ本体のソースコードの内容を整理しながらlmageJが動作する仕組みを理解し、プラグインの開発をう方法について解説を行います。

ImageJAPIドキュメント


ImageJ大きくいくつかのクラスファイルの集まりであるパッケージで構成されています

このImageJのAPIは、そのパッケージやクラスについての内容をまとめたもので、ImageJのサイトで詳しく解説がされています(http://rsbweb.nih.gov/ij/developer/api/index.html) . ImageJはJava言語で書かれていますので、このAPIはJava APIの一つです。

この中で、ImageJの動作に関するメインのプログラムは、ijパッケージ下の“lmageJ”というクラスです。このクラスの中に、main関数が記述されています

ImageJクラスには、“awt” というJavaで用いるGUIライブラリやマウスを用いたイベント処理の使用から、スレッド処理などを行えるように拡張されています。
スレッド処理とは、簡単に説明すると「同時に複数の処理を平行して行う」ことです。スレッドとは、アプリケーション内で実行する最小単位を意味し、複数のスレッドが独立して実行されるものを「マルチスレッド」といいます。

ImageJクラスでは、スレッド機能を提供するインターフェイスとしてRunnableインターフェースを使用しています。

書式は、スレッド機能を持つクラス内にrunメソッドを用意し、その中に処理を記述します。実際の記述内容は、複数のスレッドが相互作用でブロックしてしまい、処理が完全に停止する「デッドロック」を避けるために、部からスレッドをquitできるようになっています。

EclipseによるImageJのプラグイン開発「Hello world!」


Eclipseのプログラムエディタは、ユーザーサポート機能が豊富であるために、ImageJのプラグイン開発ツールとしても使いやすいです。

ここからはEclipseにプラグイン開発環境を整える手順について説明します。
なお、ここでご紹介する手順は、こちらを参考にしています。
http://imagejdocu.tudor.lu/doku.php?id=howto:plugins:the_imagej_eclipse_howto

前回までにImageJソースコードからEclipseを使ってビルドするところまで解説しました。

今回は、プラグインとしてテストしたいコードを作成するために、プラグイン用のプロジェクトを作成して、コードを書き、このコードをEclipse内のImageJのメインクラス 下で実行できるようにしてみましょう。

まず、プラグイン用のJavaプロジェクトを新しく作ります。例えば、MyPluginとします。
次に、このプラグインの中に新規Javaクラスを作成します。ここでは、簡単に。「Hello world!」表示プログラム「TestPlugin_」とします。

クラス名にアンダースコアを加えると、プラグイン実行時にリストがGUIに表示されますので、加えておきます。

そして、デバックを効率的に行うためのbuild.xmlを新規作成します。
あるいは、なんらかのテキストエディタなどで同様のxmlファイルを作り、プロジェクトファイルにコピーしてください。
次に、このプロジェクトファイルを右クリックし、プロパティから、ビルダーを選択して、Ant_builderを選択します。新規にNew_Builderを追加します。

次に、そのままビルダーの「編集」から、以下の通り設定します。
これで、mainメソッドがImageJであることを設定できます。


次に、「実行」の中のプルダウンに含まれる「実行の構成」を起動して、ImageJクラスが設定されていることを確認します。

また、その「ソース」タブで、MyPluginプロジェクトが選択されるように設定します。

そして、最後に、MyPluginの中のbuild.xmlから、ImageJを起動します。
無事にImageJが立ち上がり、MyPluginが読み込まれていることがわかります。

(起動したImageJのPluginsの構成)

(実行結果)

無事に「Hello world!」ウィンドウが表示されました!

動作の基本はここからさらに掘り下げていき、自分の作りたいプラグインを作りましょう。

ここで、1つ、注意事項があります。

それは、決して、自分のオリジナルで1からコードを組み立てないことです。

意外に思われる方もいらっしゃるかもしれませんが、プラグインを作る時点で、すでに、万人が開発に関わってきたImageJの肩の上にのっているので、しっかりと先人の知恵を学んで、活用させてもらいましょう。ImageJが教育の世界で利用されているのは、そういった背景もあります。

そもそも、Javaって何?という方、私は以下の参考資料で基本を学びました。
  • Eclipse 完全攻略シリーズ
  • Eclipse ではじめるJavaプログラミング入門シリーズ

(お使いになるEclipseのバージョンに合わせて、図書館とかで見つけてください。私は、この前、図書館でPC使って怒られたので、ちゃんとPCスペースでプログラミングしてくださいね笑。)

この本を読破したら、もうJavaの基本はわかると思いますので、Oracleが公開しているサンプルコードや、また、Java driveという専門のブログも非常に参考になります。

ということで、公開されているプラグインプログラムを参考にして、独自のプラグインを開発してみてください!

前回に続き、EclipseによるImageJのソースコードのビルド方法やプラグインの開発方法を解説しました。

次回からは、再び医用画像処理の基本に戻り、プラグインと対比しながら解説を行います。

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

2015年10月21日水曜日

第41回 ImageJのソースコード分解(Eclipseを用いたImageJソースコードのコンパイル)で学ぶ!

lmageJの開発者たちは、lmageJのプラグインのみではなく、根幹となる部分のソースコードも公開しています。
また、開発者のためのドキュメントが用意されており、細部にわたってlmageJ作成のためのクラスやメソッドの解説がされています。ただし、ImageJその構成のシンプルさへのこだわりから、lmageJを開発するための道具やその機能も必要最低限であり、複雑なプログラムの解析は独自の手段を講じる必要があります。

今回はlmageJそのものを開発するための道具の1つとして「Eclipse」というオープンソースの統合開発環境(integrated development environment:IDE)を用いて、より高度なImageJを用いた解析のための準備方法を紹介します。

Eclipseとは


エンドユーザが、ImageJを用いてオリジナルのプログラムを開発する場合、プラグインもしくはマクロの開発用のエディタしか与えられていません。そのため、ImageJそのものを開発する場合は、らかのJavaの開発環境が必要となります。また、プラグイン開発も、ImageJのエディタだけでは、他のクラスライブラリの読み込みなどができず、苦労することもあります。

このような課題を解決してくれるのが、Eclipseです。

Eclipseは、IBM社が中心となって開発したマルチプラットフォームの無償のIDEです。
ライセンスは、Eclipse Public Licenseが適用されています。
特に、Javaプログラマーの間で人気があり、高機能なオープンソースの開発ツールであることから、ImageJの開発者コミュニティでも愛用されています。

Eclipseのインストール方法と日本語化


まず、始めの準備として、Java開発環境をPCにインストールする必要があります。〔第2回・第40回のJava実行・開発環境のインストール方法を参照〕。

次に、Eclipseのダウンロードページ https://eclipse.org/downloads/)から、最新バージョンをダウンロードします。2015/10現在は、Marsが最新版になっています。今回はインストーラを使ってみます。


次に、開発したい用途に合わせて、Eclipseの種類を選択して、ダウンロードしてください。今回は、JavaEEなどのパッケージを本格的に使う人向けのJavaEEバージョンにしました。

インストールしたいフォルダを指定して、そのままインストールしましょう。
この操作の時に、workspaceフォルダの作成について問われます。このworkspaceフォルダというのは、ソースコードを格納する場所になるので、非常に重要です。わかりやすいところに作成しましょう。また、クラウドなどを利用している方は、Drop boxなどに、このworkspaceを作成することもできます。

JDKのパスは通しましたか?
→コマンドプロンプトやターミナルで"javac"と入力して、エラーメッセージは出ませんね?

(パス設定が成功している時の"javac"実行結果)

そしたら、まずは、eclipseを起動してみましょう!

こんな画面から、、

初期起動画面になり、右上のworkbenchから、、

実際のエディタ画面に遷移してください。

ここで、デフォルトでは、Eclipseのインターフェースは英語ですので、希望する方は、この操作画面(GUI)を日本語化することもできます。
これには、Pleiadesというパッケージを使います。

OSがWindowsの方は、このサイトの以下のページから、バージョンにあったものを選び、ダウンロードしましょう。

(Windows 用)

(Java Full Editionをダウンロード)

Windowsの方で、これ以降の日本語化の方法は、こちらのサイトが参考になります。

OSがMacの方は、Pleiadesのページの中段にあるプラグインをダウンロードします。

(安定版を選択)

このファイル(pleiades_x.x.x)を解凍し、内容物であるfeaturesフォルダとpluginsフォルダの中身を、そのままEclipse.appの下の同じ名前のフォルダ内に追加します
この操作を行うためには、インストールされたEclipse.appのパッケージを展開してから(Finderで開いて、右クリックするなど)、Contents>Eclipseフォルダにある各フォルダにコピーしましょう。

(Eclipse.Appパッケージを展開)


こちらも参考にしてください。

このあと、Contents>Eclipseフォルダにあるeclipse.iniをテキストエディタで開き、一番最後の行に、以下の文章を追加して、上書きします。

-Xverify:none
-javaagent:../Eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

この作業によって、Eclipseが日本語環境で動作するようになります。もともと、PleiadesはEclipseのプラグインですので、別のプラグインを使う方法もありますので、好きなやり方で試してみてはいかがでしょうか。

(日本語化)

Eclipseを用いたImageJプロジェクトの作成


まず、ImageJのソースコードダウンロードサイト (http://rsb.info.nih.gov/ij/download/src/)から、ImageJのソースコード“ij150c-src.zip” をダウンロードします。(執筆時の最新バージョンは1.50c)

解凍すると、sourceフォルダが出現するので、適当なディレクトリに保存します

次にEclipseを起動し、ファイルメニューから〈新規ロジェクト〉を選択し、Javaプロジェクトを作成します。



プロジェクト名(例:lmageJ1.5)として、そのまま次へ。


「追加ソースのリンク」から、展開しておいた"source"フォルダを指定します。


次に、組み込みおよび除外フィルターにパターンを、以下のように指定します。


そうすると、プロジェクトの内容として、"src"と"source"ができているはずなので、使わない"src"フォルダは削除してしまってください。

(利用しない"src"を削除)

ここまでで、基本的なImageJプロジェクト作成は完了です。
早速、source>ij>imageJ.javaを選択して、画面上の緑の右三角ボタンから、Java アプリケーションとして実行してみてください。EclipseからImageJが起動します。

(EclipseからImageJ起動)

上記のプロジェクト作成後、EclipseがImageJのソースコードをコンパイルしてくれるので、実行が可能な状態になっているのですが、もし、この時点で赤いバツ印などが表示されているときは、エラー表示を確認しましょう。

ImageJは、きちんと開発されているので、エラーの原因はほぼほぼ、ユーザーの設定ミスです。

バージョンによっては、com. sun.toolsを型に解決できません」というようなエラー警告が起こることがあります。
これは端に、JDKフォルダ内のlibフォルダ下のtools.jarファイルが認識されていないというエラーなので、プロジェクトを右クリックして、プロパティから、「ライブラリー」タブの〈外部Jar追加〉をクリックして、JDKフォルダ下のtools.jarを選択してエラーを解決します。
他の「***を型に解決できません」というエラーも同様の方法で解決できます。


外部Jar追加の画面

ImageJ開発環境構築は以上です。

構築のやり方はいろいろありますが、今回はソースコードを参照する方法をご紹介しました。より詳細な説明はこちらもご参照ください。
http://imagejdocu.tudor.lu/doku.php?id=howto:plugins:the_imagej_eclipse_howto

他にも、Gitからクローンをインポートする方法なども紹介されていますね。

もし、自分で改良して作ったImageJをEclipseからリリースするときは、プロジェクトを選択した状態で、Eclipseメニューの、ファイル>エクスポートから、Jarファイルでエクスポートをするように選択して、Jarファイルを保存する場所を指定してから、そのまま進み、最後に、マニフェストを設定するところで、メインクラスを参照させてあげて、完了すると、自分で改良したImageJのJarファイルができます。

(メインクラスの指定を忘れないようにしましょう)

Jarファイルの実行方法は、例えば、デスクトップにIJ.jarとして作った場合は、まずターミナルやコマンドプロンプトを立ち上げて、"cd"コマンドで、デスクトップまで移動して、それから、〜ユーザー名$ java -jar IJ.jar で起動できます。

本稿でご紹介したEclipse非常に優秀なIDEなので、ImageJだけでなく、いろいろなアプリケーションの開発に役立ててください。

次回も続けてImageJのプラグイン開発について述べます。

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

2015年10月20日火曜日

第40回 ImageJとアプリケーションプログラムインターフェースの連携(その2)で学ぶ!

ImageJは、Java言語で作成されています。
Javaの文法などを理解していれば、ImageJそのものを改良でき、臨機応変な機能を追記できます。
C言語やC++言語など、オリジナルにゼロからプログラムを作ることもできますが、ブログ筆者の体験談で恐縮ですが、中途半端なプログラミングの知識で非効率かつ不安定なコードを作成してしまうリスクもあり、その結果、肝心なテスト検証や画像表示などをImageJに頼ってしまうケースもありえます。

また、Java言語を用いてlmageJのようなソフトウェアを作る場合も、Java言語には標準API(Application Program lnterface)DICOMフォーマットをサポートしていないため、DICOM対応のさまざまな処理機能をJava言語でゼロから作成するのは非常に骨の折れる作業になります。
これは、他の言語を用いても同様で、DICOM通信用のプログラムライブラリやDICOMの構文解析ライブラリなどをオープンソースもしくは商用のライブラリから借用し、グラフィカルユーザーインターフェイスの部分は自作している研究者は多いです。

このようなインターフェイスライブラリの実装部分は、新たな数理アルゴリズムや画像解析アルゴリズムの理解というよりは、むしろプログラミングテクニックに左右される領域ですが、アプリケーションの動作原理を理解し、プログラムの作成を効率化するには欠かせない重要な部分です。

ということで、今回は、このようなAPIlmageJに実装するためのテクニックについて述べます。

ImageJの動作原理とJavaの実行環境


ImageJJava言語で作成されていることは今までも説明してきました。本稿では、少しJavaを振り返ってみます。

JavaはSoftware Development Kit(SDK)というアプリケーションを開発するためのキットや関連するツールを開発しています。このキットには、このSDKの中には、Java Platform, Standard Edition(JavaSE)、Java Platform, Enterprise Edition(JavaEE)、Java Platform, Micro Edition(JavaME)、Java DBなど、Javaでプログラムを開発するためのキットが含まれています。開発者は、これらのキットを必要に応じて選択して、利用することができます。
このうち、一般的に利用されるキットは、JavaSEです。このJavaSEには、2015/10現在、以下の内容が含まれています。


Javaプログラムを動作させる場合、ユーザが使用しているコンピュータにはJavaの実行環境がインストールされていなければなりません。このJava実行環境はJRE(Java Runtime Environment)と呼ばれ、Javaのクラスライブラリがパッケージになっています。
そして、この実行環境とは別に、開発環境のために利用されるのが、開発者視点でライブラリを豊富に含んでいるJava Development Kit(JDK)です。このJDKは、その内容にJREも含んでおり、JDK同梱JREには、サーバー関連のパッケージも含まれています。
プログラムを開発するためには、このJDKを使っていくことになります。

このJDKは2006年11月17日に、オラクルの前身であるサンが、GNU General Public License (GPL) でリリースすると発表し、フリーソフトウェアになりました。このあと、サンはJDKのソースコードをOpenJDKというオープンソースコミュニティにも寄付しています。
そのため、利用は無料です。

これからImageJを学ぶユーザは、最新のJDKlmageJのセットでインストールしましょう。

ImageJには、プラグインプログラム用に、JREを同梱しているバージョンも用意されています。プラグインのプログラムによっては、専用のクラスやjarファイル(Javaの圧縮ファイル)をこのImageJ同梱のJRE内にインストールして利用する場合もあります。


同意事項に同意するチェックをし、自身の動作環境にあったJDKを選択してダウンロードするだけです。以降の設定方法は、第二回を参照してください。

拡張APIの動作環境へのインストールとその応用


JavaにはJDKで提供されている標準の機能とは別に、Java Media APIいうオプションのプログラム群があります(細は39回を参照)。その中から、回はJava 3Dという拡張APIを取り上げて概説します。

Java 3Dは、三次元の物体に対してのレンダーや制御を、ハイレベルなシーングラフベースのモデルとして提供します。

Javaでは、三次元グラフィックスライブラリとして定番のOpenGLDirectXが利用できるので、Java 3Dでもこれらを使用して三次元空間にオブジェクトを描画しています。

Java 3Dは、こちらのサイトからダウンロードできます。
  1. http://www.oracle.com/technetwork/java/javase/tech/java3d-137523.html
  2. https://java3d.java.net/binary-builds.html

ユーザの使用するオペレーティングシステムに合わせてダウンロードを行い、Java 3Dのフォルダを解凍すると“j3d-jre”というフォルダが現れます。このフォルダの中の“lib/ext”の中のjarファイルを、前述したJDK/JRE下の“lib/ext”内にコピーすれば、Java 3DライブラリをPCが認識できるようになります。
また、あわせてJOGL(第39回参照)もインストールする必要があります。

詳細は、j3dフォルダに同梱されているREADME-unzip.htmlを参照してください。

Windows環境のユーザは、exeファイルのインストーラを使ってインストールすると、JRE実行環境にJava3Dが追加されます。

ImageJのみでJava 3Dを使用する場合は、ImageJフォルダ下のJREフォルダ内へ同様にコピーすれば、ImageJ専用に使えるようになります。(JREが含まれているImageJを使ってください。)Macなどの場合は、Pluginsフォルダ直下やそのサブフォルダにjarファイルをコピーしておくことで、自動でImageJが認識します。(ただし、ファイル名にアンダースコアを含めないようにしてください。)

今回は、動作環境の設定に注目しています。開発環境はまた別の機会に詳述します。自身でプラグインを作成する場合は、importのパスの読み込みなどの設定が必要ですので、開発環境を整えてから取り組んだほうがいいです。

もうImageJの開発環境は整っている方、こちらのJava 3Dサンプルコードが勉強になります。

ImageJは関係なく、純粋なJavaでもっと基本からという方、サンプルコードなどがこちらから公開されています。

関西大学の研究室の資料も勉強になります。

このように、Javaはプログラムを動作させるためのクラスライブラリの場所をコンピュータに認識させなければ、正しく動作しません。
こういった背景を知った上で、ImageJが動いているということを知っておくことは重要です。

以前紹介した Prof. Dr. Martin HeisenbergをリーダーとするVirtual Insect Brain Projectで開発された“ImageJ_3D_Viewer. jar’も、ImageJプラグインフォルダに入れるだけで、Java 3Dを使用した3D Viewerを起動できました。
ImageJは最新バージョンにはデフォルトで3D関連プラグインが含まれています。
こういったプラグインの動作を実現するためには、Javaの根幹となるJava 3Dのようなクラスライブラリを正しくインストールしなければならないということがわかります。

何気なく使っているプログラムが正しく動作するのは、これらの設定が配付時点でされているからなんですね。

他のJavaのクラスライブラリも、基本的な考え方は同じです。JREにjarファイルをコピーすると、読み込んでくれるようになります。

場合によっては、ライブラリへの環境変数のパスの設定が必要になることもありますが、読者の皆さんには、もうREADMEを読み飛ばすような方はいないと思いますので、何がきても、Javaのインストール関連で躓くことはないと思います。

以上、ImageJとそのアプリケーションプログラムインターフェイスについて、Java 3Dを例に具体的な実装方法を説明しました。

今回のような話は、プログラムの文法の話でも臨床の話でもなく、アカデミックな領域では軽視されがち(めんどくさくて無視されがち)ですが、ImageJの有無にかかわらず、Javaプログラムで共通ですので、知っておくと楽です。

ただ、このようなテクニックだけが先行すると、改良したプログラムをあたかも一から自分で作成したかのような錯覚に陥ることもあるかもしれませんが、これまで構築されてきたクラスライブラリ、大元のプログラムを開発した作者へのリスペクトを忘れないようにしたいですね。

次回は、ImageJそのものの構造を分解し、ImageJの動作の仕組みについて説明します!


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

2015年10月19日月曜日

第39回 ImageJとアプリケーションプログラムインターフェースの連携で学ぶ!

lmageJ1997年にリリースされて以来、オープンソースコミュニティよって加速的な開発協力とデバックが行われており、現在では、世界中の医学研究者やバイオサイエンティストが使用する画像解析ソフトウェアの定番として愛用されています。

一方、科学技術計算や大規模な可視化プログラムのための定評のあるライブラリは、歴史も古く、テストが重ねられ、より精錬された関数群が用意されています。

今回は、lmageJを医学やバイオサイエンス分野だけでなく、より多くの科学技術計算ライブラリや可視化ライブラリをバインドし、強力な多目的なツールとして使用する方法を述べます。

ImageJとその周辺プログラムインターフェースの概要


ImageJは、Javaベースの画像処理および解析プログラムですので、Javaで書かれたコードや関数群であれば実装できます。
ImageJデータベースとの連携、医用画像のネットワーク通信、科学技術計算からGPU(graphics processing unit)を利用した高速三次元可視化処理まで、自在に利用できることは意外に知られていません。
本ブログでも、参考記事を元に、VTK(Visualization Tool Kit)の連携による三次元ボリュームレンダリングや、DICOM通信方法などの紹介を行ってきました。

これらはいずれもJavaのライブラリ群をImageJにプラグインしたことによって実行され たものです。Javaには、標準のコア部分のAPI(application program interface)と称されるソフトウェアを開発する際に使用できる命令や関数の集合と、標準では含まれない各種拡張機能部分のAPIに分類されています。

ImageJを拡張したければ、これらのAPIを利用することでかなり高度な画像処理や動画、三次元画像処理などが可能になります。ここから、これらの拡張機能の説明を行います。

Javaの拡張APIの概要


Javaには、Java Media APIというオプションのプログラム群があり、これらはOracle社のホームページからダウンロードできます。拡張API として、Java 2D、Java 3D、Java Advanced lmaging、Java Binding for OpenGL、Java Image I/OおよびJava Media Framework(JMF)が紹介されています。これらのAPIlmageJに実装することによって、コンピュータグラフィックス、画像処理、多様な画像入出力、動画像処理音声解析などの ルチメディア対応の処理が可能になります。

以下にAPIを概説します。 

1. Java 2D
より高機能な二次元グラフィックスや画像化を行うためのAPIで、特に描(線画、画像)アルファチャネルによるカラー空間を定義するなど、表示に関連するクラス(プログラムで扱う変数や機能を一塊にしたもの)のセット

2. Java 3D
三次元の物体に対してのレンダーや制御をハイレベルなシーングラフベースのモデルとして提供します。簡単に言えば、高画質・高速の三次元グラフィックスのためのAPIです。 Java 3Dのデモのホームページ(https://java3d.java.net/) でもその内容を学ぶことができます。

3. Java Advanced Imaging
Javaの標準機能による従来のイメー ジングAPIよりも高機能な画像処理パッケージとなっています。

4. Java Binding for OpenGL 
OpenGLJavaのバインド用のAPI”JOGL”と略称されて使用されています。
その名の通り、OpenGLをJava言語で操作できます。

5. Java Image I/O
通信ネットワークを通した画像の入出力などをサポートし、JAI Image I/O ToolsクラスはJPEG-LS、JPEG2000およびTIFFなどの比較的新しいフォーマットもサポートしています。

6. Java Media Framework
JMFは、音声、ビデオ、その他時間ベースのメディアなどを使用するためのAPIです。

ImageJを用いた実装例の紹介


1. ImageJとJava 3D

ImageJのプラグインとして、Java 3Dを実装した例を示します。
Prof. Dr. Martin HeisenbergをリーダーとすVirtual Insect Brain Projectは、昆虫の脳機能解析を行っているラボであり、Java 3DImageJに実装し、イツの宇宙工学者、数学者、バイオサイエンティストらの間で使用されている “Amira”と称されるVisual programming toolとの互換性のある入出力インターフェイスを、独自にImageJのプラグインとして実装しています。

は、Java 3Dを実装したImageJを用いて、MRIのサンプルをvolume renderingや、多断面再構成しています。


(Volume rendering)

(MPR: multi planer reconstruction)


ウス操作でインタラクティブに拡大・移動・方向変更ができ、ユーザビリティも向上しています。

以前、VTKでの三次元ボリュームレンダリングをImageJで扱う方法を紹介しましたが、いろいろと比較しながら、ImageJの機能拡張を行うとよいと思わせてくれるいい例です。

具体的なJava 3Dのインストール方法ImageJでのプラグインとしての実装方法は、また別の機会に解説していきます

2. ImageJとOpenGL(JOGLの利用)

JOGLを利用するには、まず、JOGLをインストールして、ImageJのプラグインによってJava OpenGLについて公開されているサンプルプログラム(http://www.ulfdittmer.com/imagej/opengl.html) を実行する方法があります。

2015/10現在は、このサンプルを動作させるために、EclipseなどのIDEからImageJをソースコードでビルドして、JOGLの主要な.jarにパスを通してビルドする方法が良さそうです。

*********************************************************************************************************************
※pluginsのjarsフォルダに最新の主要なJOGLのjarファイルを入れて、プラグインを実行しても、いくつかのパスがうまく読めませんでした。


(備忘キャプチャ)

バージョンを過去のもの(1.1.1)にあわせると、サンプルコードも動くかもしれません。時間のあるときに更新いたします。すみません。
*********************************************************************************************************************

OpenGLはクロスプラットフォームに対応しており、CADやデザイン、および科学技術計算や医学分野における可視化分野では、DirectXなどのエンターテイメント用途重視のグラフィックスAPIよりも人気が高いようです。

また、最近では、急速にWebブラウザ駆動型のアプリケーションのニーズも高まってきていることもあり、HTML5やWeb GLといった次世代のプログラミング言語が開発されていますので、今から学び始める方は、基礎を終えた後は、ぜひWebにチャレンジしてみてはいかがでしょうか。私もチャレンジ中です!

おわりに


以上、lmageJとその周辺のアプリケーションプログラミングインターフェイスについての概説を行いました。ImageJは、単なる画像処理ソフトウェアではなく、かなりインタラクティブに画像処理操作ができることがわかります。

このような高度な技術を結集させたものとして、MIPAV(Medical Image Processing, Analysis, and Visualization)という、Javaを用いたNIH(米国国立衛生研究所)の画像解析ソフトウェアもあります
こちらのページで詳細に紹介されています。
本家はこちらです。http://mipav.cit.nih.gov/pubwiki/index.php/Main_Page

これは、NIHで開発中のソフトウェアで、Java 3DNVIDIACGDirectXJOGLJMFなどのAPIを利用して、GPUによるボリュームレンダリングやDICOM通信、PET/CTのフュージョン、ディフュージョンテンソルのトラクトグラフィ、各種画像解析機能などを豊富に実装しています。

このようなアカデミア発の看板ソフトウェアを参考にしていくと、商用の製品と比べながら、次の波になる臨床利用可能な解析技術が見えてくるかもしれません。

次回は、今回説明を行ったAPIの具体的な実装方法を紹介します!

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