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

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

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

 本記事の内容は筆者の不十分な理解による誤った記述が含まれています。現在改訂版を準備中です。よろしくお願いいたします。

 

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

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

○画像処理ソフトとガンマの関係

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

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

 

f:id:yasuo_ssi:20201028103245j:plain

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

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

 

トーンカーブとガンマ補正カーブの関係

 ところで、カメラで撮ったRawファイルには、あらかじめファイルのプロファイル情報で定義されたトーン再生カーブ (TRC) が掛けられており、Raw現像ソフトで通常デフォルトの状態で読み込むとそのトーンカーブが読み込まれるか、あるいはそのソフトで用意されたそのカメラのプロファイル(およびそこに含まれるトーンカーブ)が読み込まれることが普通です。

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

f:id:yasuo_ssi:20201205163255j:plain

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

 実は、私がガンマ補正の問題を考え始めた原因は、RawTherapeeで、Vuescanを使って作成したリニア (ガンマ=1.0) なRawファイルを、プロファイル[ニュートラル]で読み込むと薄暗くなってしまうところから出発したためでした。当初はリニアだから薄暗く表示されるのかと誤解していましたが、結局それはトーンカーブの欠如、およびスキャンしたままでホワイトバランスが崩れていたための問題であることが分かりました。

 で、図1に露出タブにある[トーンカーブの自動調節]を適用するとトーンカーブが適用されて、下記のように明るくなります。ヒストグラムが変わっているのもわかると思います。

f:id:yasuo_ssi:20201108234438j:plain

図2. 図1にトーンカーブを掛けた状態

 RawTherapeeの自動調節で生成されるトーンカーブは、Rawファイルに含まれるサムネイル用Jpegから自動的に生成されます*2。あるいはカラータブの[カラー・マネジメント]→[入力プロファイル]→[カスタム]でカメラ用プロファイルを選択し、さらに[DCPトーンカーブ使用]にチェックを入れると、カメラ用プロファイルにあるトーンカーブが適用されます。

 ちなみにRawTherapeeのヒストグラムにはRawファイルのヒストグラムの表示/非表示切替ボタンがありますがこれを切り替えると、かなり左に寄ったヒストグラムになりますので、デフォルトの状態は元のRawファイルのリニアな状態から、sRGB式ガンマ補正を行ったのち、ヒストグラムが表示されるようです*3

 

f:id:yasuo_ssi:20201130095724j:plain

図3. ヒストグラム Raw / 非Raw切替ボタン
(ヒストグラムは図2とは関係ない)

f:id:yasuo_ssi:20201205170418j:plain

図4. 図1,2の画像のRawファイルヒストグラム

 図4がRawファイルのヒストグラムです。但し、トーンカーブを適用しようがなかろうが変わらないので、図4. のヒストグラムにsRGB式ガンマ・エンコードを掛けると図1. のヒストグラムになるようです。つまり図4. が物理的RGBの分布、図1が知覚的RGBの分布ということになるかと思います。

 しかし図1の画像は、図2のトーンカーブが掛けられた画像に比べて印象の薄い眠い画像に感じられます。仮にsRGB標準のガンマ補正カーブが、知覚反応上正しいとしても(しかし、それも近年異論が出ていて、PQ, HLGなどの別の知覚的補正カーブが提案されています)、印象的、あるいは心理的インパクトが考慮されていないということかと思います。その部分を補正するのがトーンカーブで、いわばカメラの持ち味として、カメラごとに(あるいはカメラの撮影プロファイルごとに)設定されているのではないかと思います。

 因みにVuescanで作成したRawファイルにはカメラプロファイル情報は含まれていないので、基本的には作業色空間への変換とガンマ補正は行いますが、トーンカーブは適用されない状態でRaw現像ソフトに読み込まれるということかと思います。但し、AdobeLightroomやCamera Rawの場合は、ファイルにカメラプロファイル情報が含まれていない場合には、Adobeの標準トーンカーブが読み込んだときに自動的に適用されるようです。ですので、直ちにカメラで作成したRawファイルと同様に扱える、ということかと思います。他の現像ソフトでも同様な扱いになっている場合があるかもしれません。

f:id:yasuo_ssi:20201110090152j:plain

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

 でも、トーンカーブと知覚的ガンマ補正カーブの関係はどのようなものなのでしょうか。これについて、下記のような有用な情報を公開されているブログ記事がありました。

mikio.hatenablog.com この記事の中で、ガンマ補正だけ掛けたケースとガンマ補正とシグモイド補正をかけ合わせたケースを検討していますが、このシグモイド曲線による画像補正という部分が、トーンカーブによる補正に相当する部分かと思います。この記事の事例写真のすぐ下にあるグラフの緑の線がガンマ補正(但しここではガンマを1/2.0としています)とシグモイド補正を掛け合わせた補正曲線として出ていますが、これこそがカメラがトーンカーブで補正を掛けて目指す最終的な補正曲線ではないかと思います。つまり、非リニアな作業色空間の中では、最終的には、リニアな直線より若干上に寄った程度の曲線で補正するのが良いということではないでしょうか。よく、コントラストをやや上げるためにS字のトーンカーブを... という話を聞きますが、このグラフのオレンジのシグモイド曲線がその役割を果たしていると思います。この記事の中で、ガンマ補正だけだと最暗部に階調を割り当てすぎるきらいがある、と指摘されており、その補正のためにシグモイド曲線による補正を掛けると述べられていますが、まさにそういうことかと思います。同時に、ウェーバー=フェビナーの理論に疑問が投げかけられているというのも、そのあたりが原因ではないかと思います。

 ただ、この補正された画像は、さらにモニタでガンマ・デコードされて表示されるので、モニタに出力された画像は、図1.のリニアな対角線と、CRT Gamma 2.2という実線の曲線との中間ぐらいの、リニアな対角線より多少下にへこんだ補正曲線を掛けた画像になるはずです。ですが、よく考えてみると、この下にへこんだ補正曲線を掛けた画像のカーブは、トーンカーブ補正曲線そのものです。このトーンカーブこそカメラ等による「味付け」に相当するかと思います。要は、リニアなガンマ1.0の画像にトーンカーブによる補正を掛けた画像を出力して、それを人間に見せようとしていることになります。

f:id:yasuo_ssi:20201111182608j:plain

図6. ガンマ補正とトーンカーブ補正

 そうだとすると、そもそもリニアな色空間で処理する、ガンマ1.0を前提とする画像処理ソフトでは、ガンマ・エンコードを飛ばし、トーンカーブによる味付けのみ行えばよいということになります*4。そうなると、ガンマ補正が掛かった非リニアな画像よりは補正量が少なく、計算量も少なくて済むはずなのでよりスピーディーに動作するはずです。

 ところで、ここまで考えてきて、気が付いたことがあります。せっかくガンマエンコードして、暗い部分の諧調を相対的に増やしたのにS字カーブのトーンカーブ補正を掛けてしまうと、完全に戻るわけではないにせよ、再びリニアに近いところまで戻ってしまいます。つまり、知覚的に暗い部分の諧調が減ってしまうことになってしまいます。もちろん16bitファイルなら問題ないわけですが...

 もう一つは、人間はリニアな画像を見ているはずなのに、写真はリニアな画像より、トーンカーブ補正を掛けてコントラストを高くした画像をより好ましく、あるいは自然、リアルと感じるのはなぜか、という問題です。

 これは全く私の推測ですが、現場にいるときは、いわば人間は風景に取り囲まれた空間にいるわけです。それを人間が写真として見た場合、その空間を大幅に縮小して見ているので、そこに何らかの視覚心理学的要因が働いて、オリジナルの物理的な光線に比例したリニアな画像ではリアリティが感じにくいのではないでしょうか。このあたり何らかの理論的なバックグラウンドがあるのではないかと思いますが、まだ調べていません。

 

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

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

f:id:yasuo_ssi:20201206181056j:plain

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

f:id:yasuo_ssi:20201206181124j:plain

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

f:id:yasuo_ssi:20201206181157j:plain

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

f:id:yasuo_ssi:20201206181923j:plain

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

 ○それ以外にリニアRawファイルが暗く表示される可能性

 通常画像センサーは12bitもしくは14bitのデータを出力するケースが多いと思います。ただしデジタルカメラでよく使われるベイヤー型センサーのRawデータは、そのままではRGBデータが揃っていませんのでRawデータから直接画像を出力することができず、必ずデモザイクという処理過程を経なければなりません*6。ですので、デモザイクして画像処理ソフトの色空間にデータを変換するときに、255を最大値とする浮動小数点で扱うのか、あるいは16bit 65535を最大値とする空間で扱うのかは分かりませんが、それと同時に、最大値が適切に処理されて読み込まれていることが多いのではないでしょうか。

 しかし、フィルムスキャナなどに多い3CCDセンサーの場合は、最初からRGBデータがそろっていますのでデモザイクが必要ありません。そして、12bitセンサーなら最大値は4095, 14bitセンサーなら最大値は16383となります。これを最大値が65535となる16bitのファイルフォーマットにそのまま直接保存するとすれば、非常に暗く表示される可能性はあります。Raw現像ソフトやRawビュアーソフトに、Rawファイルの最大値を調節せずに読み込むソフトがあるかどうかは分かりません。しかしVuescanはフィルムスキャナのRawデータを16bit リニアTIFFファイルで保存することもできますので、これを通常の画像処理ソフトに読み込むと、最大値を調節せずに非常に暗く表示する可能性は大です。

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

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

 

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

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

discuss.pixls.us

discuss.pixls.us また、VuescanでスキャンしたDNG形式のRawファイルの場合、サムネイルのJpeg内部でリニアなデータで保存されます。しかしJpegはそもそもsRGBで保存されることを前提とした形式なので、常に暗く表示されます。従って自動調節でトーンカーブを掛けると、常に暗くなってしまいます。

*3:RawTherapeeのデフォルトの作業色空間はProPhotoにsRGB式ガンマ補正を掛けたもののようです。RawPedia「R、G、Bデータを RGB変換するための作業色空間 “作業プロファイル”」参照。

*4:例えばフリーのRaw現像ソフト darkable では、リニアな作業色空間が利用可能ですが、そのフィルミックRGBワークフローなどはそのようなことを目指しているのではないでしょうか?

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

*6:例えばこちらのサイトをご覧ください。

vook.vc