写真の物理学 ㉝ ガンマとトーンカーブの知覚心理物理学

Share
📐
写真の物理学シリーズ ㉝
このシリーズでは、写真にまつわる現象を物理学の言葉で記述する。「なんとなくそうなる」を「なぜそうなるか」に変換することが目的である。

デジタルカメラのセンサーは光を線形に記録するが、そのまま表示すると人間の目には不自然に暗く見える。原因は輝度知覚が物理的光強度に対して強い圧縮的非線形性を持つことにある。本稿ではウェーバー・フェヒナーの法則からsRGBの伝達関数、S字トーンカーブの設計思想までを知覚心理物理学の観点で導出する。

ウェーバーの法則

19世紀ドイツの生理学者エルンスト・ハインリヒ・ウェーバーは、刺激の弁別閾(丁度可知差異、JND: Just Noticeable Difference)が、元の刺激強度に比例することを発見した。暗い部屋でろうそくを1本追加すれば違いに気づく。だが100本のろうそくが灯る部屋で1本追加しても、誰も気づかない。

数式で書けば単純だ。刺激強度 $I$ に対する弁別閾 $\Delta I$ の比は一定値 $k$ をとる。

$$ \frac{\Delta I}{I} = k $$

この $k$ をウェーバー比と呼ぶ。視覚における輝度のウェーバー比は、中程度の輝度範囲でおよそ0.01から0.02である。つまり輝度が1%から2%変化すれば、人間はその違いを検出できる。この弁別閾と空間周波数の関係については視覚の知覚心理物理学で詳述した。

ウェーバーの法則は「どれだけ変化すれば気づくか」を記述するが、「どれだけ明るく感じるか」は記述しない。後者を定式化したのがグスタフ・フェヒナーだ。

フェヒナーの法則

フェヒナーはウェーバーの法則を出発点にして、知覚量 $S$ と刺激強度 $I$ の関係を導出した。弁別閾 $\Delta I$ の1ステップが知覚の1単位に対応すると仮定すると、ウェーバーの法則 $\Delta I / I = k$ の両辺を積分することで次の関係が得られる。

$$ S = a \ln I + b $$

ここで $a$ と $b$ は定数である。知覚量は刺激強度の対数に比例する。これがフェヒナーの法則だ。

この対数関係は直感的にも理解できる。輝度が1から2に変わるときの知覚的な「明るさの変化」と、100から200に変わるときの知覚的な「明るさの変化」は、物理的な差(1と100)が100倍違うにもかかわらず、主観的にはほぼ同程度に感じられる。どちらも「2倍になった」からだ。対数関数は、まさにこの性質を持つ。

写真の露出をEV(Exposure Value)で表す慣習も、この対数的知覚を反映している。露出の統合と逆数則で導出したように、1EVの差は光量の2倍に対応するが、知覚的にはどのEV値でも「1段」は同じ程度の明るさの変化として感じられる。白い壁に近づいても露出が変わらない物理学的理由で扱った露出の物理もまた、この対数的な感覚の上に成り立っている。

スティーヴンスのべき法則

1957年、ハーバード大学の心理学者S.S.スティーヴンスは、フェヒナーの対数法則に異議を唱えた。スティーヴンスはマグニチュード推定法(被験者に刺激の主観的な大きさを数値で報告させる方法)を用いて、知覚量 $\psi$ は刺激強度 $I$ のべき乗に比例するという関係を提唱した。

$$ \psi = k \cdot I^{\beta} $$

指数 $\beta$ は感覚のモダリティによって異なる。輝度知覚の場合、暗所で提示された孤立パッチに対する $\beta$ はおよそ0.33である。この値は多くの独立した実験で再現されている。

$\beta = 0.33 \approx 1/3$ という値の意味を考える。物理的な輝度が8倍になったとき、知覚的な明るさは $8^{1/3} = 2$ 倍にしかならない。輝度を1000倍にしても、明るさの感覚は $1000^{1/3} = 10$ 倍だ。視覚系は、膨大なダイナミックレンジの光環境を、扱いやすい範囲に圧縮している。

フェヒナーの対数法則とスティーヴンスのべき法則は、数学的には異なる関数形を持つ。しかし実用的な輝度範囲では、両者の予測は近い。対数関数 $\ln I$ とべき関数 $I^{1/3}$ は、数オーダーの範囲でよく似た曲線を描く。どちらが「正しい」かという議論は今も続いているが、本稿にとって重要なのは結論が一致する点だ。人間の輝度知覚は、物理的な光強度に対して強い圧縮的非線形性を持つ。

CRTのガンマ特性

ここからは、この知覚の非線形性がディスプレイ技術とどう交差したかを見る。

ブラウン管(CRT)ディスプレイは、電子ビームを蛍光体に衝突させて発光する。その発光輝度 $L$ は、入力電圧 $V$ に対して次のべき乗関係を示す。

$$ L \propto V^{\gamma} $$

CRTの固有ガンマは物理的な特性としておよそ2.5であった。これは電子銃の非線形な電圧-電流特性に由来する。入力電圧を線形に増加させても、輝度は線形には増加しない。低い電圧域では輝度の立ち上がりが遅く、高い電圧域で急激に増加する。

この非線形性は、一見すると厄介な欠陥に見える。だが結果的に、これが人間の知覚と奇妙なほどよく噛み合った。

ガンマと知覚的均等性の一致

人間の輝度知覚がべき指数 $\beta \approx 1/3$ の圧縮特性を持つことを思い出してほしい。知覚的に均等な階調を符号化するには、物理的な輝度を圧縮して記録するのが効率的だ。スティーヴンスのべき指数に忠実に従えば、最適な符号化ガンマは約0.33($\approx 1/3$)となる。

一方、CRTの表示ガンマは約2.5だ。CRTの非線形応答を相殺するためには、その逆数に近い符号化ガンマ約0.45($\approx 1/2.2$)を使えばよい。知覚最適値の0.33とCRT補償値の0.45は数値としては異なるが、同じオーダーに収まる。これが偶然の一致の核心だ。符号化ガンマ0.45で圧縮された信号がCRTを通ると、全体のガンマは $0.45 \times 2.5 = 1.125$ となり、ほぼ線形に近い。ただし完全に1.0ではなく、わずかにコントラストが強調される。これは暗い視環境(一般的なテレビ視聴環境)における視覚のコントラスト感度低下を補償する効果がある。

この「偶然の一致」は工学的に極めて都合がよかった。知覚に最適な符号化を行えば、CRTでの表示もおおむね正しくなる。追加のハードウェア補正なしに、限られたビット深度で知覚的に均等な階調再現が実現した。

ディスプレイの物理学で扱ったように、現代のLCDやOLEDディスプレイはCRTのような固有のべき乗応答を持たないが、互換性を保つために電子回路でガンマ2.2の応答をエミュレートしている。CRTは消えたが、その遺産はすべてのディスプレイに残っている。

sRGBの伝達関数

1996年、ヒューレット・パッカードとマイクロソフトは、インターネット上の標準色空間としてsRGBを共同提案した。色空間の数学で述べたように、1999年にIEC 61966-2-1として国際規格となったこの規格は、今日のウェブ画像、デジタルカメラ出力、オペレーティングシステムのデフォルト色空間として事実上の標準である。

sRGBの伝達関数(OETF: Opto-Electronic Transfer Function)は、単純なべき乗関数ではない。低輝度域での線形セグメントと、それ以上の輝度域でのべき乗セグメントを組み合わせた区分関数である。線形化された値 $C_{\text{linear}}$(0から1の範囲)からsRGB値 $C_{\text{sRGB}}$ への変換は次のとおりだ。

$$ C_{\text{sRGB}} = \begin{cases} 12.92 \cdot C_{\text{linear}} & (C_{\text{linear}} \leq 0.0031308) \\ 1.055 \cdot C_{\text{linear}}^{1/2.4} - 0.055 & (C_{\text{linear}} > 0.0031308) \end{cases} $$

べき乗部分の指数は $1/2.4 \approx 0.4167$ であり、「ガンマ2.2」という通称は近似にすぎない。低輝度域に線形セグメントを設けている理由は、べき乗関数が原点付近で無限大の勾配を持ち、暗部のノイズが過度に増幅される問題を回避するためだ。この区分関数により、sRGBの実効的なガンマはおよそ2.2となり、CRT時代からの互換性が保たれている。

写真におけるクロマサブサンプリングで述べたように、デジタル画像の符号化は常に人間の知覚特性を前提に設計されている。色差信号の間引きが許容されるのは色の空間解像度に対する人間の感度が低いからであり、ガンマ符号化が有効なのは輝度知覚が非線形だからだ。知覚の特性を知ることが、符号化の設計を理解する鍵になる。

トーンカーブの物理的意味

トーンカーブとは、入力値(センサーが記録した線形光量)から出力値(ディスプレイに送る信号値)への写像を定義する関数である。ガンマ補正は最も単純なトーンカーブの一形態にすぎない。

RAW現像ソフトで操作するトーンカーブは、この写像をユーザーが任意に調整する機能だ。現像ソフトを選び直すで触れたように、RAW現像における色やトーンの「味付け」の違いは、各ソフトウェアが適用するデフォルトのトーンカーブの差異に大きく起因している。

線形のまま表示すると何が起きるかを考える。ダイナミックレンジとビット深度で導出した通り、14ビットRAWデータ(16,384段階)のうち、最も明るい1EVの区間に全データの半分(8,192段階)が割り当てられる。これは線形符号化の数学的必然だ。光量が2倍になれば値も2倍になるのだから、上位半分の区間は全範囲の半分を占める。逆に、最も暗い1EVの区間にはわずか1段階しか割り当てられない。

人間の目は暗部の微妙な差異にも敏感であるにもかかわらず、線形符号化では暗部にほとんどビットが配分されない。トーンカーブ(ガンマ補正を含む)の本質的な役割は、この配分を知覚に合わせて再配分することにある。この再配分の具体的な信号処理パイプラインについてはRAW現像の信号処理で扱った。

S字トーンカーブの設計思想

基本的なガンマカーブは単調な圧縮関数だが、写真の実務で多用されるのはS字型のトーンカーブだ。S字カーブは中間調のコントラストを高め、シャドーを持ち上げ、ハイライトを圧縮する。

S字カーブの設計思想は、知覚心理学の知見に基づいている。人間の視覚系は、絶対的な輝度よりも輝度の局所的な変化(コントラスト)に強く反応する。中間調は画像内で最も面積が大きく、人間が最も注意を払う領域だ。そこのコントラストを高めることで、限られた出力レンジの中で知覚的なインパクトを最大化する。

シャドーの持ち上げは、暗部のディテールを救済する。線形データでは暗部の情報が圧縮されているため、表示時に持ち上げなければ黒に埋もれてしまう。ハイライトの圧縮は、白飛びを防ぎつつ明部の階調を保持する。

数学的には、S字カーブはシグモイド関数の一種として記述できる。単純な形としてロジスティック関数がある。

$$ f(x) = \frac{1}{1 + e^{-a(x - x_0)}} $$

ここで $a$ は傾きの急峻さ、$x_0$ は変曲点の位置を制御するパラメータだ。$a$ を大きくすればコントラストが強くなり、$x_0$ をずらせば明暗のバランスが変わる。実際のRAW現像ソフトでは、スプライン補間によるユーザー定義のカーブが使われることが多い。

フィルムの特性曲線との対応

特性曲線の物理的意味で詳述した、銀塩フィルムの濃度 $D$ と露光量 $H$ の関係を示すハーター・ドリフィールド曲線(H-D曲線、特性曲線)は、本質的にS字型である。

横軸に $\log H$(露光量の対数)、縦軸に濃度 $D$ をとると、曲線は3つの領域に分かれる。低露光域の足部(toe)では、傾きが緩やかに立ち上がる。中間露光域の直線部では、$D$ は $\log H$ にほぼ比例して増加する。この直線部の傾きがフィルムのガンマ($\gamma$)であり、コントラスト特性を定義する。高露光域の肩部(shoulder)では、傾きが減少し、最終的に最大濃度($D_{\text{max}}$)に漸近する。

現像の仕組みで解説した現像反応の化学と、この特性曲線の形状は密接に関係している。現像液の濃度、温度、時間を変えることでガンマ(直線部の傾き)を制御できる。

デジタル現像におけるS字トーンカーブは、このフィルムの特性曲線が持つ知覚的に好ましい応答を模倣している。足部の緩やかな立ち上がりはシャドーの圧縮を、肩部のロールオフはハイライトの圧縮を再現する。フィルムが100年以上かけて最適化した階調再現を、デジタルでは数式と計算で再現しているのだ。

コントラスト知覚と同時対比

人間の輝度知覚は、対象そのものの絶対輝度だけで決まるのではない。周囲の輝度によって大きく変調される。この現象が同時対比(simultaneous contrast)だ。

同じ灰色のパッチでも、黒い背景に置けば明るく見え、白い背景に置けば暗く見える。これは錯覚ではなく、視覚系の正常な動作だ。人間の眼の光学で扱った網膜の側抑制(lateral inhibition)機構が、隣接領域との輝度差を強調するように働いている。

この特性は、トーンカーブの設計に重要な示唆を与える。画像全体の平均輝度や局所的な輝度分布によって、同じトーンカーブでも知覚的な印象が大きく変わりうるということだ。晴天の屋外シーンと薄暗い室内シーンでは、最適なトーンカーブの形状が異なる。人はなぜ夕方の光で立ち止まるのかで述べた、光環境が人間の知覚と感情に与える影響の背景にも、この視覚系の適応特性がある。

現代のRAW現像ソフトやカメラ内処理が採用するローカルトーンマッピング(局所的なトーン調整)は、同時対比の知見を応用している。画像の各領域の輝度分布に応じてトーンカーブを適応的に変化させることで、ハイライトのディテールとシャドーのディテールを同時に保持する。

ゾーンシステム

アンセル・アダムスとフレッド・アーチャーが1940年前後に体系化したゾーンシステムは、知覚心理物理学を写真の実務に翻訳した方法論だ。

ゾーンシステムはシーンの輝度範囲をゾーン0(純黒)からゾーンX(純白)までの11段階に分割する。各ゾーンは1EVの差、すなわち輝度の2倍に対応する。この等間隔の区切りは、知覚的にほぼ均等な明るさのステップを生む。フェヒナーの法則を思い出してほしい。対数スケールで等間隔ということは、知覚的に等間隔ということだ。

ゾーンVが中間灰(18%グレー)に対応する。反射率18%が選ばれた理由は、これが対数スケールの中間点にあたるからだ。完全な白(反射率100%)の $\log$ 値と完全な黒(実用上の最低反射率)の $\log$ 値の中間が、およそ18%の位置になる。

アダムスの方法論の核心は「視覚化」(visualization)にある。撮影前にシーンの各部分をどのゾーンに配置するかを決定し、露出と現像を制御してその配置を実現する。これは、シーンの輝度分布をトーンカーブ(フィルムの特性曲線と現像条件の組み合わせ)を介して最終プリントのトーン分布に変換する行為にほかならない。

デジタル写真におけるヒストグラムの読み方やETTR(Expose To The Right)の考え方は、ゾーンシステムの現代的な変奏だ。動画領域ではLog収録とシネマカラーサイエンスで扱ったLog符号化が、同じ問題に対する別の解を与えている。線形センサーの特性を理解した上で、最終出力の階調を視覚化して露出を決定する。道具は変わったが、知覚に基づいて露出と階調を制御するという本質は変わっていない。

まとめ

ガンマ補正とトーンカーブは、技術的な便宜のために発明されたものではない。人間の視覚系が光をどう知覚するかという心理物理学の事実を、画像の符号化と表示に反映する仕組みだ。

ウェーバーとフェヒナーが発見した対数的な知覚特性。スティーヴンスが精緻化したべき法則。CRTの物理的なべき乗応答との偶然の一致。sRGBの区分伝達関数による実装。フィルムの特性曲線が持つS字応答の知覚的な妥当性。同時対比が示す文脈依存の輝度知覚。ゾーンシステムによる実践的な応用。

これらはすべて、ひとつの事実に収束する。人間の視覚系は線形ではない。そして、その非線形性を正しく理解し、正しく補償することが、写真における階調再現の基盤である。カメラのセンサーが記録した線形の光は、人間の知覚という非線形のフィルターを通過して初めて「画」になる。ガンマとトーンカーブは、その通過点に立つ翻訳者だ。

Read more

Dependabotの対応が面倒なのでRenovateを導入する

Dependabotくんはある程度の依存関係の更新を通知してくれるが、山のようにprojectを抱えているとなんとも痒いところに手が届かない。 ということで、Renovateを使ってみる。 Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.GitHub ここからGitHub Appを入れる。 あとは、指示に従ってポチポチするだけで、超かんたんだった。 感想 自動化最高。

By Sakashita Yasunobu

nodejsのバグを見つけたのでPRを投げてみた

概要 要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。 バグ自体は既知のものだったようで、修正がされていました。 test_runner: infinite loop in FileTest#drainRawBuffer when child stdout contains FF 0F followed by large size bytes · Issue #62693 · nodejs/nodeVersion v25.9.0 (also reproduced on v24.14.1 LTS, v22.21.0 LTS, v23.4.0) Platform Darwin 25.

By Sakashita Yasunobu
青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu