- デジタルカメラのRAWセンサーデータがどのような形で記録されるのかを、段階ごとに示す実験
- 初期データは14ビットADC出力を0–255 RGBに単純マッピングしたグレースケール状で、実際の明るさの範囲は限定的
- Bayerフィルタを適用して各ピクセルの色フィルタ情報を反映し、隣接ピクセルの平均によって**デモザイキング(demosaicing)**を実行
- ガンマ補正とホワイトバランス調整を経て、人間の視覚とディスプレイの非線形な明るさ認識の差を補正
- 最終的にカメラ内部のJPEG処理と比較し、「補正されていない写真」という概念が事実上存在しないことを示す
RAWセンサーデータの初期状態
- カメラセンサーが記録した元データは14ビットADC値で構成されており、これを0–255 RGBに単純変換するとグレースケール画像の形になる
- 実際のADC値の範囲は約2110~13600で、この区間を白黒基準として設定し明るさを再調整
- この段階の画像には色情報がほとんどなく、センサーは光の強さだけを測定しているため
色情報の復元過程
- カラーカメラのセンサーはBayerフィルタ配列によって、各ピクセルごとに赤・緑・青のうち1つの色だけを検出
- 各ピクセルの色フィルタに合わせて色を付けると色味は生じるが、1ピクセルあたりRGBのうち1つしか存在しない
- 隣接ピクセルの値を平均してデモザイキングを行うと、画像全体に色が復元される
明るさとガンマ補正
- 結果画像が暗く見える理由は、モニターのダイナミックレンジの限界と人間の視覚における非線形な明るさ認識のため
- 線形データをそのまま表示すると暗く見えるため、非線形ガンマカーブを適用して暗い領域を明るくする
- しかしこの過程で緑チャネルの過多が発生し、これはセンサーの緑への感度とBayer配列における緑の比重によるもの
ホワイトバランスおよび色補正
- 各色チャネルを一定の比率で調整してホワイトバランスを合わせる
- 非線形変換以前の段階に戻って緑チャネルを下げた後、再びガンマカーブを適用
- この過程を経て自然な色合いの写真が完成
カメラのJPEG処理との比較
- 同じRAWデータからカメラが生成した内蔵JPEG画像は、すでに複数の数学的補正過程を経た結果物
- コントラストやホワイトバランスを編集ソフトで調整することは、カメラ内部処理と本質的に同じ演算
- 「編集されていない写真」という概念は実際には存在せず、すべての写真は数学的処理の結果物である
- 人間の視覚を完全に再現することは難しく、ディスプレイの限界により手動補正の必要性は常に存在する
1件のコメント
Hacker Newsのコメント
各ピクセルに同じ伝達関数を適用することを「処理」と見なすべきか、少し考えさせられる
フィルム時代には ISO 400 のモノクロフィルムを 1600 で増感して使うと粗い粒子が出たが、それは写真全体に均一な「ノイズ」だった
最近のノイズ除去は驚くほど進化しているが、その過程で画像そのものが変形されることがある
たとえば、うちの IP カメラでは自転車で入ってくると車輪の一部が消えることがある。アルゴリズムがアスファルトの質感をノイズと誤認して消してしまうのだ
スマートフォンやデジタルカメラも、拡大したり低照度で見たりすると顔が「絵のよう」に見える
私としては、むしろ正直なノイズか、「なし」から現在のデフォルトまで調整できるノイズ除去アルゴリズムのほうがほしい
「画像」という抽象化レイヤーを剥がしていく記事が好きだ。結局のところ現代の写真は、信号処理にマーケティングを足したものにすぎない
Bayer パターンが RGGB(緑 50%)なのは色のバランスだけでなく、空間解像度のためでもある
人間の目は緑に最も敏感なので、緑チャンネルが輝度(細部情報)の大半を担っている
高度なデモザイキングアルゴリズムは、緑チャンネルから高解像度の輝度マップを作り、その後で赤・青を色差レイヤーとして補間する
こうした原理があるからこそ、4:2:0 クロマサブサンプリングのような映像圧縮も可能になる
もっと深く知りたければ、dcraw や libraw のソースコードを見るのを勧める。各センサーメーカーごとに「raw 電圧」を解釈するための膨大な例外処理がある
g = .299r + .587g + .114bこの比率がグレースケール画像の明るさを決める
そしてそこに引用されている詩の一節が印象的だった — 色の消えた世界を描写しつつ、結局のところ私たちが「正しい」と決めているものは単なる量子化誤差にすぎないことを皮肉っている
FFmpeg の呼び出しに RGB→輝度変換フラグを 1 つ追加するだけで解決したはずの話だ
もちろん人間の目が緑に敏感だからなのだが、それでもどこか理不尽に思える (⩺_⩹)
カメラが生成する JPEG 自体が、すでに強く処理された結果なのだから
カーブやマッピング、補正値を変えて別の JPEG を作るのは「改ざん」ではなく、単に別の解釈にすぎない
カメラセンサー関連の仕事をしているが、この記事は新人教育用としてとても良いと思う
RAW データから始めて、見慣れた出力に至るまでの流れを見せると理解が早い
「then」ではなく「than」を使うべきだという、ささいな誤字の指摘
学部時代にリモートセンシング(remote sensing) を学んだことで、センサーと信号処理をきちんと理解できるようになった
自分が見ているのは「真実」ではなく、データの部分的なビュー(view) にすぎない
人間の目、猫の目、カメラはそれぞれ異なるデータの部分集合を収集し、表現している
空間と時間を信号の追加次元として見ると、さらに興味深い
結局のところ、私たちは皆、宇宙の一部を観測するセンサーシステムにすぎないのだと思う
デジタル写真においてダイナミックレンジ圧縮とデベイヤリングは必須だが、
その一方で AI が物体を認識して「こうあるべきだ」という形で画像を幻想的に再構成するのは別問題だ
メーカー各社がこの方向に進んでおり、証拠写真の信頼性のような問題を引き起こしている
すべての画像はデータの解釈であり、無数の選択の結果だ
あえて区別するなら、グローバル編集(global) と ローカル編集(local) に分けられ、ローカル編集のほうがより「偽物」に近いとは言える
だが結局のところ、核心は意図(intent) だ
欺こうとする意図があるなら、カメラからそのまま出てきた写真であっても「偽物」になり得る
ほとんどの人はフィルター適用を「偽物」だと考えるが、実際にはすべての写真にフィルターが適用されている
その過程自体を「偽物」と呼ぶのは無意味だ
映画 Tim’s Vermeer の引用を思い出した
「芸術と技術は分離されるべきだという近代的な考えは間違っている」という言葉のとおり、
芸術と技術の融合こそが黄金時代の特徴だった
また、John Lind の The Science of Photography と
Bob Atkins のセンサー解説 もおすすめだ。
とりわけピクセルウェルサイズがなぜ重要なのかを説明した部分が印象深かった
線形データをそのまま表示すると暗く見えるのは、モニターの限界のせいだと思う
ビット深度が十分に大きければ、ガンマ補正なしで線形光のまま表示することもできるのではないかと思う
人間の輝度知覚は線形ではないので、どこかの段階で非線形化が必要になる
計算は 16 ビット以上の線形色空間で行い、表示直前にガンマを適用するのが理想的だ
昔は非線形 RGB でブレンドしていたため、暗部のバンディングが起きることがあった
CRT は電子銃の非線形応答を補正するためにガンマを使い、フィルムや CMOS センサーも光に対する感度が対数的なので、似たような処理を行う
「未加工の写真」というものは、実質的に存在しない
RAW は RGGB のピクセル値の集合にすぎず、これを画面の狭いダイナミックレンジに合わせるためにデータを戦略的に捨て、
ミドルグレー点を定義する過程こそが創造的解釈の領域なのだ
記事の作例があまりに人工的で多彩な照明なので、「基準となる真実」が何なのか理解しにくいという物足りなさがある
最後の 2 枚の画像を見比べて、各自の好みに応じて「結果」を判断すればいい