MIJ/Mijiを用いてMatlabとImageJ/Fijiの間でデータをやりとりする

*2017/06/05 追記*

突然、Matlab上でMijiが起動しなくなった。
調べてみたところ、Fiji.app/jars内にあるはずのmijのjarファイルがアップデートの過程で消えてしまった模様。
復旧するには、Update...でImageJ Updaterを開き、Manage update sitesでBIG-EPFLを追加。Advanced modeでview all filesにしてmijで検索。出てきたmij.jarを選択してinstallボタンを押しApply changes。これでFiji.app/jars/内にmij-1.3.6-fiji2.jarみたいなファイルが追加されていれば使えるようになるはず。

他のpluginでも突然消えてしまった場合には同様の方法で対処できるかも。

*追記終わり*

Matlabで画像解析を始めたんだけど、画像の表示、GUIによる画像操作、ファイルの入出力あたりがどうもストレスフルで、このへんを使い慣れたImageJでできないかと探してみたら見つけた。詳細は以下のリンクを参照。

Miji - ImageJ
MIJ

簡単に言うとMatlabの上でImageJ/Fijiを起動させるプログラム。現行のFijiにはプリインストールされているのでFijiを使っているなら新たに何かをインストールする必要はない。

使用方法はまずFiji.app/scriptsにMatlabのサーチパスを通す。MacだとGUIからは.app以下が見えないので以下のMatlabコマンドを使用する。

addpath('/Applications/Fiji.app/scripts')

で、

Miji;

とコマンドを入力するとFijiが立ち上がる。注意点として、Matlab上で動かすJAVAプログラムが使用できるメモリはデフォルトではかなり少なく設定されているので、もし大きな画像ファイルを扱いたいのであれば事前に使用可能なメモリ容量を増やしておく必要がある。具体的には、Matlab > 設定 > 一般 > JAVA ヒープ メモリのところの値を増やす。

起動したImageJ上で画像ファイルを開き、

img = MIJ.getCurrentImage;

で画像データを配列として読み込める。一枚の画像であれば2次元配列、画像スタックであれば3次元配列になる。ハイパースタックであったとしてもその設定は無視されて通常のスタック扱いで3次元配列として読み込まれるので注意。

逆にMatlab上の配列は、

MIJ.CreateImage(img);

で、ImageJ上で画像として開くことができる。

終了したいときは、

MIJ.exit;

その他、使用できる機能については以下のリンクを参照。

Bi-directional communication and data exchange from Matlab to ImageJ

使用してみた感想としては、unsigned 16-bitのデータが32-bitで読み込まれたり、ところどころで挙動が怪しかったりするけど上記の目的にはわりと使えそう。あとImageJの方で指定したROIの座標を読み込むこともできるのでそのあたりでも使えそうかな。