wet-to-dry’s blog

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

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

概要

以前書いた記事↓でいくつか処理をしてみたのですが、うまく機能しなかったこともあった。

wet-to-dry.hatenablog.com

原因を探ったところ、Olympusのカメラ側にあったことが判明した。

うちのカメラは、12-bitのモノクロカメラだが、ImageJ(FIJI)のデフォルトのTiff読み込み設定がAutomatic となっていたらしく、画像の輝度の上限下限を勝手に変更して色彩が変化してしまっていた。

f:id:wet-to-dry:20200309111449p:plain
12-bit変換

左の2枚は実際に光っている細胞、右の2枚は実際は1ミリも蛍光を発していない細胞である。

右では特に、輝度の上限を勝手に設定してしまっていることで光っていない部分も光っているように見えてしまっている。

やったこと

概要だけでわかる人もいるだろうが、一応画像付きでやり方を説明してみる。

まず、Tiff画像を開きながら「Image→Adjust→Brightness/Contrast...」をクリック。

f:id:wet-to-dry:20200309113021p:plain

ここで、画像の輝度が下限485上限825に切り取られていることがわかる。

次に、setをクリック。

f:id:wet-to-dry:20200309113459p:plain

さらに、Unsigned 16-bit rangeの値を12-bitに変換し、OK。

f:id:wet-to-dry:20200309113709p:plain

これで、画像の輝度が、0から4095まで12-bitで表現されるようになった。

f:id:wet-to-dry:20200309113929p:plain

マクロコード

以上を参考に、マクロを書き直した。

もう一度過去記事を貼っておく↓

wet-to-dry.hatenablog.com

輝度の調整のしかたも学べたので、蛍光画像のみ下限500でバックグラウンドを落とす作業も同時に行えるようにしている。

また、ImageJのマクロコード一覧をぼーっと眺めていたら、オープンダイアログを作成してディレクトリーを選択する「getDirectory("Choose a Directory")」なるものと、拡張子を取り払ってくれる「File.getNameWithoutExtension(path)」なるものを発見したので、これらを取り入れている。

https://imagej.nih.gov/ij/developer/macro/functions.htmlimagej.nih.gov

以下作成したコード

// ----- tiff to jpeg test.ijm -----
//フォルダのpathを取得
folderdirectory = getDirectory("Choose a 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);

//run("Brightness/Contrast...");
setMinAndMax(0, 4095);
call("ij.ImagePlus.setDefault16bitRange", 12);
run("Apply LUT");

//保存
saveAs("jpeg", folderdirectory + File.getNameWithoutExtension(filenameBF) + ".jpeg");
close();

//次にFT作業
open(filedirectoryFT, 1);

//run("Brightness/Contrast...");
setMinAndMax(500, 4095);
call("ij.ImagePlus.setDefault16bitRange", 12);
run("Apply LUT");

//保存
run("Green");
saveAs("jpeg", folderdirectory + File.getNameWithoutExtension(filenameFT) + ".jpeg");
close();

//最後にMerge作業
open(filedirectoryBF, 1);
setMinAndMax(0, 4095);
call("ij.ImagePlus.setDefault16bitRange", 12);
run("Apply LUT");

open(filedirectoryFT, 1);
setMinAndMax(500, 4095);
call("ij.ImagePlus.setDefault16bitRange", 12);
run("Apply LUT");

run("Merge Channels...", "c2=[" + filenameFT + "] c4=[" + filenameBF + "] create");
saveAs("jpeg", folderdirectory + File.getNameWithoutExtension(filenameFT) + " Merge.jpeg");
close();

}

読んでいただきありがとうございました。