シーン参照ワークフローで、一番よくわからない点が、Lab色空間のダイナミックレンジと思われます。
例えば、「WikiのLab空間では、RGB色空間とLab色空間の間の変換について、内部表現が8ビットの時代には、変換に伴う画像の劣化が問題になったが、16ビットになってからは、劣化の問題はない」と書いてあります。RGBが8ビットの内部表現はずいぶん昔のことのように思われます。これは、darktable やRawtherapieでは確かにそうなのですが、例えば、Gimpは、現在のv2.10の一つ前のv.2.8までは8bitでした。ですから、ソフトによっては、最近のことになります。
Lab色空間については、Aurélien PIERREさんは7EVを超えると、画像劣化が起こるといっていますが、一方では、LighroomやRawtherapieでは、この問題が論じられた形跡は見つかりませんでした。つまり、Lab色空間に問題はないという立場です。
こうなると、一体、どちらが本当なのか疑問になります。今回は、この問題を考えてみます。
なお、ここで。Lab色空間と呼んでいるものは、正確には、L*a*b色空間と呼ぶものです。
以下では、煩雑になるので*を省いています。
LabとRGBの関係
RGB色空間では、マイナスの値を使わないと表現できない色が一部であります。これは不便なので、行列で変化した全ての値を正にした色空間がXYZ色空間です。XYZは、RGBのセンサー信号の線形和になっています。
人間の光に対する感覚は,刺激値の対数に比例します。これは、ヴェーバー-フェヒナーの法則といわれ、既に説明しているガンマ補正関数はこの関係を表します。L, a, b の値は,XYZ の値を,視覚の特性を表現したガンマ補正関数を使って変換して計算します。具体的には,Y をガンマ補正変換したものを L (明度) とし, 差 [(Xのガンマ補正変換)-(Yのガンマ補正変換)] を定数倍したものを a,差 [(Yのガンマ補正変換)-(Zのガンマ補正変換)] を定数倍したものを b とします。
Lab色空間を使うと、一般には、逆J字型のガンマ補正関数を使うことになります。
これは、これは、RGB色空間でも同じで、RGB色空間は、センサーのRGBの値に対してガンマ補正関数で変換された値を使います。なおここでは、逆J字型関数も、逆S字型関数も併せて、ガンマ補正関数と呼ぶことにします。
とりあえず、以下では、混乱を避けるために、ガンマ補正をかける前のRGB、XYZをRGB値、XYZ値とよび、ガンマ補正をかけた値をRGB色空間、XYZ色空間を呼び分けることにします。
つまり、Labは内部処理としては、センサーのRGBの値に対して、次の処理をすることになります。
RGB値ー>XYZ値ー>ガンマ補正ー>Lab色空間
RGBの場合の内部処理は次になります。
RGB値->ガンマ補正ー>RGB色空間
ただし、この2つの処理が並行すると煩雑になります。また、この2つのガンマ補正関数は一致している必要があります。片方の色空間での編集結果をもう一つの色空間の値にも反省させる必要があります。並行処理でこれを行うのは煩雑なので、Lab色空間の場合には、メインの色空間を色空間にしてRGBの処理はLabから変換する次になると思います。
RGB値ー>XYZ値ー>ガンマ補正ー>Lab色空間ー>XYZ色空間->RGB色空間
RGB色空間での計算
RGB色空間->XYZ色空間->Lab色空間
この場合には、計算回数が増えます。また、ガンマ補正が逆J字型の関数の場合には、逆S字型関数よりダイナミックレンジの両端のグラデーションを維持することが難しくなります。つまり、フイルムのガンマ特性からすれば、両端で劣化が起こっていることになります。
恐らく、Aurélien PIERREさんの言っていることは、以上のような内容と推定しています。
-
Darktable 3:RGB or Lab? Which Modules? Help! Aurélien PIERRE
https://pixls.us/articles/darktable-3-rgb-or-lab-which-modules-help/