写真の物理学 ㉗ ベイヤー配列とデモザイキングの数学

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

デジタルカメラのセンサーでは、各画素が赤・緑・青のうちたった一色の明るさしか記録していない。完全なカラー画像は、足りない二色を数学的に推定して埋めるデモザイキングによって事後的に生成される。本稿ではベイヤー配列の設計思想から補間アルゴリズムの数学、モアレの発生原理、X-Trans・Foveonなどの代替方式までを扱う。

なぜ一画素で色が分離できないのか

光電効果とフォトダイオードで述べたように、シリコンフォトダイオードは光子を受け取ると電子を放出する。この電子の量が「明るさ」として記録される。ところが、シリコンのフォトダイオード単体では波長を区別できない。赤い光も青い光も、電子を叩き出すという意味では同じだ。波長ごとに吸収効率の差はあるものの、「いま届いた光子が何色だったか」を一つのフォトダイオードだけで判定することはできない。

色を得るには、光がフォトダイオードに届く前にフィルターをかけて、特定の波長帯だけを通す必要がある。赤フィルターを載せた画素は赤い光の強さだけを記録し、緑フィルターなら緑だけ、青フィルターなら青だけを記録する。この色フィルターの集合体がカラーフィルターアレイ(CFA)であり、その配列パターンの中でもっとも広く使われているのがベイヤー配列だ。

ベイヤー配列の設計思想

ベイヤー配列は、1976年にコダックのブライス・ベイヤーが特許を取得した(U.S. Patent No. 3,971,065)。2×2画素を一単位とし、赤1、青1、緑2の構成を繰り返す。フィルターの50%が緑、25%が赤、25%が青という非対称な比率が最大の特徴だ。

なぜ緑が2倍なのか。理由は人間の視覚にある。

色とは何かで定式化したように、人間の網膜には三種類の錐体細胞があり、それぞれ短波長(S錐体、青)、中波長(M錐体、緑)、長波長(L錐体、赤)に感度のピークを持つ。明所視では輝度知覚の大部分をM錐体とL錐体が担っている。M錐体の感度ピークは約534nm(緑)、L錐体のピークは約564nm(黄緑)にあり、両者とも緑を中心とした波長帯に高い感度を持つ。CIE明所視標準比視感度関数V(λ)のピークが555nm付近にあることからもわかるように、人間の目は解像感やディテールの知覚において緑の情報にもっとも依存している。

ベイヤーは特許出願時、緑の画素を「輝度感受素子(luminance-sensitive elements)」、赤と青の画素を「色差感受素子(chrominance-sensitive elements)」と呼んだ。緑チャンネルが事実上の輝度チャンネルとして機能し、画像の空間的なディテールの大部分を担う。緑のサンプリング密度を赤・青の2倍にすることで、人間の目が最も敏感な輝度情報の解像度を最大化する設計だ。

まぶたの裏に残る灰色の光で触れたように、人間の視覚システムには固有のノイズや知覚の偏りがある。ベイヤー配列は、その偏りを逆手にとった設計といえる。

サンプリングと実効解像度

ベイヤー配列のセンサーでは、各色チャンネルが全画素のうち一部だけをサンプリングしている。緑は50%、赤と青は25%。これはつまり、各色チャンネル単独で見ると空間的にサブサンプリングされた状態にあるということだ。

MTFで読むレンズの解像力でも論じたナイキスト-シャノンの標本化定理によれば、ある信号を正確に復元するには、その信号の最高周波数の2倍以上のサンプリングレートが必要になる。ベイヤーセンサーの場合、緑チャンネルは市松状に配置されているため、水平・垂直方向のナイキスト周波数はモノクロセンサーと比べて低い。赤と青はさらに低い。

実測的には、ベイヤーフィルター付きセンサーの実効解像度は、同じピクセルピッチのモノクロセンサーのおよそ$1/\sqrt2$(約70%)とされる。2400万画素のベイヤーセンサーは、モノクロセンサー換算でおよそ1700万画素相当の空間解像度を持つ計算になる。

この解像度の低下は、各画素が三色のうち一色しか記録しないことの直接的な代償だ。センサー解像度の数字が十分になった現代においても、この構造的な限界は変わっていない。

デモザイキングの基本

ベイヤーセンサーの出力は、各画素に一色の値しかない不完全な画像だ。ここからフルカラー画像を再構成する処理がデモザイキング(demosaicing)、あるいはデベイヤリング(debayering)と呼ばれる。

もっとも単純な手法は双線形補間(bilinear interpolation)だ。ある画素の欠落色を、その周囲にある同色画素の値の平均で推定する。たとえば緑フィルターが載った画素では赤と青の値が欠落しているが、上下左右に隣接する赤画素(最大2個)と青画素(最大2個)の平均値をそれぞれ代入する。

数学的に書けば、位置(i, j)の画素が緑画素であるとき、欠落している赤の推定値R̂(i, j)は

$$ R̂(i, j) = (R(i-1, j) + R(i+1, j)) / 2 $$

のように、隣接する赤画素の単純平均で求まる。斜め方向の4画素を使う場合もある。

この手法は計算が軽く実装も容易だが、画像のエッジ(境界線)付近で深刻な問題を起こす。エッジをまたいで平均をとってしまうため、本来は存在しない色がにじみ出る。これが偽色(false color)やジッパーアーティファクト(zippering)と呼ばれる現象だ。色の境界線に沿ってオン・オフのパターンで不自然な色ずれが繰り返される。

適応的デモザイキング

双線形補間の限界を克服するために、エッジの方向を検出してからその方向に沿って補間する適応的手法が開発されてきた。

代表的なものをいくつか挙げる。

VNG(Variable Number of Gradients) は、注目画素の周囲で複数方向の勾配を計算し、勾配が小さい方向(つまりエッジをまたがない方向)の情報を優先的に使って補間する。初期のdcraw(オープンソースRAW現像ツール)で採用されていた。

AHD(Adaptive Homogeneity-Directed) は、水平方向と垂直方向にそれぞれ独立に補間を行い、色の均一性(homogeneity)が高い方を選択する。色アーティファクトの抑制に優れ、多くの現像ソフトの基盤になっている。

AMaZE(Aliasing Minimization and Zipper Elimination) は、RawTherapeeやdarktableなどのオープンソース現像ソフトに実装されており、計算負荷は高いがノイズの少ない撮影条件では優れた画質を出す。

RAW現像ソフトの選択によって同じRAWファイルの色味やディテールの出方が変わるのは、これらのデモザイキングアルゴリズムの違いが大きな要因だ。現像ソフトが変われば、同じセンサーデータから復元される画像も変わる。RAW現像の信号処理で詳述したように、RAW現像という作業の本質は、このデモザイキングを起点とした一連の計算処理にある。

モアレと偽色の発生メカニズム

ベイヤーセンサーは空間的にサブサンプリングを行っているため、サンプリング定理の条件を満たさない高周波パターンが被写体に含まれると、エイリアシングが発生する。

具体的には、センサーのピクセルピッチより細かい繰り返しパターン(織物の目、建築の格子、PCのモニタ画面など)を撮影すると、実際には存在しない低周波の縞模様が画像に現れる。これがモアレだ。色チャンネルごとにサンプリング位置が異なるベイヤーセンサーでは、輝度だけでなく色のモアレ(偽色)も発生する。本来は灰色の均一なパターンに虹色の縞が走るような現象がこれにあたる。

モアレが発生する条件は明確で、被写体の空間周波数がナイキスト周波数を超えたときだ。逆にいえば、ナイキスト周波数を超える高周波成分をセンサーに届く前に除去すれば、理論上モアレは防げる。

光学ローパスフィルターの物理

この「高周波を事前に除去する」役割を担うのが、光学ローパスフィルター(OLPF)だ。多くのデジタルカメラでは、センサーの直前に複屈折性を持つ素材(水晶やニオブ酸リチウムなど)が配置されている。

複屈折素材を通った光は、常光線と異常光線の二つに分離される。つまり一点から来た光が、素材を通過した後にわずかにずれた二点に分かれる。このずれ幅をピクセルピッチと同程度に設定することで、ピクセルピッチより細かい空間情報が「意図的にぼかされる」。水平方向と垂直方向の両方に対応するため、通常は二枚の複屈折板を直交させて配置する。

回折限界と最適絞りのトレードオフで論じた絞りと回折の関係と同様、これは意図的に解像度を犠牲にする設計だ。モアレという不自然なアーティファクトを防ぐために、シャープネスを少しだけ落とす。トレードオフとしては合理的だが、「せっかくの解像力を自らぼかしている」ことに変わりはない。

2010年代以降、光学ローパスフィルターを搭載しないカメラが増えている。2012年のNikon D800Eが転機のひとつだ。高画素化によりピクセルピッチが微細化し、自然界の被写体でナイキスト周波数を超える空間周波数が発生しにくくなったこと。また、デモザイキングアルゴリズムの進歩によりソフトウェア側でモアレを抑制できるようになったこと。この二つの要因が、OLPFの廃止を現実的にした。

ただし、繊維やモニタ画面のような規則的なパターンでは依然としてモアレが発生しうるため、建築写真やファッション写真では注意が必要だ。

X-Trans配列という代替案

富士フイルムのX-Transセンサーは、ベイヤーの2×2繰り返しパターンに代えて6×6の繰り返し単位を採用した。色の比率は緑が約55.6%、赤と青が各約22.2%で、ベイヤーとほぼ同じだが、配列パターンがより複雑で非周期的な特性を持つ。

X-Transの設計意図は、CFAの周期性を崩すことでモアレの発生を抑制し、光学ローパスフィルターを不要にすることだ。ベイヤー配列の2×2パターンは強い周期性を持つため、被写体の周期パターンと干渉しやすい。6×6に拡張してパターンの繰り返し周期を大きくすることで、エイリアシングのエネルギーが分散され、視覚的に目立つモアレになりにくい。

一方でX-Transには課題もある。繰り返し単位が大きいぶん、デモザイキングの計算が複雑になる。サードパーティのRAW現像ソフト(Adobe Lightroomなど)でのX-Trans対応は長年にわたって改善が続けられてきた経緯があり、ベイヤーセンサーほどアルゴリズムの蓄積がないことが実用上のデメリットとして指摘されてきた。

また、モアレ抑制効果の実質的な程度については議論がある。モアレの軽減は、CFA配列だけでなく、画像処理パイプライン全体のノイズリダクション処理にも依存しているという指摘もある。

Foveonセンサーの物理

シグマ(旧Foveon社)のFoveon X3センサーは、ベイヤー配列とはまったく異なるアプローチをとる。カラーフィルターを使わず、シリコンの光吸収特性そのものを利用して色を分離する。

シリコンにおける光の吸収深度は波長に依存する。電磁波としての光で導いたプランクの関係式が示すとおり、短波長(青)の光子はエネルギーが大きく、シリコン表面近くで吸収される。中波長(緑)はやや深く、長波長(赤)はさらに深い位置まで到達してから吸収される。Foveon X3はこの原理を利用し、一つの画素位置に三層のフォトダイオードを垂直に積層している。上層が主に青、中層が主に緑、下層が主に赤の光を捉える。

この構造には明確な利点がある。各画素位置で三色すべての情報が得られるため、デモザイキングが不要だ。色の空間的な補間を行わないので、ベイヤーセンサーに見られる偽色やジッパーアーティファクトが原理的に発生しない。また光学ローパスフィルターも不要なため、解像力の低下がない。

しかし課題も多い。三層の分光特性は色空間の数学で定義される理想的なR・G・Bの分離からは遠く、層間のクロストーク(色の混ざり)が大きい。正確な色を得るために「アグレッシブな」行列演算が必要になり、特に低照度環境ではノイズの物理学で論じたショットノイズが行列演算で増幅され、カラーノイズが増大しやすい。また最深部(赤)のフォトダイオードでは電子の拡散が起き、長波長チャンネルのシャープネスが低下する傾向がある。

見えない光が写す もうひとつの風景で述べたように、シリコンは赤外線にも感応する。Foveonの最下層が赤外線の影響も受けやすいことは、色再現の難しさと表裏一体だ。

3CCD方式による完全な色分離

ベイヤーもFoveonも、一枚のセンサーチップで三色を扱おうとする方式だ。これに対して、光をプリズムで物理的に三つに分けてから、それぞれ独立したセンサーで記録する方式がある。3CCDだ。

3CCD方式では、光と物質の相互作用で扱った薄膜干渉を応用したダイクロイックプリズム(波長選択性コーティングを施したプリズム)が入射光を赤・緑・青の三つに分離する。ダイクロイックコーティングは特定の波長帯の光を反射し、それ以外を透過させる。これを二面使って光を三方向に分け、各出口に専用のCCD(またはCMOS)センサーを配置する。

この方式のメリットは明快だ。各センサーが担当する色チャンネルの全画素分の情報をフルに取得できる。デモザイキングが不要で、色のクロストークも光学的に最小化される。放送用ビデオカメラや業務用シネマカメラでは長らくこの方式が標準だった。

デメリットも明快で、プリズムと三枚のセンサーを収めるために光路長が必要で、カメラが大型化する。コストも高い。フランジバックの制約からレンズ設計にも影響する。ミラーレスカメラやコンパクトカメラには構造上適さず、スチルカメラの主流にはならなかった。

まとめ

デジタルカメラが「色」を得るための方法は、一見すると単純に見えて、その背後に物理学、信号処理、人間の知覚特性が複雑に絡み合っている。

ベイヤー配列は、人間の輝度感度の偏りを利用して、最小限のフィルター構成で実用的なカラー画像を実現した。デモザイキングは、不完全なデータから全色情報を推定する逆問題であり、双線形補間のような単純な手法からエッジ適応型の高度なアルゴリズムまで、半世紀にわたって改良が続いてきた。光学ローパスフィルターは、サンプリング定理に忠実な解としてモアレを防いだが、高画素化とソフトウェアの進歩がその存在意義を薄めつつある。

X-Trans、Foveon、3CCDはそれぞれ異なる角度からベイヤーの限界に挑んだが、いずれも独自のトレードオフを抱えている。完璧な色記録方式は存在しない。あるのは、異なる制約条件のもとでの最適化だけだ。

シャッターを切って得られる一枚の写真は、センサーが拾った不完全なデータを数学が補完した結果だ。その計算の質が、写真の質を左右している。

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