写真の物理学 ㉒ 色とは何か

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

色は波長ではなく、分光分布が三種の錐体細胞を経て三つの数値に圧縮された知覚現象である。この圧縮過程をCIE 1931表色系の等色関数で定式化すると、メタメリズムや色度図の構造が必然的に導かれる。本稿では、分光分布から三刺激値・色度座標を経て、写真の色再現に至る物理的基盤を構築する。

分光分布

光の物理的な記述は、波長ごとのエネルギー分布で与えられる。これを分光分布(Spectral Power Distribution, SPD)と呼ぶ。SPDは波長 $\lambda$ の関数 $S(\lambda)$ であり、各波長帯における放射パワーの密度を表す。単位は W/nm だ。

太陽光と大気の物理学で詳述するように、太陽光のSPDは可視光全域にわたるなだらかな連続スペクトルである。蛍光灯のSPDは水銀の輝線スペクトルと蛍光体の連続スペクトルが重畳した鋭い山を持つ。LEDのSPDは青色LEDの鋭いピークと蛍光体の広いピークの組み合わせで構成される。

電磁波としての光で光の波動としての性質を記述したが、物理学の立場からは、SPDがその完全な記述だ。二つの光がまったく同じSPDを持つなら、物理的に区別できない。しかし逆は成り立たない。異なるSPDが人間には同じ色に見えることがある。ここに物理と知覚の決定的な乖離がある。

錐体細胞の分光感度

人間の眼の光学で詳述する網膜には、色覚を担う三種類の錐体細胞(cone cell)が存在する。それぞれの分光感度のピーク波長にちなんで、S錐体(Short、約420 nm付近)、M錐体(Medium、約530 nm付近)、L錐体(Long、約560 nm付近)と分類される。

各錐体は特定波長だけに反応するのではなく、広い波長範囲にわたる感度曲線を持つ。特にM錐体とL錐体の感度曲線は大きく重複している。この重複が微妙な色の弁別を可能にすると同時に、後述するメタメリズムの物理的基盤でもある。

SPD $S(\lambda)$ を持つ光に対する各錐体の総応答は

$$ L = \int S(\lambda)\,\bar{l}(\lambda)\,d\lambda, \quad M = \int S(\lambda)\,\bar{m}(\lambda)\,d\lambda, \quad S = \int S(\lambda)\,\bar{s}(\lambda)\,d\lambda $$

で計算される。 $\bar{l}(\lambda)$, $\bar{m}(\lambda)$, $\bar{s}(\lambda)$ はそれぞれの錐体の分光感度関数だ。この三つの値が色知覚の入力信号である。SPDという無限次元の情報が、三つのスカラー値に圧縮される。情報の大部分は捨てられる。この不可逆な圧縮こそが、色の本質だ。

なぜ三種類なのか。これは進化的な帰結であり、物理的な必然ではない。多くの鳥類は四種類の錐体(四色型色覚)を持ち、紫外線領域まで知覚できる。シャコの一種は16種類もの光受容体を備える。一方、多くの哺乳類は二種類の錐体(二色型色覚)しか持たない。人間の三色型色覚はその中間であり、霊長類が果実の熟度を判別するために進化したとする説が有力だ。

あなたには何も見えていないで論じたように、知覚は世界のコピーではなく、生存に必要な情報を抽出するために進化が設計したフィルターである。三色型色覚は物理的な光を忠実に再現するためではなく、環境中の有用な差異を検出するために存在する。

等色実験とカラーマッチング関数

ヤング=ヘルムホルツの三色説

色覚の三色理論は、トマス・ヤングが1802年に着想し、ヘルマン・フォン・ヘルムホルツが1850年代に精緻化した。三種類の受容器の応答の組み合わせですべての色を表現できるという仮説は、約150年後に錐体細胞の分光感度の直接測定によって裏づけられた。

この理論の工学的な帰結は明快だ。任意の色は、適切に選んだ三つの原刺激の混合で再現できる。これが等色実験(color matching experiment)の基礎になる。

ライト=ギルドの実験

1920年代後半から1930年代初頭にかけて、W. デイヴィッド・ライトとジョン・ギルドがそれぞれ独立に等色実験を実施した。ライトは10名、ギルドは7名の観察者を用いた。

実験の基本構成は共通している。二分割された視野の一方にテスト刺激(ある波長の単色光)を提示し、もう一方に三つの原刺激光の混合光を提示する。ただし、両者が用いた原刺激は異なる。ライトは650 nm(赤)、530 nm(緑)、460 nm(青)付近の単色光を原刺激とし、ギルドはNPL(英国国立物理学研究所)の標準に基づくフィルター光を原刺激とした。観察者は三原刺激の強度を調整し、テスト刺激と視覚的に区別できなくなるようにマッチングする。この操作を可視光全域の波長について繰り返す。

CIEは両者のデータを統合する際、赤700 nm、緑546.1 nm(水銀輝線)、青435.8 nm(水銀輝線)を共通の原刺激として採用し、各実験結果をこの座標系へ線形変換した。

結果として得られるのが、カラーマッチング関数 $\bar{r}(\lambda)$, $\bar{g}(\lambda)$, $\bar{b}(\lambda)$ だ。波長 $\lambda$ のテスト刺激を再現するために必要な三原刺激のそれぞれの量を、波長の関数として記録したものである。

ここで重要な事実がある。一部の波長域(特に青緑域の490〜520 nm付近)では、三原刺激をどう調整してもテスト刺激と完全にマッチングできない。この場合、原刺激のひとつをテスト刺激側に加えることでマッチングが成立する。数学的には、テスト刺激側に加えた原刺激の量を負の値として記録する。カラーマッチング関数 $\bar{r}(\lambda)$ が一部の波長域で負の値を取るのは、この操作を反映している。これは実験の欠陥ではなく、三原色加法混合の原理的な限界だ。

CIE 1931 標準観測者

1931年、国際照明委員会(CIE)はライトとギルドの実験結果を統合し、標準的な色覚を代表する「CIE 1931 2° 標準観測者」を定義した。2°は実験で用いた視野角であり、中心窩に含まれる錐体のみが関与する条件に対応する。

1964年には10°視野の標準観測者(CIE 1964 補助標準観測者)も策定された。10°視野は中心窩の外側も含むため、錐体の分布が異なり、等色関数も若干異なる。面積の大きな色試料を扱う工業分野では10°観測者が用いられることが多い。

CIE XYZ表色系と三刺激値

RGB表色系からXYZ表色系への変換

CIE 1931 RGB表色系のカラーマッチング関数は負の値を含む。計算上の不便を解消するために、CIEは仮想的な三原刺激 X, Y, Z を定義し、線形変換によってすべての等色関数が非負になる新しい表色系を構築した。これがCIE 1931 XYZ表色系である。

変換の設計方針は三つある。

  1. 等色関数 $\bar{x}(\lambda)$, $\bar{y}(\lambda)$, $\bar{z}(\lambda)$ がすべての波長で非負
  2. $\bar{y}(\lambda)$ が明所視の分光視感効率 $V(\lambda)$ と一致する(Yが明るさの尺度になる)
  3. 等エネルギースペクトルに対して $X = Y = Z$ となる

RGB等色関数からXYZ等色関数への変換は線形変換行列で与えられる。

$$ \begin{pmatrix} \bar{x}(\lambda) \\ \bar{y}(\lambda) \\ \bar{z}(\lambda) \end{pmatrix} = \mathbf{M} \begin{pmatrix} \bar{r}(\lambda) \\ \bar{g}(\lambda) \\ \bar{b}(\lambda) \end{pmatrix} $$

この変換は色の見えを変えない。座標系の回転と拡大に相当する操作であり、色の等価関係(どの二つのSPDが同じ色に見えるか)は保存される。

三刺激値の計算

任意のSPD $S(\lambda)$ を持つ光刺激に対する三刺激値 $X$, $Y$, $Z$ は、SPDと等色関数の積の波長積分で計算される。

$$ X = k \int_{380}^{780} S(\lambda)\,\bar{x}(\lambda)\,d\lambda $$

$$ Y = k \int_{380}^{780} S(\lambda)\,\bar{y}(\lambda)\,d\lambda $$

$$ Z = k \int_{380}^{780} S(\lambda)\,\bar{z}(\lambda)\,d\lambda $$

$k$ は正規化定数だ。自発光体の場合は通常 $k = 683$ lm/W とし、$Y$ が光束(ルーメン)に対応する。物体色の場合は、照明光のSPDを $I(\lambda)$、物体の分光反射率を $R(\lambda)$ として $S(\lambda) = I(\lambda)\,R(\lambda)$ を用い、完全拡散反射面に対して $Y = 100$ となるように $k$ を定める。

実用上の計算は連続積分ではなく、5 nm間隔のデータに対する離散的な重み付き和で行われる。

$$ X = k \sum_{\lambda} S(\lambda)\,\bar{x}(\lambda)\,\Delta\lambda $$

三刺激値の物理的意味は明快だ。SPDという無限次元の情報から、人間の色覚にとって意味のある三つの数値を抽出する操作である。$Y$ は光源の明るさ(輝度に比例)を表し、$X$ と $Z$ は色みの方向を表す。

メタメリズム

メタメリズム(metamerism、条件等色)とは、異なるSPDを持つ二つの光刺激が同一の三刺激値を生じ、したがって人間には区別できない色として知覚される現象だ。

$$ S_1(\lambda) \neq S_2(\lambda) \quad \text{かつ} \quad X_1 = X_2,\; Y_1 = Y_2,\; Z_1 = Z_2 $$

なぜこれが可能なのか。SPDは波長の関数であり、数学的には無限次元のベクトル空間に属する。三刺激値への変換は、この無限次元空間から3次元空間への射影だ。異なるベクトルが同じ射影を持ちうるのは、線形代数の基本的な帰結である。三つの等色関数の張る部分空間の補空間に属する差分を持つ任意の二つのSPDは、メタマーとなる。

メタメリズムは色の科学において、制約であると同時に恩恵でもある。

制約としてのメタメリズム。 照明条件が変わると、ある照明下でマッチしていた二つの色(メタマー)が別の照明下ではマッチしなくなることがある。これが照明メタメリズムの崩壊だ。ストロボ撮影で色がずれる理由と対策で論じたキセノン放電光と定常光のスペクトルの違いが引き起こす色ずれも、メタメリズムの崩壊の一例である。照明光源のスペクトル特性が色の再現性に及ぼす影響は、演色性とメタメリズムでさらに掘り下げる。

恩恵としてのメタメリズム。 ディスプレイの物理学で論じるように、ディスプレイはR, G, Bの三つのサブピクセルしか持たないが、メタメリズムのおかげで、自然界のあらゆる色を(色域の範囲内で)再現できる。ディスプレイが出す光のSPDは被写体のSPDとはまったく異なるが、三刺激値が一致すれば同じ色に見える。写真の色再現は、メタメリズムの上に成り立っている。

色度図の構成

三刺激値から色度座標へ

三刺激値 $(X, Y, Z)$ は三次元空間上の一点を表す。ここから明るさの情報を取り除き、純粋に色みだけを表現するのが色度座標だ。

$$ x = \frac{X}{X + Y + Z}, \quad y = \frac{Y}{X + Y + Z}, \quad z = \frac{Z}{X + Y + Z} $$

定義から $x + y + z = 1$ であるため、独立な変数は二つだけだ。慣例として $(x, y)$ を用い、$z$ は必要に応じて $z = 1 - x - y$ で求める。

三刺激値から色度座標への変換は射影変換であり、原点を通る直線上のすべての点(同じ色で明るさだけが異なる刺激)が一点に縮約される。明るい赤も暗い赤も、同じ色度座標を持つ。

スペクトル軌跡と純紫軌跡

可視光の各波長(380 nmから780 nm)の単色光に対応する色度座標を $(x, y)$ 平面上にプロットすると、馬蹄形の曲線が描かれる。これがスペクトル軌跡(spectral locus)だ。曲線の各点には対応する波長が記され、短波長端(約380 nm、紫)から長波長端(約780 nm、赤)まで連続的に変化する。

スペクトル軌跡の短波長端と長波長端を結ぶ直線が純紫軌跡(purple line)である。純紫軌跡上の色はマゼンタや赤紫といった色相に対応し、単一波長の光では実現できない。短波長の光と長波長の光の混合によってのみ生じる。これは物理的に興味深い事実だ。マゼンタという色には、対応する波長が存在しない。にもかかわらず、私たちはマゼンタを明瞭に知覚する。色が波長ではないことの、もう一つの証拠だ。

スペクトル軌跡と純紫軌跡で囲まれた領域が、人間の知覚しうるすべての色度を含む。この閉じた領域の内部に、あらゆる実在する色が収まる。

境界のない砂の上を歩くで論じたように、光のスペクトラムに「赤」と「橙」の境界はない。波長は連続的に変化し、色度図上のスペクトル軌跡もまた滑らかな曲線だ。「赤」、「緑」、「青」といった色名は、この連続体に人間が引いた恣意的な境界にすぎない。

色の三属性の物理的対応物

日常的に「色」を記述するとき、色相(hue)、彩度(saturation)、明度(lightness / brightness)の三属性が用いられる。これらは知覚的なカテゴリだが、CIE XYZ表色系を通じて物理的な対応物を持つ。

色相 は、色度図上での白色点(ホワイトポイント)からの方向に対応する。白色点から色度座標を結ぶ直線をスペクトル軌跡まで延長したときの交点の波長を、主波長(dominant wavelength)と呼ぶ。主波長が色相の物理的な表現だ。ただし、純紫軌跡上の色(マゼンタ系)にはスペクトル軌跡との交点が存在しないため、反対方向のスペクトル軌跡との交点の波長を補色主波長として用いる。

彩度 は、白色点から色度座標までの距離を、白色点からスペクトル軌跡(または純紫軌跡)までの距離で割った比率に対応する。これを刺激純度(excitation purity)と呼ぶ。純度が0のとき白色、1のとき単色光であり、中間の値は白色光と単色光の混合に相当する。

明度 は、三刺激値のうち $Y$ に対応する。$Y$ は等色関数 $\bar{y}(\lambda)$ が分光視感効率 $V(\lambda)$ と一致するよう設計されているため、人間の明るさ知覚に直接対応する。

ただし、これらの対応は近似的なものだ。CIE XYZ表色系は色の物理的な記述としては厳密だが、知覚的な均等性を備えていない。色度図上で同じ距離を移動しても、緑の領域では色の変化がほとんど知覚されないのに、青紫の領域では大きな変化として知覚される。この非均等性の知覚的基盤は視覚の知覚心理物理学で扱う。補正のために開発された L*a*b*(CIELAB)やCIE 1976 L*u*v*(CIELUV)といった知覚均等色空間の数学的構造は、色空間の数学で展開する。

写真における色の課題

センサーによる三刺激値の取得

デジタルカメラのイメージセンサーは、光電効果とフォトダイオードで述べた光電変換素子の上にベイヤー配列とデモザイキングの数学で解説するカラーフィルターを重ね、R, G, Bの三チャンネルで光を記録する。原理的にはこれも「三つのフィルター関数とSPDの積の積分」であり、等色実験と同じ構造を持つ。

しかし、センサーの分光感度はCIE等色関数とは一致しない。ベイヤーフィルターのR, G, Bの透過特性は錐体の分光感度とも等色関数とも異なる。このため、センサーが出力するRGB値はそのままでは三刺激値として正確ではない。カメラ内部またはRAW現像の信号処理で詳述するパイプラインの中でカラーマトリクス変換を行い、デバイスRGBからXYZ(あるいはその派生であるsRGBやAdobe RGB)への変換を施すことで、色の再現性を確保する。

この変換が完全であるためには、センサーの分光感度がCIE等色関数の線形結合で表現できること(ルーサー条件)が必要だが、現実のセンサーはこの条件を厳密には満たさない。したがって、ある照明条件下で最適化されたカラーマトリクスが、別の照明条件下では誤差を生じうる。カメラプロファイルが色温度と黒体放射で論じるD65やStandard Illuminant A等の複数の照明条件に対して別々のマトリクスを持つのはこのためだ。

現像ソフトを選び直すで論じたように、RAW現像ソフトごとに色の出方が異なるのは、このカラーマトリクスの設計思想と最適化対象が各社で異なるためである。

メタメリズムの実際的な影響

写真のワークフローにおいて、メタメリズムは至るところに顔を出す。

被写体の色は、照明光のSPDと光と物質の相互作用で導入した分光反射率の積として生じるSPDから、センサーが三刺激値を算出することで記録される。しかし同じ被写体でも、照明光が変われば物理的に異なるSPDが目やセンサーに届く。昼光下と蛍光灯下で同じ服を見たとき色が違って見えることがあるのは、昼光と蛍光灯のSPDの違いが分光反射率との積を変え、メタマー関係が崩れるためだ。

さらに、ディスプレイでの鑑賞と印刷の物理学で扱うプリントでの鑑賞という出力媒体の違いもメタメリズムに関わる。ディスプレイのR, G, BサブピクセルのSPDとプリントのインクの分光反射率は根本的に異なる。ある照明下でディスプレイとプリントが同じ色に見えても、鑑賞環境の照明が変われば両者の見え方が乖離しうる。

色空間とガマット

sRGB、Adobe RGB、DCI-P3、Rec. 2020といった色空間は、色度図上のR, G, Bの三角形として定義される。三角形の頂点が各原色の色度座標であり、三角形の内部がその色空間で表現可能な色域(ガマット)だ。

ガマットが広いほど彩度の高い色を表現できるが、スペクトル軌跡と純紫軌跡で囲まれた全領域をカバーする三角形は存在しない。スペクトル軌跡が曲線であるのに対し、三原色の加法混合が定義するガマットは三角形だからだ。どう頂点を選んでも、曲線の内側にしか収まらない。これは物理的な制約ではなく、三原色加法混合の幾何学的な制約である。原色の数を増やせばガマットは拡大する。一部の広色域ディスプレイやプロジェクターが多原色方式を採用しているのは、この幾何学的限界を回避するためだ。

まとめ

色は波長ではない。波長は光の物理的性質であり、SPDとして記述される。色は、そのSPDが三種類の錐体細胞を経て三つの応答値に圧縮されたあとに、脳が構成する知覚現象だ。

CIE 1931表色系は、この圧縮過程を等色実験に基づいて数学的に定式化した体系である。三刺激値 $(X, Y, Z)$ はSPDと等色関数の積の積分で計算され、メタメリズムという現象を通じて、色の同一性と差異を物理的に定義する。色度座標 $(x, y)$ はそこから明るさを除いた純粋な色みの表現であり、色度図はすべての知覚可能な色を平面上に射影した地図だ。

写真は、被写体のSPDをセンサーが受け取り、カラーマトリクス変換を通じて三刺激値に変換し、色空間のガマット内に収める過程である。この一連の変換は、人間の色覚が行っている処理の工学的な模倣にほかならない。光学から電子、信号処理、知覚に至る全パラメータの連鎖はすべてを統合するで総括する。

赤を知らないし、何もわからない。で問うたように、色の物理をどれだけ精密に記述しても、「赤を見る」という主観的経験は数式の中には現れない。しかし数式は、なぜ特定のSPDが「赤」として知覚されるのか、なぜ異なるSPDが同じ「赤」に見えるのか、そしてなぜ照明が変わると色が変わるのかを、正確に教えてくれる。

色の物理と色の経験は、同じ現象の二つの面だ。本シリーズでは物理の面を追い続ける。

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