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

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」

0 件のコメント:

コメントを投稿