写真のしくみ ㉔ 白黒しか見えないセンサーがカラー写真をつくるしくみ

Share
💡
シリーズ「写真のしくみ」について
光はまっすぐ進み、レンズは世界をひっくり返す。写真と映像にひそむ小さな「なぜ?」を、数式なしで解き明かす全40回。

カメラのシャッターを切れば、カラー写真ができあがる。あまりに当たり前なので、そのしくみを不思議に思う人は少ないかもしれません。でも実は、カメラの中では驚くほど巧妙なことが起きています。

センサーは色が見えない

いきなりですが、ちょっとびっくりする話から始めましょう。

デジタルカメラのセンサーは、色が分かりません。

「え、だってカラー写真が撮れるじゃん!」と思うかもしれません。もちろん最終的にはカラーの写真ができあがります。でも、センサーそのものが見ているのは、実は 「光の強さ」だけ なんです。

センサーの表面には、何百万、何千万という小さな「画素(ピクセル)」が並んでいます。ひとつひとつの画素は、光が当たると電気信号に変えます。光が強ければ大きな信号、弱ければ小さな信号。やっていることは、いわば 「ここは明るい」「ここは暗い」と測っているだけ です。

目をつぶって手のひらを太陽にかざしてみてください。まぶたの裏が明るく感じるけれど、色はぼんやりとしか分かりません。センサーの画素が見ている世界は、それに少し似ています。光のエネルギーの「量」には敏感でも、それが赤い光なのか、青い光なのかを区別する能力は持っていないのです。

もしこのまま画像をつくったら、できあがるのは白黒の写真です。明るいところは白く、暗いところは黒く写る。それだけ。

では、どうやってカラー写真になるのでしょう。そこに登場するのが、今回の主役 「カラーフィルター」 です。

色つきメガネの発想

カラーフィルターの原理は、とてもシンプルです。

赤いセロハンを目の前にかざすと、世界はどう見えるでしょう。赤い光だけが通り抜けて、青や緑の光はさえぎられます。つまり、赤いセロハン越しに見て「明るい」と感じる場所は、もとの景色で赤い光が多い場所です。

これとまったく同じことを、センサーの画素のひとつひとつに対してやります。画素の上に、ごく小さな色つきのフィルターを1枚ずつ載せるのです。赤いフィルターがかかった画素は赤い光だけを受け取り、緑のフィルターがかかった画素は緑の光だけを、青のフィルターがかかった画素は青の光だけを受け取ります。

画素自身は相変わらず「光の強さ」しか分かりません。でも、フィルターのおかげで 「赤の光がどれくらい強いか」「緑の光がどれくらい強いか」「青の光がどれくらい強いか」 をそれぞれ測れるようになります。

このしくみを考えたのが、アメリカのイーストマン・コダック社で働いていた ブライス・ベイヤー(Bryce Bayer) という研究者です。1974年、ベイヤーは自分の研究ノートに、あるフィルターの配列パターンをスケッチしました。翌年コダックが特許を出願し、1976年にアメリカ特許 3,971,065 号として認められています。

このフィルター配列は、考案者の名前をとって 「ベイヤーフィルター」 と呼ばれています。今日、ほとんどすべてのデジタルカメラに使われている、まさに「カラー写真の立役者」です。

ベイヤーフィルターの並び方

ベイヤーフィルターでは、赤(R)、緑(G)、青(B)のフィルターが規則的に並んでいます。その基本パターンは、2×2の4画素をひとかたまりとして、こうなっています。

R G
G B

4画素のうち、緑が2つ、赤が1つ、青が1つ。これがタイルのように繰り返されて、センサー全体を覆います。

何千万画素のセンサーでも、パターンは同じです。このRGGBの繰り返しが、延々と並んでいます。とてもシンプルな構造ですが、ここにちょっと不思議な点があります。

緑だけ2倍多い。 なぜでしょう?

なぜ緑が多いのか

答えは、人間の目のしくみにあります。

私たちの目の中には、色を感じる細胞(錐体)が3種類あります。赤に反応するもの、緑に反応するもの、青に反応するもの。このうち、緑に反応する錐体がいちばん「明るさ」の知覚に貢献しています。つまり、私たちが「くっきり見える」「シャープだ」と感じるかどうかは、緑の情報に大きく左右されるのです。

ベイヤー自身もこのことを理解していました。研究ノートには「緑のサンプリングポイントを2倍にする。緑はシャープネスにとっていちばん重要だから」という趣旨のことが書かれています。

緑の画素を赤や青の2倍に増やせば、人間の目が敏感な明るさの情報をより細かく拾えます。結果として、できあがる写真は 人間にとって自然にくっきりと見える ものになります。赤や青を同じ割合にして均等に3分の1ずつにするよりも、ずっと賢いやり方というわけです。

さらに、緑の画素がチェッカーボード(市松模様)のように配置されていることにも意味があります。縦方向にも横方向にも均等に緑の画素が散らばっているので、画像のどの方向を見てもシャープネスの情報が途切れにくいのです。ベイヤーフィルターは、見た目のシンプルさとは裏腹に、人間の視覚特性をうまく利用した巧みな設計なのです。

💡
ちょっと気になる人へ
人間の目が明るさを感じとる度合いは、波長によって大きく異なります。この感度の分布を「分光視感効率」(CIE標準比視感度)と呼び、ピークは約555nmの緑色付近にあります。つまり、同じエネルギーの光でも、緑の光がいちばん「明るく」感じられるのです。ベイヤーが緑を2倍にしたのは、まさにこの視覚特性を利用しています。現在のデジタルカメラでRGB信号から輝度(明るさ)を計算するときにも、緑の成分にもっとも大きな重みがかけられています。

「1画素1色」の限界を超える

ここで、ひとつ大事なことがあります。

ベイヤーフィルターを使うと、ひとつの画素は 赤・緑・青のうち、たった1色の情報しか持っていません。赤いフィルターがかかった画素には、緑や青の情報がまったくない。その画素の位置の「本当の色」を知るには、赤・緑・青の3つの情報が全部そろわないといけないのに、1つしか分からないのです。

これは、たとえるなら、こんな感じです。

教室で絵を描いているとしましょう。でも、一人ひとりが持っているクレヨンは1色だけ。赤いクレヨンを持っている子は赤の濃さだけを塗れるし、緑のクレヨンの子は緑だけ。それぞれの子が自分の位置で1色だけ塗ったら、そのままではモザイク状のまだら模様にしかなりません。

フルカラーの絵を完成させるには、 「おとなりの子が塗った色を参考にして、自分のところの残りの色を推測する」 しかありません。

これこそが、デモザイキング(demosaicing) と呼ばれる処理です。「モザイクを解く」という意味の名前で、カメラの画像処理エンジンやRAW現像ソフトがこの計算を担当しています。

デモザイキングのしくみ

デモザイキングでは、各画素について「足りない色」を周囲の画素から推定します。

いちばん素朴なやり方は 「まわりの平均をとる」 方法です。たとえば赤の画素の位置で緑の値を知りたいなら、上下左右にある緑の画素の値を平均します。計算としては単純ですが、これでも意外とそれらしいカラー画像になります。

ただし、平均をとるだけだと、色の境界がぼやけたり、本来ないはずの色がにじみ出したりすることがあります。そこで現代のカメラやソフトウェアでは、もっと賢いアルゴリズムが使われています。

たとえば「エッジ(輪郭)の方向を見る」方法があります。画像の中に斜めの線があるとき、線に沿った方向のとなりの画素は色が似ているけれど、線をまたぐ方向のとなりの画素は色がまったく違います。だから、ただの平均ではなく 「線に沿った方向だけで平均をとる」 ようにすれば、輪郭がぼけにくくなります。

こうした工夫をいくつも組み合わせることで、1画素1色のモザイクデータから、各画素にRGB 3色の情報がそろった フルカラー画像 が生まれます。私たちがカメラの液晶画面やパソコンで見ているカラー写真は、すべてこのデモザイキングを経た「推定の産物」なのです。

💡
ちょっと気になる人へ
デモザイキングのアルゴリズムは、カメラメーカーやRAW現像ソフトごとに異なります。単純な平均補間から、エッジの方向を検出する適応型アルゴリズム、さらには周辺のパターンを広く参照する高度な手法まで、さまざまな方式が使われています。同じRAWファイルでも、ソフトが変われば仕上がりの色味やシャープネスに差が出ることがあるのは、このためです。

フィルターがもたらす厄介者たち

ベイヤーフィルターとデモザイキングの組み合わせは非常にうまく機能しますが、万能ではありません。いくつか厄介な副作用があります。

モアレ

細かいしま模様や格子模様を撮影したとき、写真に実際には存在しないゆらゆらとした縞が出ることがあります。これが「モアレ」です。

身近な例で考えてみましょう。テレビの画面をスマートフォンで撮影すると、虹色の波紋が出ることがあります。これもモアレの一種です。テレビの画素の並びと、カメラのセンサーの画素の並びが干渉して、本来存在しないパターンが生まれてしまうのです。

ベイヤーフィルターでも同じことが起きます。被写体の模様が細かすぎて、センサーの画素の間隔と「ぶつかる」と、元の模様とは違う偽のパターンが浮かび上がります。チェック柄のシャツや建物の窓の格子などで起きやすい現象です。

偽色(ぎしょく)

本来その色ではない場所に、ウソの色がにじみ出る 現象です。デモザイキングで周囲の画素から色を推定するとき、特にコントラストの高い境界部分で推定がうまくいかず、赤や紫などの色が縁に出ることがあります。

こうした問題を軽減するため、多くのカメラではセンサーの前に 光学ローパスフィルター(OLPF) と呼ばれる薄い板を置いています。これはわざと像をごくわずかにぼかすことで、モアレや偽色の原因となる細かすぎる模様を事前にやわらげる役割があります。ただし、その代償として画像のシャープネスがほんの少し犠牲になります。

近年では、センサーの画素数が非常に多くなり、画素ひとつあたりのサイズが小さくなったことで、モアレが起きにくくなりました。そのため、光学ローパスフィルターを省略するカメラも増えてきています。

ベイヤーだけじゃない

ベイヤーフィルターは現在もっとも広く使われていますが、色をとらえる方法はこれだけではありません。

富士フイルム X-Trans

富士フイルムが開発した X-Trans は、ベイヤーの2×2パターンではなく、6×6のより大きなパターン を使います。緑・赤・青の比率自体はベイヤーとほぼ同じですが、配列が不規則に見えるように工夫されています。

この配列の狙いは、モアレの発生を抑えることです。ベイヤーの規則的な繰り返しは細かい模様と干渉しやすいのですが、X-Transのように周期の長い複雑なパターンにすると、干渉が起きにくくなります。結果として、光学ローパスフィルターなしでもモアレを抑えられるとされており、富士フイルムのXシリーズカメラの多くに採用されています。

とはいえ、6×6パターンのデモザイキングはベイヤーに比べて計算が複雑で、RAW現像ソフトによっては処理の得手不得手が出ることがあります。画質にどれほどの差が出るかは議論が分かれるところで、実際の写真を見比べても大きな違いを感じないという人も多いようです。

シグマ Foveon

まったく異なるアプローチをとったのが、シグマが所有する Foveon X3 センサーです。

ベイヤーフィルターでは、画素を平面上に並べて1画素1色を担当させます。Foveonはこの発想を根本から変えました。1つの画素の位置に、3層のセンサーを縦に重ねる のです。

これを可能にしているのは、シリコン(ケイ素)という半導体の性質です。光はシリコンの中に入ると、波長(色)によって 吸収される深さが違います。エネルギーの高い青い光はシリコンの浅いところで吸収され、緑の光はもう少し深くまで進み、赤い光はさらに奥まで到達します。

Foveonセンサーは、この性質を利用して、シリコンの浅い層で青、中間の層で緑、深い層で赤の信号をそれぞれ受け取ります。つまり、すべての画素の位置で赤・緑・青の3色を同時にとらえることができる のです。

「ベイヤーが平面的なモザイクなら、Foveonは立体的なサンドイッチ」と言えるかもしれません。

Foveonの大きな利点は、デモザイキングが不要なことです。すべての位置で3色が揃っているので、色の推定をする必要がありません。偽色が原理的に発生しにくく、非常に精細でクリアな描写が得られるとされています。

一方で、各層を通過する間に光が弱まるため、特にノイズの面では不利になります。色の分離もベイヤーフィルターのように「はっきり1色だけ通す」わけではなく、各層の吸収特性が重なっているので、正確な色を得るための補正計算が複雑です。高感度(暗い場所での撮影)にも弱い傾向があります。

こうした難しさもあって、Foveonセンサーはシグマの一部のカメラに採用されるにとどまっています。しかし、その独特の描写力に惹かれる写真家は少なくありません。

モノクロ専用センサー

最後にもうひとつ、逆転の発想を紹介しましょう。

カラーフィルターを載せない という選択肢です。

先ほど説明したとおり、センサーの画素は本来「光の量」だけを測ります。カラーフィルターを載せるということは、各画素に届く光の一部をフィルターが吸収してしまうということでもあります。通せんぼされた分だけ、画素に届く光は減ります。

ならば、いっそカラーフィルターをなくしてしまえばどうでしょう。色は撮れなくなりますが、すべての光が画素に届くので、次のようなメリットがあります。

  • 感度が上がる。 フィルターで失われていた光を全部使えるので、暗い場所でもノイズが少なくなります。
  • 解像度が上がる。 デモザイキングで周囲の画素の情報を借りる必要がないので、1画素1画素がそのまま最終画像の1ピクセルになります。にじみやぼけが入り込む余地がありません。
  • 階調が豊かになる。 白から黒へのグラデーションをより滑らかに記録できます。

このアプローチを製品化した代表例が、ライカの M Monochrom シリーズです。「白黒しか撮れないデジタルカメラ」として、2012年に初代モデルが登場し、写真ファンの間で大きな話題になりました。最新モデルでは6000万画素のセンサーからカラーフィルターを取り除くことで、白黒専用ならではの圧倒的な解像力と階調を実現しています。

「カラー写真を撮るためにフィルターを載せる」のが普通のカメラなら、「フィルターを外して白黒に特化する」のはまさに逆の発想です。でも、センサーの原理を知っていれば、これがとても理にかなっていることが分かるのではないでしょうか。

🔍
やってみよう
もしRAW現像ソフトを持っているなら、同じRAWファイルを2つの異なるソフトで現像して見比べてみましょう。細かい模様や色の境界部分を等倍に拡大すると、デモザイキングのちがいが見えてくるはずです。色のにじみ方や、細い線の再現のしかたがソフトによって微妙に異なることに気づくでしょう。

この回のまとめ

今回は、デジタルカメラがカラー写真をつくるしくみを追いかけてきました。ポイントをふり返りましょう。

  • デジタルカメラのセンサーは色を知りません。光の「量」しか測れず、色を区別する能力を持っていません。
  • ベイヤーフィルターは、画素ひとつひとつに赤・緑・青のフィルターを載せ、各画素に1色だけの光の強さを記録させます。緑が2倍多いのは、人間の目が緑に敏感で、明るさの知覚に大きく貢献しているためです。
  • 1画素1色のデータから、周囲の画素の情報を使って足りない色を推定し、フルカラー画像を組み立てる処理をデモザイキングと呼びます。私たちが見ているカラー写真は、すべてこの「推定」の産物です。
  • 細かい模様がセンサーの画素と干渉するとモアレが発生し、コントラストの高い境界では偽色がにじむことがあります。光学ローパスフィルターは、これを抑えるためにわずかに像をぼかす部品です。
  • ベイヤー以外にも方式があります。富士フイルムのX-Transは6×6パターンでモアレを抑え、シグマのFoveonはシリコンの深さで色を分離する3層構造、モノクロ専用センサーはフィルターなしで光をすべて受け止めます。
  • どの方式も出発点は同じです。「色が見えないセンサーに、どうやって色を教えるか」という問いへの、それぞれの答えなのです。

カラー写真の裏側では、色が見えないセンサーと小さなフィルターと巧みな計算が静かに協力し合っています。次にシャッターを切るとき、その一瞬のうちに何百万もの画素がそれぞれ1色の光を受け止め、足りない色を推測し合っていることを、ちょっとだけ思い出してみてください。

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