ImageJの機能に、Look up table(略称LUT)というものがあります。これは画像データの値自体を変えなくても、表示だけを変える、いわば画像表示のためのフィルター機能のようなものです。
Look up tableは基本はグレースケール画像、または単チャンネルの画像に適用され、例えば、特定以上の値のピクセルだけ色を付けて表示して注意を惹く、というようなことが可能になります。
ところで、bio-formatで読み込んだ、16bit画像をチャンネル分解に掛けるとR, G, Bの画像ごとに自動的に Look up tableが適用され、Rの画像は赤の、Gの画像は緑の、Gの画像は青の LUTが掛かります。
これは、8bitの画像だとチャンネル分解したときに、ウィンドウのタイトルバーに、Red, Green, Blueと表示されるのに対し、16bitだと C1, C2, C3というようにしかタイトルバーに表示されないので、直ちに、どの色チャンネルの画像か分かりません。そこで、それぞれのどれがR, G, Bの画像か分かるようにそのような仕様になっているようです。
ただ、LUTがかかっていると見にくい場合があります。またImageJで加工してTIFFファイルに落とし、それをGIMPに読みだしたときに、なんかの拍子でおそらくLUTデータが悪さをして、読み込んだ画像が灰色がかる、ということがありました。それで、何とかしてLUTを外すかリセットする方法はないかとずっと探していました。しかし、ネットの情報をいくら探しても、いかにLUTを適用するのかという話題ばかりで、途方に暮れていました。
ふと思いついて、デフォルトのグレースケールのLUTを適用すればと思い、探すとありました。NIHのサイトの以下のURLから、lut用のファイルがダウンロードできるようになっています。
https://imagej.nih.gov/ij/download/luts/
この中の、luts.zipの中に含まれている、000-gray.lut というlutデータファイルが、それでした。そこでこちらのサイトの情報を参考に、次のようにコードを書いてみると...
lut = LutLoader.openLut ("C:/Program Files/Fiji.app/luts/000-gray.lut")
imp.getProcessor().setLut (lut)
※ C:/Program Files/Fiji.app/luts/ 以下にこのlutファイルを置きました。またimpはImagePlusオブジェクトの名前です。
見事、表示から色が消えてくれます。とはいえ、自分だけで使う分には構わないのですが第三者に使ってもらうために、いちいちNIHのサイトからファイルをダウンロードしろと言うのもなぁ... と思いました。
ふと考え付いて、以下のようにコードを書き換えると...
imp.getProcessor().setLut(None)
おおっ、ビンゴでした! setLutメソッドで、lutデータを指定する代わりに、Noneを指定すれば、LUTがクリアされるのでした。ダイレクトにImageProcessorからLUTを外すには、ipがImageProcessorオブジェクトだとして...
ip.setLut(None)
になります。