デジタルカメラの仕組みとRAWやクロマサンプリングについてメモ
最終編集(2021/06/02/1:00)
クロマサンプリングについて書き足しました。
改めてデジタルカメラについて調べたのでメモします。
間違ってたりしたらぜひ教えてくてください。
参考にした資料、リンクについては下記にReferencesにまとめてあります。
完成までの流れ
まずは画像が出来上がる流れについてとりあえず表記しておきます。
一般的な流れであって、最新のカメラや技術、特殊な技術においてはこの流れに合わないものもあります。
この流れを通して映像又画像が記録・表示されます。
次に個別にそれぞれを段階を踏んで見ていきます。
1.1 Sensor / センサー
デジタルカメラにおいてセンサーというものが必須です。デジタルになってからフィルムから代替された存在です。
ここで露光(光の記録)などが行われています。
センサーにはフォトダイオードという素子がくっついてます。
ダイオードという名前の通りLED(発光ダイオード)みたいな半導体でできたダイオードの仲間です。
このフォトダイオードでは光の量に応じて電気に変換する受光素子で、これを使ってカメラは実世界にある光をデータとして記録しています。AD(アナログ/デジタル)変換しているということです。
他にも、カラーフィルター、マイクロレンズ等の部品が組み合わさってセンサーと呼ばれます。詳しくは下記で見ていきます。
現代はCMOSとCCDという異なるセンサーの種類が存在します。
消費電力やローリングシャッター現象とグローバルシャッターなどが変わってきます。
1.2 pixel / 画素
画素、画素数という言葉をよく見ます。
画素数が多い=綺麗というわけではないみたいな記事はよく見かけると思います。
それは単純にセンサーサイズと露光量の問題があるからだ。詳しくは下記リンクを参照してください。
画素とは画像の色を決める1ピクセルの事だと思ってください。
この画素の色のデータをどうやって決めていくかがここから話していく内容になってきます。
1.3 画素とフォトダイオード
ベイヤーのところでも説明しますが、
1つのフォトダイオードが取り込んだ光の情報がそのまま1つの画素に反映されるわけではありません。
一般にいくつかのフォトダイオードで取り込んだ情報を組み合わせて画素の色を決めていきます。
画素とフォトダイオードは別で認識してください。
2.1 色とは
まず色というのは光の波長の違いです。
波長とは波の1周期の長さのことです。そもそもまず光というのは電磁波の一種で波で表せます。(場合によっては粒としても表せます。)
光の波長の大きさが違うと人間は色が違うと感じます。
一般には可視光と呼ばれる範囲の光の波長を知覚することができます。約350nm ~ 750nmぐらいの波長の事を言います。短波長側が紫や青で長波長側側が赤色に見えます。
この波長よりも外側の波長に紫外線や赤外線と呼ばれる電磁波があったり、X線、γ線、電波みたいのがあります。
2.2 色の知覚
目ではどういう風に色が処理されているんだろう?
人間の視覚の仕組みをどういう風に定量的に表そう?
みたいなことは今も昔もずっと考えられてきています。
現代で知られていることをここでは紹介します。後のベイヤー配列を理解するのに役立つので。
人間の目は錐体と桿体と呼ばれる細胞があります。
錐体細胞はS(Small) / M(Medium) / L(Large)錐体と呼ばれる3つの種類があることが知られていて、それぞれ
の波長に対して反応を示す細胞があります。
この3つの細胞がセンサー的な感じでそのバランスで色を感じているんじゃないかというヤング・ヘルムホルツの三色説というのがあります。
光の加法混色的な仕組みが人間にもあるのじゃないかということです。
対してヘリングによる反対色説(4色説)というのがあって、
赤(R)緑(G)黄(Y)青(B)という心理四原色の4つの色のバランスによって色を感じているのではないかというやつです。
三色説によると例えば、黄を見たときはRとGの視細胞によって知覚されることになります。しかし私たちは黄の中に赤や緑のような色味を感じることはありません。
また、赤をしばらく見ていると青みどりの補色が薄く残像のように見えることがあります。補色残像といいます。この補色残像も三色説ではうまく説明することができません。
つまり赤の感覚は黄っぽさ・青っぽさ・緑っぽさなどを感じない独立した色なんだというのを観察結果によって仮定しました。このように独立した色に感じる色を心理四原色と言います。
そしてこれは視細胞が二種類あって
こういう仕組みになっているのではないかというのがヘリングの反対色説です。
つまり、オレンジという色はR-Gの細胞がR側に感じていて、Y-Bの細胞がY側に感じているときに感じる色みたいな感じです。このバランスで色を認識しているというやつです
人の視覚の細胞はこんな感じになっているということが知られています。
どっちが正しいんだ!!!っていう論争が長きの間続いていたのですが
現代は初期段階が三色説、そのあとの段階が四色説の二つを合わせた処理をしているという段階説という全ては段階的な構造を持っているという着地点で落ち着いています。
目の中で光が当たると、桿体細胞で光の量を、錐体細胞でRGBの検知し三色説の処理がされます。神経のつながりにより一次変換などの変換が行われて
その情報が双極細胞まで流れて反対色説の処理を行い最後に神経節細胞に流れて脳へみたいなことが起きていると言われています。
まだ完全に解明されているわけではありません。
2.3 Luminance / 輝度
人が感じる光の量というのを輝度と呼びます。
定量的に明るさのパラメーターを表すときには明度という言葉が使われます。(マンセル表色系の明度、HSLの明度など)
つまり輝度は人間基準の単位です。
輝度も色々知られていることがあります。
同じ光量の光でもどの波長(色)の光が明るく見えるのか、輝度が高いのかということを比視感度といい、調べた結果、明るいところでは555nm(黄緑)の波長がもっとも強く光を感じたという結果にになりました。
暗いところでは少し短波長側にずれて、507nmの波長がもっとも強く光を感じます。(プルキンエ現象)
つまり人は黄緑色、緑色あたりを強く感じるということです。
この特性から
luminance = ( 0.298912 * r + 0.586611 * g + 0.114478 * b )
こんなような式が実験によってわかりました。
RGBの強さから輝度に変換する式です。
画像処理系ではよく使われます。
人間は輝度についてものすごく敏感です。
色の情報よりも輝度の情報の処理に長けています。
桿体細胞(輝度の処理)の数が片目で約1億2000万個あるのに対して、錐体細胞は片目に約650万個存在します。
数だけで比べれば20倍ぐらい違います。
輝度情報で物の形を認識したり、奥行きを認識したりできます。
また
人間は暗い輝度の方感度の方が高いです。
桿体細胞は明るいところではなくて、暗いところで多く反応し始めます。これは桿体細胞内にあるロドプシンという光受容色素というのが光に反応して活性化したり休止したりするためです。(光に反応して休止し始めます)
つまり、暗いところでは桿体細胞が主役となり輝度を感知する能力が高まります。逆に明るいところでは錐体細胞が主役となり輝度を感知する能力が低くなります。
これは夜に敵対する動物などからの危険を察知できるように進化したものだと思います。
プルキンエ現象というのですが、桿体細胞が暗くなると働き始めるので波長に対する感度も変わります。そのため上で紹介した比視感度が短波長側にズレます。これにより、暗い方が青い色側が鮮やかに見え、明るい方が赤色側が鮮やかに見えます。
青色の道路標識は夜でも見やすいようにするためにその色になってたりします。
暗順応、明順応という現象があります。
暗いところから突然明るいところに行くと目を開けられないくらいに眩しく感じると思います。
これは桿体細胞が多くまだ働いているからです。徐々にロドプシンという物質が分解されて桿体細胞が休んで行きます。
これを明順応と言います。
逆に、明るい場所から暗い場所に移動すると全く何も見えないのですが、徐々に目が慣れていき見えるようになってきます。
これはロドプシンにより桿体細胞が反応し始めて輝度の感度があがるためです。
これを暗順応と言います
2.4 Bayer / ベイヤー配列
少し脱線して人の視覚について話しましたが、カメラに戻ります。
フォトダイオードは光の量を測ることができます。
ですが、特定の波長(色)の光の量というのはフォトダイオード自体は測ることができません。
ですが、RGB等の情報に分けないとカラー画像を作れません。
このままではモノクロの画像(明るいか、暗いか、明度)になってしまいます。
なのでカラーフィルターをフォトダイオードの前に置きます。RGBそれぞれのカラーフィルターです。そうすることでそこを通った光はRGBに分解できます。
赤のカラーフィルターを通った光は赤の光の量を検知できます。
でもどうやって配置する?っていう問題があります。
この配列のことをCFA(Color Filter Array)と呼びます。
いろんな配置が考えられました。カメラによってこの配置は違ったりもします。
ここでは多くのカメラに使われるベイヤー配置というのを紹介します。ベイヤーさんが考案した配置です。
先ほどの人の視覚の話がここで効いてくるのですが、緑色の感度が高いという話をしました。
なので半分を緑色のフィルタ、残り半分を赤と青で均等に分けるという方法です。
2:1:1 = G:R:B
こうすることでこのあとのデモザイク(ディベイヤー)を行なった場合に人間にとって自然に見える、偽色が発生しづらいという効果があります。
つまり人間の視覚特性に合わせたということです。
ちなみにこのカラーフィルターは一つずつの大きさは人の髪の毛の1/10ぐらいだそうです。
これが精密に整頓された配置になってセンサーを見たときに虹色のプレートのように見えます。
ちなみにこの時点でどのくらいの段階で量子化するのか、12bit / 10bit / 8bit のような映像や画像のbit数が決まってきます。
2.5 Microlens / マイクロレンズ
この受光部(フォトダイオード)はギチギチに敷き詰めれるわけではありません。どうしても構造上の問題で(配線や仕切り、素子など)隙間がどうしてもあります。
ここに来た光は受光部には来ないので意味がありません。ただ反射して戻っていくなどするだけです。
これでは光量不足でノイズが出たりなど問題があります。
受光部と受光部の間にマイクロレンズと呼ばれるレンズを間に置くことで上手いように反射・屈折が行われ受光部まで光が届きます。
こうすることでデジタルノイズを減らすようなことができます。
3.1 Demosaicing / デモザイク
ベイヤー配列のデモザイクをディベイヤーと言います。
デモザイク(ディベイヤー)とは、露光して取り込んだ情報をカラー画像に変換する作業のことです。
単純にベイヤー配列した情報を画素に置き換えたとすると下記のような画像になります。
これじゃだめなので、何かアルゴリズムが必要です。
このベイヤー配列の情報を
2x2の配列を取り出して考えます。左上からRG下の段へ行ってGBとなっています。2x2から1つの画素の色を輝度の式等のアルゴリズムと組み合わせて補完して計算します。
こうして画像をカラーにしていきます。
ただ、このままだとフォトダイオードの数に対して半分くらいの画素しか作れません。
4Kのセンサー能力がありながら、2Kしか画素に置き換えれません。もったいないです。なので、
一つ右に行をずらして2x2のGRBGで画素を作り(5番6番)
一つ段をずらして2x2のGBRGで画素を作り(7番8番)
真ん中にずらして2x2のBGGR(9番)で画素を作ることで、
多くの画素情報をつくることができます。
このデモザイクのアルゴリズムは様々存在し、カメラによっても異なります。
3.2 Moire / モアレ
このデモザイクの作業では一定のアルゴリズムに沿ってカラー情報を決めていきます。なので状況によっては偶然に現実世界とは見た目が違う状態が生まれます。このようなアーティファクトの中でモアレというものがあります。
渦や波のような変な模様が生まれるものです。
線があるような服をきている場合や、チェックのような服、網のような模様とかそんなときに現れやすいです。
3.3 RAWデータ
REDやARRI、CANON、Blackmagic.....etcの各カメラメーカーでRAWファイルでの撮影が可能なカメラが増えてきました。
RAWデータというのはどんな状態なのでしょうか?
RAWデータというのはデモザイク(ディベイヤー)する前の状態のデータです。つまり画素として変換する前のデータです。
本来はカメラ内でこのディベイヤーが行われてしまうのですが、あえて行わずに後にソフトウェア内でディベイヤーします。
Photoshop やLightroom、Luminar等の画像のRAWファイルを扱えるソフトウェア
Davinci Resolve やbaselight、Flame等の映像のRAWファイルを扱えるソフトウェアなど色々あります。
これらのソフトウェアではディベイヤーを行なっていることになります。
通常このディベイヤー作業をソフトウェア上で行うので計算に時間がかかり、RAWファイルはNLE上で重たいものになります。
Blackmagicから出ているBRAWではこのディベイヤーの一部をカメラ内で行なった変わり種のRAWファイルで、
容量、動作が軽いようなRAWファイルとなっています。
4.1 YUV / YCbCr / YPbPr
YUVとはRGBやHSL,CMYKのようなカラーモデルの一つです。
Yを輝度信号、U,Vを色差信号として扱い色を表現します。
ディベイヤーされたRGBの画素を持つデータは、多く場合はエンコーディングとともにYUVへと変換されます。
RGBはそのままでは扱いづらく、データの伝搬・保存に適さない場合があるのでYUVにて圧縮されることが多いです。
YUVとYCbCrとYPbPrは厳密には違うものを表している言葉ですが、大雑把には同じことを表しているので同じと思っても構いません。
アナログ信号にCbCr、デジタル化された数値にはPbPrを用いて表す場合、SD映像用の色差コンポーネント成分にCbCr、HD映像用の色差コンポーネント成分にはPbPrを用いる場合がある。
明確な統一はされていないみたいです。。
これらの方式は下の画像を見ればわかるが、ヘリングの反対色的なモデルを使っていることがわかると思います。
4.2 クロマサンプリング
YUV(YCbCr)では、色差信号をある程度省いてもRGBで表示させた時の画像との見た目上の差が変わらなかったりします。
これは輝度のところで説明した通り、人間は色に対してよりも輝度に対して敏感だからです。
この特性を利用して色差データをある程度省いて、軽くする方法がクロマサンプリングです。
データを伝搬する等の目的に対しては軽いので非常に役立つのだが、ポストプロダクションにおけるキーイングやクオリファイアー、カラーコレクション、カラーグレーディング等の色情報を用いる場合には顕著に劣化します。このような作業をする場合にはクロマサンプリングで色情報が失われていないデータが必要です。
キーイングやクオリファイアー等の作業では、四角いブロックのようなノイズが出てくることがあります。これはクロマサンプリングの仕組みのせいです。下で説明します。
クロマサンプリングは
主に、4:4:4 / 4:2:2 / 4:2:0 / 4:1:1と呼ばれる種類があります。
色差情報について、4*2画素の大きさを考えます。(輝度情報については省く気がないので考えなくても大丈夫です。下記にちなみに省くとどうなるかも書いてあります。)
それぞれの数値の意味は、一桁目は横方向のサンプルの数を表し、基本的に4となります。重要なのは、ここ以下の数値です。
二桁目は、上の行の画素に現れるサンプルの数(水平解像度)を表します。水平方向の4つ中それぞれ、別々な色をサンプルするのであるならば「4」。水平方向の4つ中2つの異なる色をサンプルするなら「2」などです。
最後の3桁目は、上の行のそれぞれ4つの画素に対して、真下の画素が異なる色をサンプルしているかどうかを表しています。
4つとも異なる色の場合、「4」。全て同じいろなら「0」です。
4:4:4
4:4:4ならば、Y:U:Vチャンネルそれぞれが1画素あたりに色差信号を何も省かない方式です。
基本的には劣化が無いようなデータです。基本的には、色差を圧縮するためにYUVに変換するのであるのですが、何も省いていないので、RGBのデータとなんら変わりがなく、4:4:4 RGB〇〇bitなどとコーデックには書かれているものがあります。
4:2:2
4:2:2ならば、水平方向で2つの異なるサンプル。垂直方向で2つの異なるサンプルで構成されています。結果として、色差信号を輝度信号の半分の量(50%)で表現しています。
これにより全体のデータ量としては2/3になります。
画像を見てわかる通り、見た目上は問題ないような表示ができていると思います。
4:1:1
水平方向では1つのサンプル。垂直方向でもまた異なるサンプルを一つとしている形式です。結果として、色差信号は元の1/4の量になっています。
全体のデータ量としては、半分(1/2)になっています。
1/4までの色差データを無くすので水平に4つ分の画素が同じ色になるため色がぼけた見た目になります。
これでもまぁまぁ見た目上問題ないような状態で見えると思います。
4:2:0
水平方向には2つの異なるサンプルがあり、垂直方向には同じサンプルがきています。
これもまた、全体のデータ量としては半分になっています。
これでもまぁまぁ見た目上問題ないような状態で見えると思います。
これは2x2のブロックで同じ色を表現する感じです。
クロマサンプリングの影響として
だんだん色が変化していく様子がわかると思います。
消した、省略した、圧縮した、無くしたデータは帰ってきませんので撮影時はなるべく多くのデータを持っているようなデータが望ましいでしょう。
このような感じで色差信号を省いて圧縮・エンコーディングして表現する方法があります。
現在のデジタルカメラでは4:2:2収録や4:4:4収録、RAWで撮ることができるようなカメラも増えてきています。
ちなみに、輝度信号を減らすとどうなるかというと
例として仮に2:2:2のような画像を作ったとすると上記のように見えます。あからさまに見た目でわかるような劣化を感じます。
4.3 RGBとYUV
RGBでカメラでディベイヤーされたデータはYUVのコーデックで保存されたとします。
それを画像としてディスプレイ上に表示させるにはまた、RGBの信号に変換しないといけません。
一次変換のような式を使って変換します。
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
U = -0.1146 * R -0.3854 * G + 0.5000 * B
V = 0.5000 * R -0.4542 * G - 0.0458 * B
R = Y -0.0002 * U + 1.5748 * V
G = Y - 0.1873 * U - 0.4681 * V
B = Y + 1.8556 * U + 0.0001 * V
基本的には数値の切り捨てやクリッピング(黒つぶれ、白飛び)などがあるので、同じ数値に戻るようなことはないと思います。
RAWデータはディベイヤーする前なのでRGBでもYUVでも無いです。
RGBデータは Prores4444, Prores4444XQ, DNxHR444などのコーデックがそれにあたります。
YUVデータは Prores422HQ, Prores422, Prores422LT....みたいなコーデックがそれにあたります。
References
キヤノン:映画制作機器 CINEMA EOS SYSTEM|EOS C500 4K映像制作セミナーレポート① 「4K高画質編」
Colorz|16 クロマサンプリング
Understanding Digital Camera Sensors
カメラのセンサーとベイヤー配列を理解する
技術|イメージセンサー:モバイル|製品情報|ソニーセミコンダクタソリューションズグループ
Colorz|15 RGBとYUV
Colorz|13 Logカメラ
Colorz|11 単板式カメラの原理
Colorz|07 CIE XYZ色空間
CMOSセンサーについて| 技術情報 | サポート | HDV | 映像制作機材 | プロフェッショナル/業務用製品情報 | ソニー
デジカメの画素数が多いほど画質が低下するのはなぜ?
CCD(撮像素子)の仕組み(第二十七回) | デジタルカメラ講座 | デジタルカメラ LUMIX(ルミックス) | お客様サポート | Panasonic
XYZ色空間に迫る(1)
A・F・T色彩検定公式テキスト1級編
AFT色彩検定 3級 カラーコーディネート合格講座 PDF
NCS表色系とは | 色彩関連情報 | DICカラーデザイン株式会社
心理四原色と視細胞について
視覚系とカラー認識-2 色覚説
比視感度 wikipedia
カメラ接続のためのボード設定方法(ベイヤーカメラ編)
- AIPToolを使ってベイヤーカメラで撮像しよう!-
ベイヤーフィルター wikipedia
改めてRAWデータ考察
Moire Patterns Around Us
Colorz|15 RGBとYUV
YUVとRGBの違い - 改訂版
YUV wikipedia
YCbCrとクロマサブサンプリング
クロマサブサンプリングを知る - いまさら聞けない 4:2:2って何?
EIZO Technical Overview RGBデータとYUVデータについて
【真実】デジカメの画素ピッチは大きいほど画質が綺麗!その理由は? | あなたにピッタリのコンデジ選び
画素数?グレーディング耐性?映像クリエイターにとって知っておくべきデジタル一眼の選び方 | Vook(ヴック)
digital_video_introduction/README-ja.md at master · leandromoreira/digital_video_introduction · GitHub