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とはちょっと違うので注意。