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のソースコードのビルド方法やプラグインの開発方法を解説しました。

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

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

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


0 件のコメント:

コメントを投稿