wet-to-dry’s blog

京大大学院生の備忘録ブログ

Olympus顕微鏡でとったTiff画像をImageJで彩色し、Jpegで保存するマクロ

概要

うちの研究室では、蛍光顕微鏡は主にOlympusを使っているが、

元画像をTiffで保存したい

という欲求と

Tiffではうまく写真を見れないので、Jpegで保存したい

という欲求が拮抗しており、未だにどちらにするか決めかねている。

そこで、

保存はTiffで行い、ImageJマクロを使ってボタン一つで自動でJpegに変換して同じフォルダ内に保存する

という折衷案を考えた。

ImageJのマクロにはRecordという機能があり、これをONにしながら作業をすれば以降は全く同じ作業を行ってくれて便利なのだが、いかんせん柔軟性が低いため、保存フォルダのpath指定などが難しい。

そのため、自分でマクロファイルを作ってしまい、それを毎回いじって実行することで便利にしようという算段である。


個人的な問題なのだが、私は蛍光写真を撮るときに一つの処理区で「BF→蛍光→BF→蛍光」という感じで写真を撮り、処理区名のフォルダに保存する。
処理区が膨大になると、ファイルの順番が全く同じフォルダが10も20もできることもあり、これを処理するにはマクロを使うのが最も効率的なのである。


やったこと

テンプレとして、阪大の松山さんという方のコードを参考にさせていただいた。

www-up.prec.eng.osaka-u.ac.jp

僕の作成したコードは以下の通り(僕はImageJの中でもbio特化のFIJIを使っています)。

// ----- tiff to jpeg (for fluorescent photos).ijm -----
//フォルダのpathを取得
folderdirectory = File.directory;

//ファイル名を参照元ディレクトリから配列で取得
filelist = getFileList(folderdirectory);

//繰り返し処理
for (i=0; i<filelist.length / 2; i++) {

//ファイル名の指定
filenameBF = filelist[i * 2];
filenameFT = filelist[i * 2 + 1];

filedirectoryBF = folderdirectory + "\\" + filenameBF;
filedirectoryFT = folderdirectory + "\\" + filenameFT;


//まずBF作業
open(filedirectoryBF, 1);
saveAs("jpeg", filedirectoryBF + ".jpeg");
close();

//次にFT作業
open(filedirectoryFT, 1);
run("Green");
saveAs("jpeg", filedirectoryFT + ".jpeg");
close();

//最後にMerge作業
open(filedirectoryBF, 1);
open(filedirectoryFT, 1);
run("Merge Channels...", "c2=[" + filenameFT + "] c4=[" + filenameBF + "] create");
saveAs("jpeg", filedirectoryFT + "Merge.jpeg");
close();

}

注意点:PATHを取得する際に、ImageJで最後に開いた画像ファイルのPATHを用いているので、一度目的のフォルダのファイルを開いてから閉じなければいけない。作成するJPEGファイルの拡張子は「.tif.jpg」となってしまう。

open()メゾットが、Tiff特化のものになっているはずなので、同じフォルダにTiffでないファイルがあればエラーが出るはず(一応これで間違ったファイルを開くことはないはず、、、)。

Javascriptとかpythonでもかけたっぽくて、それで書いた方が柔軟性も高かったと思うけど、時間なかったのでこれで終了。

また修正したら報告します。