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

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

ガンマ理解補正メモ(5) - RawTherapeeにおけるガンマ補正の扱いは... ?

 前回GIMPにおけるガンマ補正の扱いを考察しましたが、ではフリーの現像ソフト、RawTherapeeにおけるガンマ補正の扱いはどうなのでしょうか? ポジの褪色フィルムのマニュアル補正を試みた時は、リニアに保存してある画像に対しては、そのままリニアに処理を行っているように見えましたが、実のところどうなのでしょう?

 で、実はRawTherapeeの公式レファレンスマニュアルサイト、RawPediaでは完全に矛盾した記述がみられます。

・RawPedia「カラーマネジメント」ページにおける記述

作業プロファイル 

「デフォルトの作業プロファイルはProPhotoです。普通にプログラムを使うのであれば、これを変更する必要はないでしょう。

    (中略)

 注意:作業プロファイルによって特定されるのは、レッド、グリーン、ブルーの構成要素だけです。これはRawTherapeeの処理パイプラインが、ガンマ符号のない(この場合、ガンマ=1.0)浮動小数点演算で行われているからです。但し、幾つかの機能(カーブやヒストグラムなど)は、作業プロファイルの如何に関わらず、ハードコードされているガンマ(通常はsRGBのガンマ)を使って表示されます」

 

 この記述から読み取れることは、RawTherapeeの作業プロファイルは、デフォルトでは、ProPhoto色空間を使うが、ガンマ=1.0のリニアな画像で扱っている、ということです (ProPhotoは通常はガンマ1.8で扱う)。

 一方こんな記述も見られます。

・RawPedia「カラーマネジメント補足」ページにおける記述

R、G、Bデータを RGB変換するための作業色空間 “作業プロファイル”   

「7つの作業色空間を用意しました(十分だと思います、むしろ多過ぎるかもしれません):sRGB, AdobeRGB, Prophoto, Widegamut, BruceRGB, BetaRGB, BestRGB。この中の4つは色空間が広いものです:BetaRGB (B.Lindbllomのオリジナル), BestRGB, WideGamut、そして Prophoto。 

 RGB変換の際に、RawTherapeeの中で使われるガンマは、常にsRGBの、ガンマ=2.4、勾配=12.92ですLightroomも同じ)。

 備考:他の現像ソフトは異なる作業色空間の選択肢を持ちます:

  • AdobeのACR の選択肢は4つ (AdobeRGB, ColorMatch, Prophoto、そしてsRGB)。
  • AdobeLightroomには選択肢がなく、sRGBのガンマで調節したProphoto(Melissa)を使います。
  • DxOにも選択肢はありません、Adobeの色空間を使います。
  • NX2は出力色空間には幾つか選択肢を持っています。」

 

 この記述からは、作業色空間は7つから選べるものの、いずれもsRGB式ガンマ補正カーブを使う、ということが読み取れます。

 つまり、矛盾した説明が混在しています。この矛盾は英語版 RawPedia でも同じです (ここでは誤訳はありません)。 

 

 この問題については、昨年の1 - 2月にかけて、PIXIS.US において、次のような議論が交わされています。

discuss.pixls.us

 このスレッドで回答している jdcこと、Jacques Desmis氏 (フランス人) は、RawTherapeeの作業プロファイルのプログラムコーディングを担当した方のようですが、彼は、 次のように回答しています。

"All the threatment in RT is in linear mode : TRC with gamma=1 slope = 0

But at the end, in such a way that the image is viewable, it’s applied a gamma sRGB (g=2.4 s=12.92)

But there are 2 exceptions:

  1. in “Color” / “Color management” /“Tone response curve” you can change gamma sRGB by a TRC with gamma and slope as you want. This thretament is apply at the beginning of RGB

  2. in “Local adjustements” / shadowsHighlight -Tone equalizer TRC
    If you choose “Tone equalizer TRC” you can change TRC with

  • gamma between 0.25 to 15
  • slope between 1 to 150
    This allows processing of underexposed images or others… (gamma = 1 or BT709)

To note the difference between simple gamma / slope and TRC : TRC take into account primaries”

 

 つまり、ユーザが意図的にガンマ補正カーブを変更しない限り、RawTherapee内ではリニアな画像として扱っているが (回答時点の8年前より)、それをモニタに見えるように出力する際にsRGB式ガンマ補正を掛けている、ということです。なお、TRCとはTone Reproduction Curveの略語で、トーン再現カーブのことを指します。また、“Local adjustements”タブはVer. 5.8では有効ではなく、RawTherapeeの派生バージョン、RawTherapee / ARTで有効のようです*1

 ということは、RawTherapeeでも私が前回お示ししたGIMPの作業プロファイルと似た機構で画像を扱っているということです。以下、前回の図を再掲します。

f:id:yasuo_ssi:20201126121933j:plain

GIMPの動作機構

 そして、Jacques Desmis氏の解説に基づいたRawTherapeeの動作機構です。モニタ出力直前にガンマ・エンコード(デフォルトではsRGB式 [Gammma=2.4 Slope=12.92])を行っています。つまりガンマ補正はソフト・エンコード (画像のRGBデータとしてはリニアで保持するが、出力時に一時的にエンコードして出力する)している、という話になります(ユーザがガンマ値を指定しなければですが)。

f:id:yasuo_ssi:20201127112026j:plain

Jacques Desmis氏の解説に基づくRawTherapeeの動作機構

 ただ、先のPIXIS.USでの議論で2人の質問者が質問していますが、[カラー]タブの[作業プロファイル]設定にて、[トーン再現カーブ]をデフォルトの[なし]から[カスタム]に変えると、ガンマが2.4になり、それが[なし]とほぼ変化ないこと、あるいはガンマを1.0に変更してしまうと、画面表示が暗くなってしまうことに対して疑問が出されています。つまり、作業色空間のデフォルトが本当にガンマ1.0だとするなら、[トーン再現カーブ]が[なし]と、[トーン再現カーブ]でガンマ1.0に設定した場合が一致すべきなのに、[トーン再現カーブ]が[なし]と、[トーン再現カーブ]でガンマ2.4に設定した場合が一致するのはおかしいではないか、という指摘です。これは、私もまったく同じ疑問を持っていました。

 それに対する回答は、要領を得るような得ないような回答で、たぶん質問者はよく理解できないままのようです。

 私の考えでは、おそらく、RawTherapeeの作業プロファイル設定におけるガンマ設定は、作業色空間における物理的RGBデータのガンマ設定を変更するものではなく(おそらくガンマ=1.0 / リニア画像から変更できない)、モニタ出力の際の、ガンマ・エンコーディングの仕方を変えているだけではないかと推測します。Jacques Desmis氏は、

"in “Color” / “Color management” /“Tone response curve” you can change gamma sRGB by a TRC with gamma and slope as you want. This thretament is apply at the beginning of RGB"

と回答していますが (thretament はたぶん treatmentの誤記)、RGBの最初(つまり作業用RGB色空間に落とし込む際)にユーザが指定したガンマ(TRC)変換を掛けているわけではなく、デフォルトと同様にモニタ出力直前に掛けているのではと私は疑っています(そのほうが整合的です)。そして、ひょっとするとガンマを掛けた後非リニアな色空間で行うべき処理が行われているのかもしれません。ヒストグラム表示もモニタ出力直前の状態が表示されているのではないでしょうか。ですので作業色空間内部ではガンマ1.0のデータが、ヒストグラムではsRGB式ガンマ・エンコードされたデータとして表示されるのではないでしょうか。

f:id:yasuo_ssi:20201129172521j:plain

私の推測するRawTherapeeの実動作
(ガンマ補正はソフト・エンコードで一貫しているのでは? という仮定に基づく)

 私の推測が正しいとすれば、モニタにデータを渡す際にガンマ変換を掛けているので、なまじユーザがリニア(リニア=1.0)を指定してしまえば暗く表示されるのは当然です。だとすれば、そもそも作業プロファイル (Working Profile) という項目名の下にガンマ設定項目があること自体が誤解を招きかねない、とも言えると思います。

f:id:yasuo_ssi:20201108235227j:plain

作業プロファイルでガンマを1.0に設定したら画像が暗くなった状況

 あるいは、Jacques Desmis氏の言葉が正しいとすれば、作業色空間に対しユーザが指定の値でガンマ・エンコードを指定した場合は、モニタ出力直前のガンマ調整は行われないということになります。その場合は、画像のRGBデータのガンマ補正はハード・エンコードされている (画像のRGBデータ自体がエンコードされた変化した値として保持される) のでしょう。だとすると、ユーザがガンマ値を指定するとハード・エンコード、指定しないとソフト・エンコードとかなり複雑にRawTherapeeの動作機構を切り替えていることになります。それならば、ユーザがガンマ指定をしなければリニアに処理しているはずですので、ユーザがガンマ1.0を指定する意味は全くなく、かつモニタ出力もおかしくなるだけ、という話になります*2。ただ、カラーマネジメントの本旨からすれば、ユーザが作業空間のガンマ値を変更したからといって、モニタ表示を変えるべきではありません(変えるので、誤解も生じます)。このようなつくりをしているとしたら、カラーマネジメント上問題だと言わざるをえません。ガンマ値が変更されたかどうかは、ヒストグラムの変化で確認させるべきで、画像表示を変えるべきではないのです*3

 仮に、先の私の推測図が合っているとすると、モニタのガンマ値は2.2に固定されているはずですので、モニタ出力という観点からは、[作業プロファイル]で、作業色空間を指定することは意味がありますが、ガンマ値をいじることはほとんど無意味となります(意図的に非正常なモニタ出力を行いたい、という場合は意味があるかもしれませんが...)。但し、ファイル出力という観点からは、ガンマ値をいじる意味は出てくるかもしれません。とはいえ、その場合も、出力したいガンマ値の icc プロファイルを通してファイル変換したほうが、間違いがないような気がします。この解釈があっているかどうかは分かりませんが、しかし、こう解釈すると作業プロファイルにおけるガンマ変更の表示に対する挙動が整合的に解釈できます。

 あるいは、そうではなくJacques Desmis氏が言う通り、やはり作業色空間にユーザの指定したガンマ変更が適用されると仮定したとしても、ユーザがガンマ値を指定する意味は、あえて画面を意図的に暗くしたり明るくしたいという場合以外、ほとんどないと言えます。結局所定のガンマ値のファイル出力を得たいなら、iccプロファイルを指定して出力すればよいだけですし、カラーマネジメントがちゃんと働いているなら、ガンマ値がどうであれ、モニタ出力やプリンタ出力はほとんど変わらないはずですから。また非リニアなデータに基づいた作業過程は、色の統合性を失いがちで、画像劣化を招きやすいというデメリットはあっても、メリットはあまり見当たらないように思います。

 ともあれ、RawTherapeeは、トーンカーブなどの調整感覚が、明らかにPhotoshopなどと異なっており、個人的な感想ですが、トーンカーブを使った褪色補正などの調整がPhotoshopなどよりやりやすい感じですので、少なくともデフォルトでは内部でリニアに画像処理をしているというJacques Desmis氏の指摘は間違っていないのではないかと思います。そしていずれにせよ作業プロファイルでトーン再現カーブ(ガンマ補正)のガンマ値をユーザがわざわざ変更する意味は、ほぼないように思います。

 なお、Jacques Desmis氏はRawTherapeeは8年前(回答時点より)からリニアで処理してきたと語っていましたが、もう一つのフリーウェアのRaw現像ソフト、darkableでは一昨年末にリリースされたVer. 3.0代に至って、非リニア処理(表示参照ワークフロー)からリニア処理(シーン参照ワークフロー)へ大きく移行中のようです。最終的に全面的にリニア処理に移行するのか、それとも非リニア処理とリニア処理を選択できる状態を保っていくのかは分かりませんが...

 ← 4. GIMPでのリニア/非リニア画像処理と色空間の変更に戻る

6. TRC と S字トーンカーブの関係 に行く→

*1:次のページもご参照ください。"The processing pipeline in ART"

*2:RawPediaのヒストグラムの説明はこちらです。

*3:仮にどうしても画面でガンマの変化を示したいならガンマ1.0の画像はそのまま1.0にモニタに表示され、ガンマ・ハードエンコードした画像は明るく表示されるようにすべきです。