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

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

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

 Vuescanにおいて、カメラプロファイルのないリニアなRawファイルを保存し、それをRaw現像ソフトで取り扱うようになってから、ガンマ補正とは何かが気になるようになりました。ですが、いろいろなサイトを見て説明を見ても、説明が紛らわしく当初は十分理解出ませんでした。またdarkableなどではリニアな画像処理を推奨しているようですが、その意味も分かったような、分からないような状態でした。ようやくどういうことかある程度、分かってきたようですので (分かったつもりになっているだけかもしれませんが)、備忘録を兼ねて現在の理解状況をメモします。

 まず、私がガンマ補正に関して十分理解できなかった大きな要因は、ガンマ補正の理屈がどうであれ

最終的に目指されるべき出力 (モニタであれプリントアウトであれ) は、あくまで、ガンマ=1.0の画像 (つまりガンマ補正がかかっていない画像) であること

という点が、様々な説明を読むうちに、紛らわしくなり、分からなくなっていた、ということです*1。CRTの陰極管出力特性がどうとか、ウェーバー=フェヒナーの法則がどうとかという話が出てきますが、とにかく輝度が適切な物理的最終出力は、ガンマ=1.0のリニアな画像です。まずそこを押さえなければいけません。 

 

  で、ウェーバー=フェヒナーの法則はどういう話かというと、物理的にガンマ=1.0の画像を見たとき、知覚的に人間はその明るさをどう受け取るか、という話です。

f:id:yasuo_ssi:20201028093440j:plain

図1. ウェーバー=フェヒナーの反応曲線

 こちらの図はWikipedia「ガンマ値」にある図を加工したものですが、仮に全暗黒~白までの輝度が0~1で表されるとし、X軸が物理的輝度、Y軸が知覚的輝度を表しています。そして点線は物理的輝度の知覚的輝度への変換曲線 (ガンマ= 1/2.2、つまり元の物理的輝度をL1 知覚的輝度をL2とすると、L2 = L1^(1/2.2)となる) を示しています。この図の見方は、人間が半分の明るさ (0.5) と感じる物理的輝度は0.218であるということです。また物理的輝度が0.5であれば人間は知覚的には0.72~0.73程度の明るさと感じるということを示しています。これが意味することは、人間は、やや暗めの領域に対して敏感に反応し、物理的輝度に対して相対的により明るく感じる一方、明るい領域に関しては鈍感で相対的にさほど明るく感じない、ということです。また非常に暗い場合は、やはり鈍感で明るく感じられません。ウェーバー=フェヒナーの考え方は正しいのか近年疑問が提出されているようですが、これはまた別に触れます。で、ここで重要なのは、人間がリニアな画像を見てそれをどう脳内で歪曲して非リニアに知覚しようが、あくまで人間に見せるべき画像はガンマ=1.0のリニアな画像であるということです。ガンマ補正した画像を人間に直接見せると必要以上に明るく認識することになります。

f:id:yasuo_ssi:20201106000534j:plain

図2. 人間: リニアな画像を見て非リニアな画像に知覚する

 

 一方、人間の知覚曲線とは別に、TV放送やパソコンで使われてきたガンマ補正曲線があります。通常TV放送の電波やパソコンの例えばJpegファイルなどでは、リニアな画像にガンマ=1/2.2の補正曲線(厳密にいうと、12.92までは対角線、そこからガンマ=1/2.4の曲線でつながる補正曲線ですが、近似的に1/2.2になります。いわゆるsRGB式 TRC [トーン再生カーブ]※後述)を使って補正した画像や映像が使われています。

f:id:yasuo_ssi:20201028101048j:plain

図3. ガンマ補正曲線 = トーン再生カーブ(TRC)
(Wikipediaの図を加工)

 この図も上の図と同じく、暗黒~最明までを0~1.0で表したもので、X軸が変換前の物理的輝度、Y軸が変換後の物理的輝度です。この補正曲線で補正すると (これを便宜的にガンマ・エンコードと呼びます。なお英語の文献ですと、Gamma compression と表記していることが多いようですが、「圧縮」か?、という気もしますので...)、もともと0.218だった輝度が0.5に変換される、ということです。つまり元の画像より明るく補正されるわけです。変換前の輝度が0.2~0.3ぐらいが最も補正幅が大きく、両端に行くほど補正幅が少なくなります。

 このガンマ補正曲線は、物理的輝度の人間の知覚的輝度への変換曲線と一致しますが、これは単に偶然の一致であり、ウェーバー=フェヒナーの法則とは何の関係もありません。この補正曲線が使われる理由は、ブラウン管時代のCRTの特性からくるもので、CRTの明暗は陰極管にかかる電圧の高低で決まるそうですが、電圧通りに明暗が出力できるのではなく、低い電圧では暗めに、高い電圧では明るめに出力するという特性がありました。つまり、図3の対角線が電圧 (これはもともと写そうとする画像の輝度に比例) だとすると、それに対する明るさの出力反応は図3. の CRT gamma 2.2 という曲線になり、中間レンジで暗めに出力されるということです。

f:id:yasuo_ssi:20201028103245j:plain

図4. 「ガンマ・エンコード」(点線)と「ガンマ・デコード」(実線) の補正曲線
(Wikipediaの画像を引用)

 で、これをリニアに (上の図の対角線) 出力できるよう補正するために1/2.2のガンマ補正カーブ (厳密に言えば、多くはガンマ1/2.2カーブ近似のsRGB式TRC) を掛け暗~中間部分の輝度を引き上げて、最終的にCRT上でリニアな画像が出力されるよう、非リニアな画像に補正して出力する(モニタに信号を渡す)ということです。

 しかしLCDモニタになると、CRTとは異なり、電圧に応じたリニアな出力が可能です。しかし、CRTとLCDモニタが混在して使われたりしますし、すでにガンマ補正を掛けるのが規格になっているのでそれを変更するわけにもいかず、LCDモニタ(たぶん、ドライバソフト)内でCRTを模したガンマ2.2の曲線を掛けて「補正」というか、歪曲させてCRTに合わせています。つまりCRTをエミュレーションしているのです。以下、画像出力にガンマ2.2の曲線を掛け、リニアな画像を得ることを、便宜的に「ガンマ・デコード」と呼びます。つまりPC本体からモニタに信号が送られる際にガンマ・エンコードされて送られ、モニタ内で、物理的に(CRT)、あるいは論理的に(LCD)でガンマ・デコードされ、モニタの最終出力がガンマ1.0の画像となるわけです。

f:id:yasuo_ssi:20201106000646j:plain

図5. ガンマ (TRC)・エンコード/デコード

 また、ガンマ2.2というのはあくまでもCRT (およびCRTをエミュレートしている一般的なLCDディスプレイ) の話であり、他の出力デバイスではガンマが異なります。LCDは本来ならばガンマ1.0での出力が可能ですし、かつてiMacがガンマ1.8を採用していたのは、CRTの出力ではなく、Apple製のプリンタのガンマが1.8だったのでそれに合わせたものです(ですので、CRT時代のMacにおけるモニタはガンマを2.2→1.8に補正するためにデバイスドライバで or 物理的に何らかの変換を行っていたのではないでしょうか?)。ただ、今PCでのガンマが2.2に統一されているというのはモニタの出力を基準にしているということです。 

ガンマ・エンコード前のデータとデコード後のデータは同じか?

 アナログTV放送 & CRTのように、アナログ的にガンマ・エンコード/デコードされる場合は、連続量ですので、変換の際 S/N比が下がるというような問題を除けば、画像に差はないはずです。

 デジタルの場合は若干事情が異なります。特にデータが整数処理され、諧調数が決まっている場合は、ガンマ・エンコード前の諧調は物理的(光学的)に均等であっても、ガンマ・デコード後の諧調は、同じリニアであっても、諧調は物理的に不均等になり、暗部で諧調の目が細かく、明部で諧調の目が粗く(物理的にトーンジャンプが起きる)なります。但し、後で論じるように知覚的には諧調は均等になります。また各ピクセルのRGBの値は大きく変わることはありませんが、諧調数が決まっているため、丸め誤差によって若干の変化が生じます。

 なお、Mac OSの場合、OSがカラーマネジメントを行っています。ですので、おそらくOSがすべてレンダリングを行っているのではないかと思います。それに対しWindowsでは、VIsta以降WCS (Windows カラーマネジメント システム) というカラーマネジメント機構を準備しましたが、それを使うかどうかはアプリケーションソフトに任されていて、WCSを使うソフトもあれば、独自にカラーマネジメントを適用してレンダリングするソフトもあったり、カラーマネジメントを行わずにレンダリングするソフトがあったり (例えば一部Webブラウザソフトなど) とまちまちです。印刷業界やプロの写真家でMac OSのPCを使っているケースが多いのは、これが理由ですが*2、まともな画像処理ソフトを使っている限り、Windowsでも遜色はないはずです。

 ところで、上の図は明暗を1.0~0で表しましたが、これが明暗が255~0の数字で表されると考えるとどうなるでしょう。0.218の明るさがガンマ・エンコードを掛けて0.5に変換されるということは本来データ上 55.6 の明るさのドットを モニタで 55.6 の明るさで出力させるために、127.5 に明るくしなければいけない、ということです。

 さらに、0~255の値が整数しか取れないと考えたらどうでしょう(つまり8bit画像、256諧調)。そうするとガンマ・エンコードした画像の場合は、物理的に暗いところから20%弱 (いわゆる18%中間グレー点) までの明るさに対し、128の諧調(つまり諧調の半分)を割り当てることになります。そして、残りの約20%~100%の明るさに対して128の諧調(残りの半分)を割り当てることになります。つまり、暗い部分に諧調をきめ細かく割り当て、明るいほうには諧調を粗く割り当てることになります。暗い20%に明るい80%の4倍多く諧調を割り当てる計算です。そして、ウェバー=フェヒナーの法則によれば、人間の視覚は知覚的に暗いほうが敏感で、明るいほうが鈍感ですので(しかもたまたまウェーバー=フェヒナーの反応曲線もガンマ補正カーブ(TRC)と一致します)、敏感な暗いほうにたくさんの諧調を割り当てることは知覚的にも理にかなっています*3。リニアな画像だと、敏感な暗い部分に相対的に少ない諧調しか割当たりません (知覚上半分までの暗さに、全体の約2割の諧調しか割当たらない)。したがって離散量であるデジタル画像データで、かつ8bitなど諧調が限られている場合、ガンマ補正を掛けることは望ましいことになります (アナログは連続量なのでこういう問題は起こりません)。ですので、暗い部分に多めの諧調を割り当てるためには、ただ単に、モニタに信号を渡す際に一時的にガンマ補正を掛けるのではなく、元のデータからガンマ補正がかかっていたほうが望ましい、ということになります。

f:id:yasuo_ssi:20201106110229j:plain

図6. ガンマ補正を掛けた画像ファイルで保存する場合
人間の敏感な暗い部分により多くの諧調を割り当てられるのでメリットあり

 上の図で、画像入力デバイスとは、光学的アナログ画像をデジタル化するデジタルカメラやスキャナ等、画像変換ソフトとは、すでにリニアなデジタル画像が用意されている場合、それをガンマエンコードされた画像形式 (例えば Jpeg) に変換するソフトを指します。また、上の図、レンダリングソフトのところで、「ガンマ無変換」とあるのは、たまたま非リニアな画像と出力画像のガンマが一致する場合のみで、昔のMacのようにガンマが1.8であれば、そこでガンマ変換が行われます。またモニタ出力ではなくプリンタ出力の場合は、プリンタごとに、さらにはプリンタが使う用紙ごとにすべてガンマが異なりますので、当然ここでガンマ変換が入ります。このような画像ファイルのガンマや出力装置ごとのガンマの違いは、原則カラープロファイルに記録されており、それを見て各ソフトウェアはエンコード/デコードするガンマカーブを決めています。従ってカラープロファイルがないと、画像ファイルを正しく解釈して、最終的にガンマ1.0になるような出力をすることができなくなってしまいます。但し、Jpegに関してはデフォルトでsRGB式TRCを使うとされていますので、プロファイルがない場合はガンマ2.2(近似値)の非リニア画像として扱われます。

 ところで、カラーの諧調ビット数が少ない場合諧調面で有利なガンマ補正ですが、一点問題があります。もともと変換元のリニア画像のbit数が少ないと(例えば8bit)、それにガンマ補正を掛けた場合、もともと諧調が全体の20%しかない暗さの部分の諧調を無理に50%の領域まで拡張するので、暗い部分の諧調が明らかに粗くなり、トーンジャンプが起こります。本来あるべき諧調の2/5の諧調に減ってしまいます。ですので、8bitのTRC適用データを作る場合でもオリジナルデータは12bitなり14bitが必要なのです。一般的なデジカメの撮像素子であるベイヤー型CMOSも最低12bit程度で出力しているはずです*4

つまり...

リニアな8bitの画像を非リニア8bit画像に変換すること
→モニタ(CRT)の偏差に合わせて正しいリニアな画像をモニタに映す以外の意味はない (むしろ画像は劣化)


リニアな12-14bitの画像を非リニア8bit画像に変換(し保存)すること
→モニタに正しいリニアな画像を映すだけでなく、少ないデータ量で、見た目はほぼ変わらない、効率的な画像データを作れる意味がある

 同様に、画像の露出を補正するなど大きくカラー補正を行う場合は、元ファイルが8bitですとトーンジャンプが起こりやすくなります。ですので、なるべくRawから補正・編集を行うか、あるいは16bit TIFFファイルから編集を行った方が諧調の保存という観点から良いのです。デジカメで撮って出しなら、Jpeg保存でも構わないが、編集を前提ならRaw保存した方が良い、と言われるのはそのためです。

  なお、明暗が0~255で表される場合でも、諧調に小数を使える場合、あるいは16bitで明暗を0-65535で表す場合は、もともと人間が識別不能なほど諧調が非常に多く細かいので、暗いほうに多めに諧調が充てられていなくても問題ありません。12bitで4096諧調、14bitで16384諧調、16bitで65536諧調となりますので、人間の知覚的に半分の明るさより暗い部分と明るい部分を比較すると、リニアの画像では暗い半分の諧調が、明るい半分より手薄 (まばら) になりますが、それでも人間には区別できないほどきめ細かい諧調になるからです。ですので、リニアなままデータを保存する場合、多くは16bit形式が採用されるのはそのためです。またRaw画像は、基本CMOSやCCDから出された生データで、多くはリニアな12~14bitで保存されていると思います。

f:id:yasuo_ssi:20201106113230j:plain

図7. リニア多ビット画像で保存する場合

諧調が豊富なので、暗い領域に無理に諧調を多く割り当てなくても良い

 上の図の具体的なケースとしては、例えば、保存していたRawファイルを、Raw画像が表示できるビュアーや現像ソフトなどでディスプレイに表示する場合です。Rawファイルの特徴は常にリニアな画像だということです。ただ、Raw以外の多ビットの画像ではTRC (ガンマ・エンコード) を掛けて非リニアで保存する場合も多いです。TIFFファイルの場合、規格上どのTRCでも保存することができます。但しカラープロファイルにどのTRCを使ったのか明示しておく必要があります。

 ここで重要なことは、使うガンマ補正曲線は同じ (ガンマ 1/2.2に近似したsRGB式知覚的ガンマ補正カーブ) でも、レンダリングソフトがモニタ(ディスプレイ)に画像データを渡すときに非リニアで渡す理由と、あらかじめ画像を非リニアで保存しておく理由が異なるということです。前者は、モニタで正しくリニアな画像を表示させるため、後者は、離散的なデジタル画像データにおいて人間の視覚が敏感な暗い領域に多くの諧調を割り当てるためです。

 なお、以上の2つの目的で使われるガンマ補正カーブのことをTRC (Tone Reproduction Curve) と言います。

 これ以外に、画像の明るさを明るくしたり暗くしたりするために任意のガンマ補正カーブを掛けて調整するということもあります。これを含めると単に「ガンマ補正」といっても、3つの異なる意味、機能があるということです。これがごっちゃになって、ガンマ理解を難しくしています。

 

ファイルの保存に関して整理しておくと、

 (※但し画像ソフトやOSが正しくカラーマネジメントを行っているという前提)

非リニアな(ガンマ補正を掛けた)RGBデータで画像を保存 → 
 画像ソフトで開くと、モニタ上には物理的に暗部の諧調が密で明部の諧調が粗なリニア(ガンマ1.0)な画像を出力
 (=知覚的には、明暗均等な諧調に見える)

リニアな(ガンマ1.0の補正を掛けない)RGBデータで画像を保存 → 
 画像ソフトで開くと、モニタ上には物理的に諧調が明暗均等なリニア(ガンマ1.0)な画像を出力
 (=知覚的には、諧調は暗部がまばらで明部が密に見える)

 明暗のどこで諧調がまばらで密かという違いはあるものの、いずれにせよ、画像を扱うソフトウェア(or OS)のカラーマネジメントがきちんと働いていることを前提とすれば、常にモニタ出力はガンマ1.0の画像になるはずです。Mac OSではOSレベルでカラーマネジメントが行われていますが、Windowsはアプリケーションソフト任せになっており、かつ、カラーマネジメントが行われていない場合は非リニアなsRGBであるものとして扱い表示することになっています。例えばIrfanVIewなどは、初期設定のままではカラーマネジメントが行われていないので、リニアな画像は、モニタの減衰効果の影響を受けて、常に暗く表示されます*5。つまり、カラーマネジメントが働かないPC(or ソフト)上では、リニア画像は、リニアにもかかわらずモニタ上でリニアに表示されません。本来人間に見せるべき画像はリニアだと考えると、リニアで保存されている画像データがディスプレイ上で薄暗く表示されること自体がそもそも誤りと言えます。このようなカラーマネジメントの行われていないソフトウェアの存在が、また、リニアな画像とは薄暗いものであるという誤解を広げていると思います。

⇒ 次回「ガンマ補正理解メモ(2) - 画像処理ソフトとガンマ補正」に続く

  

*1:結局、ガンマ・エンコードされたRGB画像データも、画像ソフトやOS、そしてドライバによって、ガンマ・デコードされ、ガンマ1.0に直されてモニタやプリントに出力されます。ただ、いろいろな解説では、当たり前な「ガンマ・デコードされ」という部分が省略され議論されるので、人に直接見せる画像は、ガンマ・エンコードされた画像かと誤解していたのです。専門家は当たり前と思ってスルーしがちな議論ですので、意外とこの点を分かりやすく説明しているサイトは少ないです。ですので、私と同じ誤解をされている方はかなり多いのではないでしょうか。というより、プロの写真家やリタッチャーなどでも半可通な理解をしているのではないかと疑われるケースさえ見受けるので、むしろ今の状況では誤解するなという方が無理です。例えば次のディスカッションの質問者は明らかに私と同じ誤解をしています。回答者の中でも半可通のまま回答している人がいます。Elle の言っていることはまともですが...

discuss.pixls.us

 また、読んでいてピンと来ない解説も、最終出力はリニアでなければならない、ということを頭において読むと、あっ、そういうことかと理解できることが多いです。ただ中には半可通の解説もあるので見極める必要がありますが...

*2:谷口泉,2011,『カメラマンのためのカラーマネージメント術』翔泳社: 114-5

*3:こちらのブログに詳しい説明が出ています。

qiita.com

*4:例えば以下をご覧ください。

www.sony.co.jp

*5:以下の記事を参照。IrfanViewカラーマネジメントを有効にしても、簡易的なものなので、かえって問題になる場合もあります。

blog.livedoor.jp