2015年11月5日木曜日

第48回 ImageJの構成とWeb活用で学ぶ!

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

lmageJの構成を理解し、プラグインとして作動しているアプリケーションとJavaのライブラリそのものを利用したアプリケーションのソースコードの内容を見極めて、lmageJの機能をオブジェクトごとに拡張していくのがImageJの開発スタイルとして最も作業効率が高い方法であることは周知の事実です。しかしながら、lmageJで使用している関数やクラスは、膨大で各機能を拡張するための関数の相互関係が把握し難い場合が生じることも事実です。 

テーマはWeb活用ですが、ImageJのAppletについては前回(第47回)で触れているので、今回は、lmageJ全体の構成を整理し、ImageJ APIを見ていく手順について説明します。

ImageJ全体の仕組みの概要

次の図にImageJパッケージ“ij”のクラスダイアグラムを示します(lmageJの WebサイトのUMLクラスダイヤグラム:
http://rsbweb.nih.gov/ij/developer/diagram.htmlから抜粋)。その名の通り、この図にはImageJで定義されているクラスが描画されています。白抜きの矢印は、下位クラスであること、線の矢印は参照していることを示しています。


UML(Unified Modeling Language)は、オブジェクト指向分析・設計においてシステムをモデル化する際の記法を規定した言語(ビジュアル・ランゲージ)で、ソフトウェア開発において、これを学ぶことは開発者として必須要件になってきています。UMLで図を書く理由は、主に以下の3つの理由が考えられます。
  • プログラムを書く前に,俯瞰的な図で自分の考えを整理する.
  • 図でコミュニケーションする.
プログラマーがコードを書き、3000行、30000行とその量が増えると、すべてを記憶しておくことが難しくなり、無駄なコードを書いたり、不正確なコードを書いてしまったりするリスクがあります。UMLはこのような事態を避けるために、シンプルな図でクラスやメソッドの関係性を表現しておくことができます。

この図を見ると、クラスが四角枠で表現されていることがわかります。中央にImageJクラスがあり、その左側にAppletクラスがあります。この図から、Web(ブラウザ)上でImageJを動作させる方法の1つであるアプレットは、直接lmageJクラスからアクセスできることがわかります。

次に、画像データを取り扱うImageProcessorクラスを見ていきます。ImageProcessorクラスは、Javaの標準クラスのjava.lang.Objectクラスの拡張クラスです。


ImageProcessorクラスの中には、ImageProcessorクラスを親クラスとして、ByteProcessor、ShortProcessor、FloatProcessor、ColorProcessorクラスが収められており、それぞれ、8ビット(インデックスカラー、バイナリサブクラス含む)、16ビット、32ビット、32ビットフルカラーの型別に整理されていることがわかります。

実際の画像データは、単一の画像であるかスタック画像群かのどちらかに応じて、ImageProcessorかlmageStackオブジェクトに保存されます。これらのオブジェクトは、画像処理には使用されますが表示機能は持っていません。画像を表示する処理は、Frameクラスの拡張クラスであるImageWindowクラスを使うことになります。

というように、クラス間の関係性を考慮しながらプログラムが作成されていることが理解できれば、このようなプログラムを独自に拡張する場合でも、開発が効率的に行えることがわかります。このUMLはあくまでも概略図なので、実際にはもっと詳しい情報が必要になります。これが、APIドキュメントです。

ImageJ API


ImageJは、そのAPIドキュメントが公開されています。
http://rsb.info.nih.gov/ij/developer/api/

ImageJAppletクラスを例に見ていきます。


この画面は何を示しているかというと、画面左上には、パッケージというものが表示されています。このパッケージとは、開発時に作成された複数のクラスをまとめておくフォルダです。このパッケージを選択すると、その内容に含まれるクラスのみが画面左下のリストに表示されます。今の状態は、ijパッケージを選択して、ImageJAppletクラスを選択表示している状態です。

次に、クラスを変えてみます。
ImagePlusクラスで、内容の詳細となる画面右側を見ていきます。

一番上には、クラスの継承関係が示してあります。

(ijパッケージに、含まれていて、java.lang.Objectを継承していることを示している)

少し下を見ていくと、クラスの説明や関連クラスのリストなどがわかるようになっています。さらに下げていくと、フィールドサマリーがあります。
このフィールドサマリーは、ImagePlusクラスで利用する各種操作(メソッド)で必要な変数のリストです。プログラマーが任意に選択して利用できます。


次にもっと下をみてみると、コンストラクターサマリーがあります。
これは、ImagePlusクラスを初期化するときの方法のリストです。


さらに下を見ていくと、メソッドサマリーがあります。
これは、ImagePlusクラスに対して利用できる処理のリストです。処理の種別ごとにタブが設けられているので、メソッドが多いときはこのタブを切り替えて検索できます。


さらに下には、これらのサマリーの詳細が説明されていますので、より詳細な使い方を調べたいときに参照できるようになっています。

Java APIの見方・調べ方は、Javaの入門について書かれているサイトでわかりやすく解説されていますので、筆者もたまに読み返しています。


今回は、UMLによるImageJの全体の仕組みの概要と、ImageJ APIの見方についてご紹介しました!
次回、ImageJの最新の機能の説明を行います!

参考記事:「ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(24・6) 2009, p118-119」

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

0 件のコメント:

コメントを投稿