ImageJ/Jythonを試す
PythonでImageJをインタラクティブに操作したり,プラグインをPythonで書いたりできると素敵だろうなと思い,JythonをWindowsマシンに導入し,ImageJから使ってみた.試した環境はWindows XP,SunのJVM 1.5.0_01-b08,ImageJ 1.37f.
方法やダウンロードすべきファイルへのリンクは
http://www.pensament.net/java/other_plugins.html#interpreter
にあった.また,
http://marcora.caltech.edu/jython_imagej_howto.htm
はWindows環境向けに手順が丁寧に書かれている.

Jythonの導入
http://www.jython.org/Project/index.html
から jython_21.class をもってきて,コマンドプロンプトから起動.
> java -cp . jython-21
これでGUIインストーラが動く.全部導入しても10MB程度.
以降は導入したディレクトリで,
> jython (.bat)
でJythonインタプリタが動く.
>>> import java.awt.Point
等ができることを確認.

ImageJにclasspath追加
ImageJ起動時のclasspathにjython.jarを加える.つまりjavaの-cpオプションに追加.Windowsで最近のImageJではC:\Program Files\ImageJ\ImageJ.cfg中の-cp後にC:\OPT\jython-2.1\jython.jarなどと追加.

便利なImageJ/Jythonプラグイン導入
http://www.pensament.net/java/Jython.zip
をImageJ/plugins/Jythonに展開.このディレクトリに置いた*.pyファイルは,ImageJメニューのPlugins - Jython - Refresh Jython Listによって,同メニュー階層中に登録され,プラグインとして実行可能になる.
また, ImageJ/macros/StartupMacros.txt に macro "AutoRun" { run("Refresh Jython List"); } と加えることで,ImageJ起動時に*.pyファイルのメニュー登録は自動的に行なわれるようになる.なお,このStartupMacros.txtはautoexec.batのような使われ方をする特別扱いのマクロファイルで,ImageJのツールバー設定なども行なっている.

Jythonは遅い印象だったが,インタプリタから簡単な文字列やリストの処理をするだけではとくに問題を感じなかった.そこで1024*1024の8bpsグレイスケール画像に対して,getPixelValue()とputPixelValue()を使った画素単位の反転処理を行なったところ,Java版が0.5秒以下なのに対し,Jython版では10秒以上を要した.やはり画像自体の処理は苦しそうだ.遅くてもいいメタなレベルの処理や,その場限りのマクロ書き(ImageJメニューのPlugins - Jython - Jython interpreterが便利そうだ)には向いていると思う.

JNI経由でImageJ/CPythonの方が実行速度は数倍良さそうだが,ImageJのクラス群を簡単にCPythonから利用できるようにする仕組みが思い浮かばない.ImageJは開発が活発なので手書きでインタフェイスを作るのは避けたい.JavaのことだからC/C++とのインタフェイスの自動生成ツールなどは多いにありそうだが,未調査.

ただ,「プラグイン」と呼んでいるものには,基本機能を組み合わせたマクロ的なものと,新たな画像処理アルゴリズムを提供する下請け的なもの,という両方の方向性がImageJではあるようなので,前者はJython等で密に結合させ,後者は簡素なインタフェイスを介して別プロセスとして動かす,という使い分けをするのが現実的かもしれない.
[PR]
by edogawadai_bio | 2006-07-26 04:28 | img
<< Lenna OCaml関係 >>