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

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

ガンマ補正理解メモ(2) - 画像処理ソフトとガンマ補正 (改訂版)

[お知らせ]

 2020年12月に公開した記事内容に誤解に基づく誤りが含まれていましたので、以下、書き換え版を公表します。

-----------------------

 前回に引き続き、私のガンマ補正に関する理解のメモです。あくまでも私の理解の範囲で書いているので、情報の正しさに関しては保証の限りでありません。

○画像処理ソフトとトーン再生カーブ(TRC)の関係

 さて、前回ガンマ補正の基本的な話を書きました。前回の話の中で、いわゆる「ガンマ補正」には、トーン再生カーブ (Tone Reproduction Curve: 以下、TRCと書きます) と、単純に画像の明暗のトーンを調整するトーンカーブ調整としてガンマ補正が使われる場合の2つがあり、さらに、TRC 自体、全く異なった二つの目的を兼用している、ということを明らかにしました。これらがいずれもガンマ補正と呼ばれうるので、話が分かりにくくなります。そこで、ここではまずトーン再生カーブ(TRC)から説明していきます。

 ところで、個別の画像処理ソフトでは画像データのTRCはどのように管理されているのでしょうか?前回でも触れましたが、カラーマネジメントがしっかり行われていれば、保存されている画像がどのようなTRCを使っていようが、モニタ上の出力(あるいは印刷出力)は、常にガンマ1.0で表示されるのが正解です。そしてMac OSではカラーマネジメントがOSレベルで行われていますが、WindowsではアプリケーションソフトがOS上のカラーマネジメントシステムを使うのか、それともアプリケーションが独自にカラーマネジメントを行うのか、はたまたカラーマネジメントを行わないのかは、アプリケーション任せになっています。さらにカラーマネジメントが行われていない場合、あるいは画像にカラープロファイルが欠落している場合は、OS上ですべてsRGB画像であるものとしてモニタに出力が渡されます。

 従って、ガンマ1.0のリニアな 画像が人に見せるべき画像だとすると、リニアな画像を表示させると薄暗くなるという状況が発生するとすれば、それはそのソフトウェアが一切カラーマネジメントを行っていないか、はたまたそのソフトウェアの内部で画像に含まれているカラープロファイルを無視してsRGB式TRC (図1. のgammma correction 1/2.2という点線の曲線)*1 エンコードした画像を扱うことを前提として調整しているか、はたまたその画像ファイルに含まれるべきカラープロファイルが欠落しているかのいずれかです。ですので、そのような場合、画像データがガンマ1.0になっていると、モニタ表示は、ガンマ2.2の近似値で逆エンコード(図1. のCRT Gammaという実線曲線)した画像が表示されてしまうので、薄暗くなってしまうのです。いずれにせよ適切なカラーマネジメントが行われていないケースということになります。

 

f:id:yasuo_ssi:20201028103245j:plain

図1. ガンマ曲線 (Wikipediaより引用)

 IrfanViewの場合、デフォルトではカラーマネジメントが行われていないのでリニアな画像を読ませると暗くなってしまいます。sRGB式TRCがかかっている場合のみ正しく(モニタ上でリニアに)表示されます。しかし、人が見るべき画像はリニアな画像ですので、リニアな画像がリニアにモニタ上に表示されない方がおかしいと考えることもできるでしょう。

 ちなみにARTやRawTherapeeのヒストグラムにはRawヒストグラムへの表示切替ボタンがありますが、これで切り替えると、かなり左に寄ったヒストグラムになります。

f:id:yasuo_ssi:20201130095724j:plain

図2. 通常のヒストグラム表示

f:id:yasuo_ssi:20201205170418j:plain

図3. Rawファイルヒストグラム

 図3が通常のヒストグラム、図3がRawファイルのヒストグラムです。従って、デフォルトのヒストグラム(図2)は、TRCを掛けたディスプレイ参照でのヒストグラムが表示されると思います*2

 

 

トーンカーブ調整

 ところで、カメラで撮ったRawファイルには、通常カメラ内現像されたプレビュー用のJpegイメージが添付されるとともに、カメラで指定した色空間 (通常は sRGBかAdobe RGB) やカラープロファイルがメタデータに記録されています。因みにカメラで、色空間をsRGBもしくはAdobeRGBに指定しても Rawデータ自体は変わりません。しかし、Rawファイルに含まれるプレビュー用のJpegイメージや、カメラ内現像の結果は指定した色空間で現像されます。

 そして Raw現像ソフトは、Rawファイルの色空間やカラープロファイル情報、あるいは、プレビュー用 Jpeg 画像などを基に、カメラで設定した画像を再現することになります。

 カメラメーカー純正現像ソフトの場合、各プロファイル情報に基づきカメラ内でどのような処理を行っているかパラメータを内部で持っていることが多いので、それに基づきカメラ設定どおりの画像を現像します。その際、TRCのエンコーディングと併せて、カメラで決められた基本的なトーンカーブ補正も行われます。これが ARTやRawTherapee でいうところの DCPトーンカーブ、あるいは、darktable で言う ベースカーブ と思われます。

 通常はS字カーブもしくはガンマ補正 (このガンマ補正はTRCとは別に掛けられるものです) が掛けられることが多いと思いますが、このカーブはカメラの味付けとして、たとえ同じメーカーの同じセンサーを使っていたとしても、カメラメーカーごと、あるいは機種ごとに異なります。

 ところでなぜ、TRCだけではなく、トーンカーブによる補正が必要になるのでしょうか?  これは、外界、あるいはカメラセンサーの光のダイナミックレンジと、私たちが見る通常のモニタやあるいは写真プリントのダイナミックレンジが異なるからです。外界の光のダイナミックレンジは非常に広いですが、カメラセンサーのダイナミックレンジは大きいものでも12.5EV程度、さらに標準的なモニタでは6.5EV程度と狭くなります。仮にモニタが外界と同じダイナミックレンジを持っているとすれば、一旦TRCの問題を捨象して考えると、そのままリニアな画像 (※ここで言う[リニア]とはTRCが掛かっていない画像データという意味ではありません。モニタ上の表示においてトーンカーブが直線である画像という意味です。今ここではTRCを捨象して考えています) を見せればよいのですが、実際にはモニタのダイナミックレンジは大幅に狭くなります。すると、モニタ表示上、画像にトーンカーブが一切かかっていないリニアな状態では、コントラストの低い眠い画像に見えます。

 これは、例えば全暗黒の映画館でスクリーンで映画を見るのと、やや明るい部屋でスクリーンで見るのでは後者の方がダイナミックレンジが狭くなりますが、やや明るい部屋で見た場合、映像からコントラストが失われ、眠く見えてしまうのと、同様かと思います。

 ということは、コントラストが低い出力デバイスで、画像をそれっぽく見せるには、画像のコントラストを高めないといけません。それを調整するのがトーンカーブ調整です。そして、上述したようにカメラの味としてカメラごとのレシピとしてトーンカーブをカメラメーカーが用意しています。カメラ内現像ではそのトーンカーブ調整が適用されます。

 では、カメラメーカーではない、サードパーティ製のRaw現像ソフトではどのように扱っているのでしょうか。これには3つパターンがあり、1. ソフトウェアごとにデフォルトのトーンカーブを用意している、2. カメラの固有レシピをエミュレートしたトーンカーブをカメラ機種ごとのDCPプロファイル (もしくはiccプロファイル) に記述して適用する、3. Rawファイルに含まれるプレビュー用Jpegデータからエミュレートする、となります。

 まず、1. についてですが、Adobe製のRaw現像ソフト、Camera Raw や Lightroom では、プロファイルにトーンカーブ定義のない場合、以下のような Adobe standard のトーンカーブを適用します。Adobe標準DCPプロファイル(この後の記述参照)を使った場合も標準DCPプロファイルにはトーンカーブ定義がないので、以下のカーブが適用されます。

f:id:yasuo_ssi:20210923210823p:plain

図4. Adobe Standardとリニアプロファイルのトーンカーブ*3

 また、同様に他のRaw現像ソフトでも、機種に関係のないカメラの標準的プロファイルとしてトーンカーブを用意している場合も多いと思います。ARTやRawTherapeeでも、Standard や Simple film curve等のプロファイルが用意されています。但し、デフォルトは以下で述べる、トーンカーブの自動調整です。

図5. ART の Standard Film Curve

 

darktableのシーン参照ワークフローでは、むしろカメラ固有のトーンカーブ (ベースカーブ) を使わずフィルミックrgbが提供するカーブを使うことを推奨しています。

 2. に関しては、Adobe製のソフトでは、カメラのプロファイルを記述するDCPファイル (DNG Camera Profile)にという規格を定め、その中に基本的なトーンカーブを定義することができるようにしています。このプロファイルは、Adobeがオープンにしているカメラプロファイルの規格であり、サードパーティのRaw現像ソフトウェアでも利用可能です。Adobeが無償で公開しているDNG コンバータをインストールすることで、誰でも無償で利用することができます。

 Adobeでは、Adobeの画作りを反映したAdobeスタンダードのDCPプロファイルを用意していますが、それ以外に、カメラ固有の画作りをエミュレートしたカメラ固有DCPプロファイルも用意しています。おそらくこれはAdobeが測定して作成しているものと思われます。これにより、カメラ純正ソフトで処理した画像と全く同じではないにせよ、それに近い画像を作ることができます。また、Adobe以外のRaw現像ソフトでもDCPプロファイルを読み込むことができるものがあります。ARTやRawTherapeeもDCPプロファイルを使うことができます。なお、DCPファイルはツールさえあれば一般ユーザも手持ちのカメラから作成することができます。

 また、他のRaw現像ソフトでは、DCPプロファイルに相当する内容の iccプロファイルをカメラごとに用意し、カメラ固有の絵作りをサポートしているものもあります。

 因みにARTやRawTherapeeにあらかじめ含まれているカメラ固有のDCPプロファイルは、ボランティアが作成したものです。しかしボランティアが作成したDCPプロファイルが存在しない場合は、含まれていませんので、Adobe製のDCPプロファイルを流用することになります。

 3. に関して言うと、ARTやRawTherapeeでは、トーンカーブの自動調整を使った場合、プレビュー用のJpag画像データからトーンカーブを再現して、現像画像に適用します*4

 

図6. カメラプロファイルの有無に応じた
Rawファイルを現像ソフトに読み込んだ際の動作の違い

 ちなみにARTやRawTherapeeでプロファイルを[ニュートラル]で読み込むと、トーンカーブを適用しない素の状態で読み込まれます。以下はNikonデジタルカメラのNEFファイルをARTで、ニュートラルで読んだ状態です。

図7. ARTで、ニュートラルで読み込んだ状態

 ご覧のように平板で眠い画像になります。しかも偽色も発生しています。

 そこで、図7に露出タブにある[トーンカーブの自動調節]を適用するとトーンカーブが適用されて、下記のように明るくなります。ヒストグラムが変わっているのもわかると思います。ニコン(D3200)のカメラ固有トーンカーブAdobe Standardに近いようです。

図8.  図7にトーンカーブを掛けた状態

 あるいはカラータブの[カラー・マネジメント]→[入力プロファイル]→[カスタム]でカメラ用プロファイルを選択し、さらに[DCPトーンカーブ使用]にチェックを入れると、カメラ用プロファイルにあるトーンカーブが適用されます。

 なお、ARTやRawTherapeeではトーンカーブの自動調整と、DCPトーンカーブを両方ともオンにすると、トーンカーブからDCPトーンカーブを差し引いたものが、トーンカーブにおけるカーブとして現れます(結果は変わらない)。

図9. 自動適用のカーブからDCPカーブ分が差し引きされた状態

 ところで、図7の画像は、図8のトーンカーブが掛けられた画像に比べて印象の薄い眠い画像に感じられます。上述したようにこれは、ディスプレイのダイナミックレンジがカメラセンサーや外界の光のダイナミックレンジよりも狭いために起こる現象であり、狭いダイナミックレンジでも画像をそれなりに見せるために、通常は何らかのS字もしくはガンマ補正を行うトーンカーブを掛けてコントラストを増強しているのです。

 因みに、VuescanでスキャンしたDNG形式のRawファイルの場合、プレビュー用のJpegにTRCがエンコードされずリニアに作成されてしまうようです。しかしおそらくプレビュー用画像のiccプロファイルがないため、リニアで保存されたプレビュー画像は常に暗く表示されます。従って自動調節でトーンカーブを掛けると、単純にトーンカーブがない状態で表示されるどころか、必要以上に暗くなってしまいます(sRGBのTRCを前提とした状態でリニアデータを見たトーンになる)。本来はTRCとトーンカーブは関係ないはずですが、このケースの場合、プレビュー用のJpegが不適切にエンコードされてしまうため、TRCの問題がトーンカーブに波及してしまうケースと言えます。

図10. ARTで読み込むと暗く表示されてしまう
Vuescan 作成DNGファイル


○どのようなトーンカーブが望ましいか - ガンマ補正 vs. シグモイド曲線 (S字カーブ)

 ところで、トーンカーブをどういじると、どう画像が変わるのでしょうか。これについて、下記のような有用な情報を公開されているブログ記事がありました。

mikio.hatenablog.com この記事の中で、トーンカーブとして、ガンマ補正だけ掛けたケースとガンマ補正とシグモイド補正をかけ合わせたケースを検討しています。この記事の中で、ガンマ補正だけだと最暗部に階調を割り当てすぎるきらいがある、と指摘されており、その補正のためにシグモイド曲線による補正を掛けたほうが良いと述べられています。

 ただ、究極的にはどのような補正カーブを当てればよいのか、という議論には最終的な正解は存在しないと思います。あるとすれば主観的な割り切りのみです。極論をすれば、補正する本人が主観的に良ければどうでも良いという鵺的なものかと思います。結局それは、Color Perfectの技術解説ページ*5で指摘されていましたが、カメラ入力というものは厳密な意味でデバイス入力ではないからです。つまりその時点時点で、明るさも、絞りも、照明状況も異なる多様な状況で入力が行われます。Rawファイルに記録されたデータがリニアな画像であるのは確かではありますが、それが「正しい」リニアな画像なのかは断言できません。照明のせいで色被りしている可能性だってあるのです。しかも、色被りしている状態を「適切」と主観的に判断する可能性もあります。これが、入力条件が厳密に定まっている他のコンピュータ・デバイスと比べた時に、デバイスとは言えない、という意味です。ですので補正カーブについても正解は1つに定まらないと思います。

 例えば、下にRawTherapeeで読み込んだ画像で、トーンカーブなし、RawTherapee標準トーンカーブ適用、Adobe カメラ用プロファイルDCPトーンカーブ適用の3枚を掲げますが、記憶としてはトーンカーブなしとありの中間というあたり(図7-4)です。写したときに目に映っているより、白っぽいなぁ、と思いました。場合によっては、印象色を強調するならトーンカーブなしでも構わないかもしれません。仮にこの場合中間が正解そうだからといって、常にこの中間のトーンカーブを掛けることが正解とも言えない、というあたりが難しいところです。光線状態によってその時その時で違うでしょうから。このあたり、LuminarあたりではAIを使って解決しているのでしょうか?

f:id:yasuo_ssi:20201206181056j:plain

図11-1. トーンカーブなし

f:id:yasuo_ssi:20201206181124j:plain

図11-2. RawTherapee 標準トーンカーブあり

 RawTherapeeの標準トーンカーブはS字です。

f:id:yasuo_ssi:20201206181157j:plain

図11-3. Adobeカメラ用プロファイルからDCPトーンカーブ読込み

 Nikonのカメラを模したDCPトーンカーブを適用した画像です。

f:id:yasuo_ssi:20201206181923j:plain

図11-4. 標準となし(リニア)の中間的なトーンカーブ適用

○TRC(トーン再生カーブ) とトーンカーブの関係

 なお、上のトーンカーブ調整とTRC(トーン再生カーブ)を掛けることは区別して考えなければなりません。但し、トーンカーブ調整でもガンマ補正が使われ得ますし、TRCも一般的に使われるsRGB式TRCはガンマ2.2近似値ですので、これもガンマ補正と言われることがあります。そのため、ネットの情報を読んで理解しようとすると、非常に紛らわしいです(私も不正確に認識していました)。しかし、トーンカーブ補正で使われるガンマ補正とTRCのガンマ補正では意味は全く異なり区別して考えなくてはいけません*6

 例えば非リニアな作業色空間を主に使っている Raw現像ソフトを考えてみます。この場合、Rawから、一旦リニアなRGBデータを生成しますが、そのあとTRCを掛けて非リニアなRGBデータ (あるいはL*a*b*データ)に変換し、主な編集作業を行います。その段階でトーンカーブ補正も行うことになるはずです。そうすると以下のようなデータ変換がかかることになります。

図12. TRCの適用とトーンカーブ補正

 しかし、ディスプレイなどに最終出力する際は、TRCデコードされますので、最終デバイスに表示されるときは、TRCエンコード分をキャンセルし、ただトーンカーブ補正の効果が与えられた画像になるはずです。つまりカラーマネジメントがしっかり行われていれば、TRCがどうであろうが、TRC自体は見た目には何も影響を与えないはずです。しかし、カラーマネジメントがきちんと行われていないと、TRCの在り方が見た目に影響を与えます。リニアな画像がモニタ上で暗く見えるというのは、まさにカラーマネジメントがきちんと行われていないために、TRCの問題が見た目に影響を与えている典型的なケースといえます。

 なお ART の場合はシーン参照ワークフローを採用しているので、トーンカーブの適用は、ディスプレイ参照にトーンマッピングした後のリニアRGB空間 (TRC不適用) で行われています。最終デバイスに出力される直前 (or L*a*b空間を使う前) にTRCエンコードされ出力されます。

 また同じくシーン参照ワークフローを採用している darktableの場合は、シーン参照からディスプレイ参照にトーンマッピングを行うフィルミックrgbで、トーンマッピングと同時にS字カーブも(+おそらくTRC適用も)掛ける補正を行っています。

 

← 初回「ガンマ補正理解メモ (1) - 人に見せるべき画像はガンマ1.0!」に戻る

⇒ 次回「ガンマ補正理解メモ(3) - Photoshopで色の明るさを変えると色自体(色相)も変わる!?」に行く

 

*1:厳密にはsRGBのガンマ補正曲線は、1/2.2のガンマ補正曲線の近似値であり、12.92まではリニア、それ以上はガンマ1/2.4となっている。sRGB以外の他の色空間でもそのカーブを採用している場合が多い。

*2:因みに、RawTherapeeのデフォルトの作業色空間はProPhotoにsRGB式ガンマ補正(TRC)を掛けたもののようです。RawPedia「R、G、Bデータを RGB変換するための作業色空間 “作業プロファイル”」参照。ARTの場合作業用色空間はRec2020のリニアです。

*3:出典 https://tonykuyper.wordpress.com/2021/07/23/the-linear-profile-a-new-beginning-in-light-room-and-camera-raw/

*4:次の議論を参照してください。なおこの件については公式マニュアルRawPediaには一切言及がありません。

discuss.pixls.us

discuss.pixls.us

*5: Dunthorn, David, 2009,'Complete Color Integrity', C F Systems CFS-276 この文書の'The Pitfalls of Using Profiling as Camera Calibration'以下をご覧ください。

*6:但し先ほどのVuescanのDNGファイルのように、不適切な処理によって、相互に影響を与えてしまう場合もあり得ます。