Miji/MIJを用いてMatlabでmulti-tiffファイルを一括処理する

普段、ImageJで使用しているtime-lapse imageなどのmulti-tiff画像をMatlab上で一括処理したいのだけど、Matlabではmulti-tiffをコマンド一発で開くことができない?みたい。

ググッたらループを回して一枚ずつ読み込むようなスクリプトが紹介されていたりするがなんか面倒臭い。

そこでMijiを使ってImageJ経由でMatlabにmulti-tiff画像データを読み込ませることを試してみた。

addpath('/Applications/Fiji.app/scripts'); % Mijiにpathを通す。Macの場合
Miji; %Mijiを起動

DirName = uigetdir; % ファイルが入ったディレクトリを選択

FileList = dir([DirName, '/*.tif']) % ファイルのリストを取得。ワイルドカードの部分を変更することでファイル名で絞り込むことも可能

for i = 1:size(FileList, 1)

    ImagePath = [DirName, '/', FileList(i).name]; % 各ファイルのパスを取得
    [path, ImageName, ext] = fileparts(FileList(i).name); %ファイル名から拡張子を除いたものを取得(保存時に使用)。pathとextは使わない

    MIJ.run('Open...', ['path=', ImagePath]); % ImageJで画像を開く
    img = MIJ.getCurrentImage(); % Matlabに読み込む
    MIJ.run('Close'); % ImageJ上の画像を閉じる
    
% 何かの処理
    
    MIJ.createImage(img); % 処理した画像をImageJに戻す
    MIJ.run('Save', ['save=[', DirName, '/', ImageName, '_treated.tif]']); % ファイル名を変更して保存
    MIJ.run('Close');
end


現状、Mijiには直接ファイルを開いたり保存したりするコマンドがないため、runコマンドを用いてImageJを操作することになる。

ちょっと躓いたのがrunコマンド内で'Open...'や'Save'を使うときのpathの指定方法。MacroやAPIとはちょっと違うので注意。

Matlab上からImageJのAPIを直接叩けるともっと便利なんだけど...。