久しぶりにガンマ補正理解メモの追加記事を書きます。元々この記事はいわゆる「ガンマ補正」の複雑怪奇を解明しようとして調べたことを書き始めたのですが、この中でよくわからなかったものに、TRC といわゆる S 字カーブの関連がありました。
例えば、Tony Kuyper氏の記事に Adobe は、Adobe 標準カメラ DCP プロファイルに以下の様なカーブを掛けているとの議論がありました。
これをみるとちょっと 2.2 のガンマ補正カーブに似ています(違いますが)。
あるいは、ART や RawTherapee で Raw ファイルを読ませてトーンカーブの自動調整を掛けると以下の様な S 字状のカーブがかかります。
これは Jpeg のプレビューファイルと、リニアなRawファイルの差から自動的に計算されて、Jpeg プレビューを模すためにかかるカーブです。これに対し、カメラの固有DCPプロファイルを適用し、さらに自動調整を掛けると以下のようにほぼ一直線になります。
つまり上の曲線はほぼカメラの DCP トーンカーブに等しいということです*1。これがおそらく darktable でいうベースカーブと同じものと思われます。そして darktable では、シーン参照ワークフロー (リニアな画像で処理するワークフロー) でカメラのベースカーブを廃止しているという議論もありました。これらの議論を見て、そもそも知覚的なカーブを掛ける TRC とこれらの DCP カーブやベースカーブの関係が良く理解できませんでした。
結論から言うと TRC とDCPカーブなどのカーブは直接の関係はありません。
TRC は以前議論したように基本的にはモニタの入出力のゆがみに対して、リニアなモニタ出力を得るために事前に掛けるトーンカーブで通常ガンマ 2.2 曲線に近似しています。また、この曲線は、偶然の一致ではありますが、画像を見たときの人間の知覚反応曲線におおむね一致します。人間の知覚はシャドウ~ミドル域は敏感でハイライト域に行くにしたがって鈍感になります。例えば、物理的にブラックポイント (全暗黒) を 0 % ホワイトポイント (最大明度) を 100% としたときに、18% の明るさを、知覚的にホワイトポイントの半分 (50%) の明るさと感じると言われています。そして物理的なトーンカーブを知覚的トーンカーブに変換するのにもこの TRC が使われます。
そのため、TRC はディスプレイの出力をリニアに調整する目的以外にも、bit深度の低い画像において人が敏感なシャドウ~ミドル領域の階調を確保する目的にも使われたり、明るさを示す指標数値を物理的な明るさではなく、知覚的明るさに変換するのにもつかわれます。
そして、画像処理ソフトで一般的によく使われる L*a*b* 色空間ではそもそもその軸自体に知覚的 TRC が適用されています。
それに対し、DCPトーンカーブ (あるいはベースカーブ) といった、S字カーブは TRC とは別に (あるいは非リニアな画像では TRC を掛けた上にさらに) 掛けるカーブです。このカーブの目的は次のようなものです。私たち人間の視覚のダイナミックレンジは、20EV あるいはそれ以上に及びます。カメラでも 12 ~ 15EV 程度あり、さらにHDR 処理をすれば、20EVぐらいまで広げることができます。しかし、コンピュータモニタのダイナミックレンジは、 8 - 10EV、写真プリントでは 5EV 程度です。従って広い視覚のダイナミックレンジをそのまま割り付けることはできません。
この時、カメラセンサーのダイナミックレンジをそのままリニアに圧縮してディスプレイの 0 ~ 100% 空間に貼り付けると、非常に眠いローコントラストの画像になってしまいます。
もちろんディスプレイが視覚と同じ、あるいは少なくともカメラセンサーのダイナミックレンジと同じダイナミックレンジを持っていれば、そのままリニアに貼り付けてもそれなりに見えるはずです。しかし広いダイナミックレンジを持つデータを狭いダイナミックレンジのデバイスにリニアに貼り付けると以上のような問題が出てきます。
また、近年ではカメラのダイナミックレンジを拡大するために複数の画像から HDR 画像を作成するようなことも行われるようになりましたが、HDR を作ってみたら、さらに平板で眠く薄暗い画像になったという経験はないでしょうか。これもダイナミックレンジの広い画像データを狭いダイナミックレンジのデバイスに単純に割り付けたことから起こることです。
このように狭いダイナミックレンジのデバイスでより広いダイナミックレンジのデータをそれなりに見せるテクニックがこの S 字トーンカーブを掛けることです。
S 字カーブを掛けると画像のコントラストが改善したことが分かります。
因みに、画像がローコントラストに見えるのはより広いダイナミックレンジの Raw データをより狭いディスプレイのレンジに割り付けているためです。逆により狭いダイナミックレンジの Raw データをより広いディスプレイのダイナミックレンジに割り付けるとハイコントラストになります。
例えば、上のローコントラスト画像の右側のトーンカーブを見てください。
この場合、センサーの全領域がリニアに 0 - 100% のディスプレイ出力として割り付けられているのが分かります。これを入力側の割り付けるダイナミックレンジの幅を狭くすると...
左の画像のコントラストが上がっているのが分かります。つまり、割り付けるデータのダイナミックレンジが広くなるほど (カーブの傾斜が緩くなるほど)、画像は平板で、ローコントラストに、割り付けるデータのダイナミックレンジが狭まるほど (カーブの傾斜が急になるほど) ハイコントラストになります。
実はこれは、私たちの実生活の感覚と矛盾します。自分の周囲の光景の明るさのダイナミックレンジが広いほどハイコントラストに、逆にダイナミックレンジが狭いほどローコントラストに感じられるのが普通ではないでしょうか。
ここに広いダイナミックレンジの光景を狭いダイナミックレンジのデバイスに割り付ける難しさがあるのです。この矛盾を解決するトリックが S 字のトーンカーブになるのです。S 字カーブはローエンドとハイエンドのコントラストを下げミドルレンジのコントラストを上げることで、ある程度広いダイナミックレンジのデータの割付と、コントラスト感を両立させる技法です。そして仮に出力デバイスのダイナミックレンジが実世界と同じ、あるいは少なくともカメラセンサーと同じなら、このような S 字トーンカーブは不要なはずです。
----------
インデックスページに戻る
←前回 ガンマ理解補正メモ(5) - RawTherapeeにおけるガンマ補正の扱いは... ? に戻る
[参考記事]