省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

ImageJ / Python プログラミング Tips: 8bitカラー画像のビット深度取得の注意点

 今まで私自身も誤解していましたが、ImageJ 上で 8bit カラー画像のビット深度取得に注意が必要です。

 ImagePlus にビット深度を取得する、getBitDepth() メソッドがあります。今まで、8bit カラー画像は、8bit と判断されるのかと誤解していましたが、実は 24bit と判断されるのですね。API レファレンスにもよく見直したらそう書いてあります。

imagej.net

 ただ、今まで誤解していてもとりあえず自作のプログラムがちゃんと走っていたのは、実はファイルを読む時に、原則として bio-format プラグインから読み込むようにしていたためでした。

 つまりどういうことかというと、8bit カラー画像を ImageJ 上で、単純に Open コマンドで読み込むのと、bio-format プラグインから読み込むのでは、ビット深度判断が異なってしまう、ということです。

 Open コマンドで読み込んだ場合は、ColorProcessor に読み込まれるので、24bit になります。しかし、bio-format プラグインから読み込むと、ハイパースタック構造で読み込まれますので、byteProcessor x 3 チャンネル で読み込まれることになります。そのため getBitDepth() メソッドでは、ビット深度は 8bit と判断されるということです。

 

 さらに、ImagePlus には、色のチャンネル数を判断する、getNChannels() メソッドがあります。

imagej.net これも動作させてみたところ、ColorProcessor を使っている ImagePlus はなんと、1チャンネルと判定されます。をいをい... これじゃ getStackSize() メソッドと変わらんじゃないか... お前の存在意義は何なんだ...

 というわけで、このあたり ImageJ プログラミングをされる方はご注意ください。

-----------

関連項目

 上記の点でバグフィックスを掛けたのが以下のアップデートです。

yasuo-ssi.hatenablog.com

yasuo-ssi.hatenablog.com