14ビットの世界(3)~RGBワークフローへの道(7)(darktable3.0第106回)

RAWとベースカーブ

PIERREさんは、従来のベースカーブに大きな問題があるという問題意識をもっています。そこで、今回は、ベースカーブを考えます。

筆者は、ピクセルパイプラインの変更手続きを知るまで、ベースカーブが、RAW(整数型)を内部表現のデータ型(実数型)に変換すると勘違いをしていました。ピクセルパイプラインを見ると、ベースカーブの前に、処理されるモジュールが多数ありますので、darktableでは、特定のモジュールに依存せず、RAWデータを読み込んだ時点で、実数型のデータに変換が済んでいるようです。

そうすると、ベースカーブとは何かという問題が生じます。人間の目は、デジタルセンサーとは異なり、明るい部分に対する感度が暗い部分に対する感度よりも対数的に高いので、この感度の違いを補正する曲線(トーンマッピング)がベースカーブであるというのが一般的な定義です。

darktableなどのRAW現像ソフトでは、ベースカーブ以外にトーンマッピングを変更するモジュールが沢山あります。レンズ補正などの形状を変換するモジュール、ホワイトバランスなどの色を変更するモジュールを除けば、多くのモジュールは、明暗のトーンの変更にかかわっています。デジタル現像では、ベースカーブを始めに、複数のトーンマピングを経て現像が進みます。この場合に、後で行われるトーンマッピングで、前のトーンマッピングが台無しになってしまう可能性もあります。あちらを立てれば、こちらが立たなくなるという現象です。こうしたトレードオフは、避けられない現象でで、例えば、ノイズ除去では、強くかけると、細部が失われますので、どこかで、バランスをとることになります。とはいえ、ノイズ除去のトレードオフは1つのモジュールの内部の問題です。トレードオフが複数のモジュール間で起こると編集作業は収集がつかなくなます。

編集作業のトレードオフ問題を回避するために従来のdarktableが採用していたルールは次の2つです。

  • 前に行われるトーンマッピングが、後で行われるトーンマッピングより変化率が高い。要するに、後で、微調整する。

  • Lab空間を使うことで、トーンと色を分離する。

ベースカーブは、この最初に行われるトーンマッピングです。前提としては、ベースカーブによる大きなレンジでの転写を行い、そのあとで、追加のトーンマピングを行い細かな転写の調整を行うというのが設計思想です。

これに対するPIERREさんの批判は次の2点と思われます。

  • よく使われるベースカーブの特性には問題があり、ここで、画像の情報量が減っている可能性がある。特に、ダイナミックレジの大きなセンサーでは、RAWデータにあるダイナミックレンジの長所が失われてしまっている。

  • どのようなトーンカーブが適切かはRAWデータの性質による。ベースカーブで一律な変換をすべきではない。また、トーンマピングを複数回重ねると、モジュール間のトレードオフ問題が発生する。そこで、ベースカーブを排して、できるだけ1回のトーンマッピングで対応すればトレードオフ問題を回避できる。また、トレードオフ問題が発生しないのであれば、トーンもRGB空間で処理して問題が起こらない。要するに、ベースカーブに代わるモジュールでトレードオフ問題を解決すべきある。

というわけで、次に、ベースカーブを見ます。

 

 

ベースカーブの問題

ピクセルパイプラインで処理がなされるので、処理がスタートする時点の画像が、ダークテーブルの履歴の0.オリジナルが、RAWを読み込んで、実数型に変化した画像であると考えます。

サンプル1の画像は、オリジナルの画像で、RAWとJpegの飛んでいる部分を表示させたものです。飛んでいるという意味は、RAWでは文字通り、値が、レンジの上限または下限に達していて、実際の値が上限値以上、または、下限値以下であることが推定される場合になります。これに対して、Jpegでは、全体の上限1%以上(赤で表示)または、下限1%以下(青で表示)を表しています。ですから、RAWとは異なりこの割合は、トーンマッピングで変化します。

サンプル1の画像では、RAWで飛んでいるのは、太陽の部分になります。Jpegでは、白飛びが太陽の部分で起こり、黒飛びが、木の枝と左手前の柵のところに見られます。

f:id:computer_philosopher:20200206151402p:plain

サンプル1


ヒストグラムは、黒から白に向かってなだらかに低下しているタイプです。

 

f:id:computer_philosopher:20200206151450p:plain

サンプル1 ヒストグラム


 サンプル2の画像は、ベースカーブの「ニュートラル」をかけた直後の画像です、赤の白飛びが拡大しています。しかし、サンプル1と比べて、それ以上に変化が大きいのは、青の黒飛びの面積が拡大している点です。ベーブカーブは、光のエネルギーに対する目の反応は、対数的に明るい方が大きくなるという前提で作成されています。その結果、黒に近いデータが圧縮されてしまいます。青の黒飛びの拡大は、その結果起こった変化です。

f:id:computer_philosopher:20200206151527p:plain

サンプル2


 

ヒストグラムと使用したベースカーブです。ヒストグラムは、サンプル1に比べると白に近い右側が大きくなり、黒に近い左側が小さくなっています。

対数的な変換をするベースカーブは上に凸で、45度の直線に比べ白に近い右側が上に飛びだした形になっています。

 

f:id:computer_philosopher:20200206151609p:plain

サンプル2 ヒストグラムとベースカーブ


 

darktableのベースカーブを調べた結果、デフォルトでは、ニュートラルのベースカーブでなく、カメラメーカーのベーズカーブに近いベースカーブが選択されることがわかりました。ここで使っているカメラはフジフィルム製なので、デフォルトではフジフィルム調のベースカーブが選択されます。そこで、フジフィルム調のベースカーブによる変換を次のサンプル3で試してみました。

サンプル3では、サンプル2に比べれば、Jpegの黒飛びの範囲は限定的です。しかし、それでもサンプル1よりは拡大しています。一方、赤で示される白飛びは、サンプル2とサンプル3ではほとんど変化がありません。

サンプル2とサンプル3の違いは、ベースカーブの違いに由来します。2つのベースカーブは、白に近い方では違いは小さく、黒に近い方で違いが大ききなっているためと思われます。

いずれのベースカーブも、上に凸な対数的な変換をおこなうため、程度の差はありますが、黒飛びが拡大しています。

 

f:id:computer_philosopher:20200206151705p:plain

サンプル3

サンプル4はベースカーブの代わりにフィルミックRGBをつかった変換です。

Jpegでは、赤の白飛びも、青の黒飛びも起こっていません。

  

f:id:computer_philosopher:20200206151738p:plain

サンプル4

サンプル4のヒストグラムとフィルミックRGBの変換曲線です。

 

f:id:computer_philosopher:20200206151822p:plain

サンプル4 ヒストグラムトーンカーブ

 

白飛び、黒飛びの発生は、画像データの特性に大きく依存します。ベースカーブをつかっても、白飛び、黒飛びが常に拡大するとは限りません。サンプル5,6,7は別のシーンで、オリジナル、ベースカーブ、フィルミックRGBを比較したものです。

サンプル5はオリジナルです。

 

f:id:computer_philosopher:20200206151920p:plain

サンプル5

サンプル6は、ベースカーブの変換後です。

 

f:id:computer_philosopher:20200206151953p:plain

サンプル6

 サンプル7は、フィルミックRGB変換後です。

 

f:id:computer_philosopher:20200206152022p:plain

サンプル7

ベースカーブは妥当か

ベースカーブを使うと、画像により程度は異なりますが、白飛び、黒飛びが増えます。

フィルミックRGBでは、原則、白飛び、黒飛びが発生します。

人間の目の光に対する反応は対数的に明るい方に大きく働きます。ベースカーブは、これを表現しています。

ベースカーブは間違っているのでしょうか。

筆者の解釈は次のようなものです。

サンプル1から4のように、太陽がかなり明るくフレームに入っている画像の場合、確かに、太陽を直視すれば、その部分が一番強く目に焼き付きます。その時には、周辺の暗いとことは20EVあっても見えなくなります。しかし、普通の人は太陽を直視することはありません。目を少し背けて、周りの状況をよく観察するでしょう。この状況をトーンマッピングでに言い換えることができると思います。

  • 太陽を直視する場合:ベースカーブ

  • 太陽に背を向けて、周辺を見る場合:フィルミックRGB

この仮説が正しいとすると、ベースカーブはダイナミックレンジが大きな場合には、適切な変換ではなくなると思われます。

PIERREさんが言っているように、現在のダイナミックレンジの大きなセンサーをベースカーブを使うことは妥当ではないのです。