筆者が作成した ImageJ 用プラグインを走らせるとプレビュー用 8-bit 画像と結果として出力される 32-bit 画像の表示結果が異なることが多々あります。そこでそもそも各アプリケーションで 32-bit イメージはどう表示されるのか、確認してみました。なお、この画像はsRGB式の TRC (知覚的トーン再生カーブ) がかかっており、かつカラーマネジメント非対応の ImageJ で出力したので、iccプロファイルが含まれていません。すると...
まず筆者が作成した ImageJ 用プラグインの 8-bit プレビューイメージから...
上の設定で作成した 32-bit TIFF ファイル (ディスプレイ範囲 0.0 - 1.0) を各アプリケーションで開いてみると...
まず ImageJ から...
この画像の場合は、プレビューイメージ通りです。ImageJ で出力していますので、当然ではありますが。次は IrfanView です。
ごく僅か黒っぽいような気がしますが、おおむね同一です。違いがあっても誤差の範囲でしょう。
次は GIMP。
これも ImageJ で読み込んだのとあまり変わりません。ところが...
以下はWindows Photo Viewer です。Windowsの中では優等生的なカラーマネジメントを備えているアクセサリプログラムですが、明るさがかなり明るくなりました。
さらに、Photoshopで読み込むと、読み込む際にグレースケールプロファイルがないとか言われて、適当に選択すると、Windows Photo Viewer と同様の表示になりました。なお、グレースケールプロファイルはどれを選んでもあまり変わりません。
darktable でも Windows Photo Viewer と似ています。ちなみに RawTherapee や ART では読み込めませんでした。
Xn View は、ImageJ などとほぼ同じでした。
大きく、明るく表示されるアプリと暗めに表示されるアプリで2分されました。
筆者の別のプラグインを走らせた結果を見てみます。
まず 8-bit ㇷ゚レビュー画像から...
ImageJ で読み込んでみると...
ちょっと表示が薄くなっています。プレビューの方が濃すぎるのかもしれません。念のためヒストグラムをとってみます。
次は IrfanView です。
非常に明るくなってしまいました。しかしヒストグラムをとってみると...
値が 8bit に変換されていますが、基本的に ImageJ と変わらないようです。
次は GIMP...
ImageJ とほぼ同様なのは、上のサンプルと同じです。
次は、Windows Photo Viewer...
やはり明るくなっています。
Photo Shop , darktable も見てみます。
Photoshop, darktable が Windows Photo Viewer と同じなのは上の例と変わりません。
調べてみると、GIMP の画像に、Gamma 2.2 を掛けると Windows Photo Viewer の表示に酷似することが分かりました。
結局、次のようなことのようです。ImageJ は以前にも指摘している通り、カラーマネジメントを一切行いません。従って ImageJ が出力する画像も TRC に関するメタデータは含まれません。この例で使っているオリジナル画像は、sRGBのTRCで変換された非リニア (知覚的) な 32-bit 画像ですが、出力されたデータにはどのTRCに基づくデータなのかを指定したメタデータが含まれません。そして、TRC指定のない 32-bit TIFF を読み込んだ時にどう処理するかが、ソフトウェアによって異なり、Windows Photo Viewer 等は、32-bit 画像の場合、元データはリニアだと仮定して、sRGB TRC を掛けて表示出力する一方、GIMP などは sRGB のTRCがかかった知覚的データであると仮定し何の処理もせずに表示出力を行うということのようです。ImageJ はそもそもカラーマネジメントを行わず、そのまま表示出力を行いますので、知覚的TRCがかかった32-bit画像を扱った場合、結果的に GIMP などと結果が一致することになります。
この画像は元々知覚的データなのに、Windows Photo Viewer 等ではリニアと仮定され、さらに TRC がかかってしまうので、元より明るく表示されてしまったということかと思います。
よく分からないのは IrfanView の挙動で、そのまま表示出力したり、ガンマを掛けて表示出力したり (しかもそのガンマ値も単に通常の知覚的 TRC ではないようです) していますが、おそらく 32-bit 画像をちゃんと扱うことが考えられていないため、何かバグっていると考えるべきでしょう。
それとまだ残った疑問点は、拙作のプログラムで上の例で使ったプログラムと下の例で使ったプログラムでプレビュー表示に違いが出る点です。上は適正ですが、下はより黒くなっています。下のケースではおそらくガンマ -2.2 がかかっているように思われます。ただ自分の中では上と下とで、プレビュー画像のガンマ値 (あるいは TRC) の扱いを意図的に変えた覚えはありません。なぜこんな違いが出てしまったのか、解明する必要が残されています。おそらく DisplayRange がらみとは思いますが...