写真の物理学 ㉘ ダイナミックレンジとビット深度

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

カメラのスペックに並ぶ「14bit RAW」や「ダイナミックレンジ○○EV」は、数字が大きいほど良いと思われがちだ。しかしダイナミックレンジはセンサーのウェルキャパシティとリードノイズの比で決まる物理量であり、ビット深度はその情報を損なわずに格納する器の大きさにすぎない。本稿ではこの二つの概念を物理的に整理し、リニアRAWの構造からデュアルゲインセンサー、HDR合成までを導出する。

ダイナミックレンジの定義

ダイナミックレンジ(DR)とは、センサーが記録できる最も明るい光と最も暗い光の比である。

写真の世界では、この比をEV(Exposure Value)段で表現するのが一般的だ。1EV段は光量が2倍になることに対応する。数式で書くと、

$$ \text{DR} = \log_2 \left( \frac{I_{\max}}{I_{\min}} \right) \quad [\text{EV}] $$

となる。$I_{\max}$ はセンサーが飽和せずに記録できる最大信号、$I_{\min}$ は意味のある信号として検出できる最小値だ。

音響工学や電子工学ではデシベル(dB)表記が使われることもある。

$$ \text{DR} = 20 \log_{10} \left( \frac{I_{\max}}{I_{\min}} \right) \quad [\text{dB}] $$

1EVは約6.02dBに相当する。写真では対数の底が2であるEV表記が直感的に使いやすい。絞り1段、シャッタースピード1段、ISO感度1段という写真の露出体系がすべて2倍/半分の関係で構成されているからだ。

ウェルキャパシティとリードノイズフロア

ダイナミックレンジの上限と下限は、センサーの物理的な性質で決まる。

ウェルキャパシティ(Full Well Capacity, FWC) は、各フォトサイトが飽和するまでに蓄積できる電荷の総量だ。単位は電子数で表される。光子がフォトダイオードに入射すると光電効果で電子が発生し、その電子がポテンシャルウェル(電位の井戸)に蓄積される。蓄積量がFWCに達するとそれ以上の電荷を保持できず、信号が飽和する。これがダイナミックレンジの上限だ。

民生用カメラのFWCは、フォトサイトのサイズに大きく依存する。フルサイズセンサーで画素ピッチが大きい機種では5万から10万電子程度、APS-Cやマイクロフォーサーズではそれより小さくなる傾向がある。ピクセルが大きいほどウェルも深い。

リードノイズ(Read Noise) は、センサーの読み出し回路が生み出す電気的ノイズだ。フォトサイトに蓄積された電荷を電圧に変換し、さらにアナログ-デジタル変換(ADC)を経てデジタル値にする過程で、回路そのものが微弱なノイズを付加する。このノイズが、検出可能な最小信号を規定する。つまりダイナミックレンジの下限だ。

最新のCMOSセンサーでは、リードノイズはベースISO時に1から3電子rms程度にまで低減されている。10年以上前のセンサーでは10電子を超えるものも珍しくなかったことを考えると、この改善は大きい。リードノイズの物理的起源と他のノイズ源との定量的関係はノイズの物理学で体系的に論じている。

以上から、センサーのダイナミックレンジは次のように書ける。

$$ \text{DR} = \log_2 \left( \frac{\text{FWC}}{\sigma_{\text{read}}} \right) \quad [\text{EV}] $$

FWCが80,000電子、リードノイズが2電子rmsのセンサーであれば、

$$ \text{DR} = \log_2 \left( \frac{80000}{2} \right) = \log_2 (40000) \approx 15.3 \quad \text{EV} $$

となる。現在の高性能なフルサイズセンサーが14から15EV程度のダイナミックレンジを持つのは、この計算と整合する。

ビット深度とADCの物理

センサーが捉えたアナログ信号をデジタルデータに変換するのが、ADC(アナログ-デジタル変換器)だ。ビット深度とは、このADCが信号を何段階の離散値で表現するかを意味する(ADC以降の信号処理はRAW現像の信号処理で扱う)。

  • 12bit: $2^{12} = 4{,}096$ 段階
  • 14bit: $2^{14} = 16{,}384$ 段階
  • 16bit: $2^{16} = 65{,}536$ 段階

重要なのは、ビット深度が直接的に画質を決めるわけではないということだ。ビット深度は、センサーが捉えたダイナミックレンジを「何段階の数値で記録するか」という器の大きさを規定する。器が信号に対して十分に大きければ、器をさらに大きくしても中身は増えない。

量子化ステップ(1段階あたりに対応する信号の幅)が、リードノイズよりも十分に小さければ、ビット深度をさらに上げても記録される情報は増えない。増えるのはノイズのデジタル的な解像度だけだ。

12bit vs 14bit vs 16bit

Nビットの線形RAWファイルは、最大でNEV分のダイナミックレンジを格納できる。12bitなら約12EV、14bitなら約14EVだ。

ここで重要なのは、ビット深度はダイナミックレンジの「上限」を引き上げるわけではないということだ。ビット深度は、センサーが実際に捉えたダイナミックレンジを「損なわずに保存できるか」を決める容量の問題だ。

  • センサーのDRが11EVであれば、12bitで十分に記録できる。14bitにしても、追加の2bit分はノイズを記録するだけだ。
  • センサーのDRが14EVであれば、12bitでは器が足りない。最暗部の2EV分の情報が量子化で失われる。14bitが必要だ。
  • 16bitは、センサーのDRが16EVを超える場合に意味を持つ。しかし民生用カメラでそこまでのDRを実現しているセンサーはほぼ存在しない。

つまり結論は単純だ。自分のカメラのセンサーが実際に何EVのダイナミックレンジを持っているかが先にあり、それを損なわないだけのビット深度があればよい。数字の大きさそれ自体には意味がない。

リニアRAWデータと知覚の非線形性

ここが、ビット深度を巡る誤解の核心だ。

デジタルセンサーの応答は線形(リニア)だ。光量が2倍になれば、出力信号も2倍になる。一方、人間の視覚は非線形で、光量が2倍になっても「2倍明るい」とは感じない。これは暗順応の仕組みにも関わる、視覚系の基本的な性質であり、その定量的記述はガンマとトーンカーブの知覚心理物理学で詳述している。

この線形性がRAWファイルの構造に決定的な影響を与える。

12bit RAWファイル(4,096段階)の場合を考えてみよう。最も明るい1EV(最上位の1ストップ)は、コード値2048から4095までの2,048段階を占める。次の1EV(2番目に明るいストップ)は、1024から2047までの1,024段階。その次は512段階、256段階、128段階...と半減していく。

つまり、RAWファイルの全コード値の半分が、最も明るい1ストップの記録に使われている。

ミドルグレーが標準的な露出で最大値から概ね3段下に記録されると仮定すれば、ハイライト側が全コード値の約7/8を占め、ミドルグレーから黒までの全階調は残り1/8で表現されることになる。

12bitでは、ミドルグレー付近に256段階が割り当てられる。これは8bit JPEGが画像全体に使う段階数と同じだ。つまり、通常の写真においてミドルトーンの階調が12bitで不足することはまずない。

14bitにすることで追加される4倍のコード値は、主にシャドー領域のエンコードに恩恵をもたらす。ハイライトにはもともと十分すぎる段階数が割り当てられているため、14bitにしてもハイライトの画質は変わらない。変わるのは暗部だ。このリニアエンコーディングの非効率性こそが、動画の世界で対数的なLog収録が標準となった理由でもある。

デュアルゲインセンサーの物理

近年のセンサー技術で注目すべき進展が、デュアルゲイン(Dual Gain)あるいはデュアルコンバージョンゲイン(DCG)と呼ばれるアーキテクチャだ。

従来のセンサーでは、各フォトサイトの信号は単一の増幅率で読み出される。増幅率を上げればリードノイズの影響を相対的に減らせるが、明るい信号は飽和して失われる。増幅率を下げればハイライトの余裕は増すが、シャドーのノイズが悪化する。どちらかを選ぶしかなかった。

デュアルゲインセンサーは、この二者択一を解消する。各フォトサイトから二つの読み出しを行う。

  • 高ゲイン読み出し: 増幅率が高く、リードノイズを抑えてシャドーの信号を精密に捉える。ただしハイライトは早くクリップする。
  • 低ゲイン読み出し: 増幅率が低く、ハイライトの情報を広い範囲で保持する。ただしシャドーのノイズは大きい。

この二つの出力を合成することで、ハイライトは低ゲイン出力から、シャドーは高ゲイン出力からそれぞれ最良の信号を取り出し、単一ゲインでは到達できないダイナミックレンジを実現する。

PanasonicのDR Boost、CanonのDGO(Dual Gain Output)センサー、Sonyのデュアルゲイン技術などが、この原理に基づいている。パナソニックのGH6やキヤノンのCinema EOSシリーズの一部がその代表例だ。カメラ技術の進化が見えにくくなったと言われることがあるが、センサーの内部構造はいまなお着実に進化している。

HDR合成の信号処理的根拠

単一露光でのダイナミックレンジに限界があるならば、複数の露光を組み合わせればよい。これがHDR(High Dynamic Range)合成の基本的な考え方だ。

異なる露出で撮影した複数のフレームを統合する。短い露光のフレームからはハイライトの情報を、長い露光のフレームからはシャドーの情報を取り出し、一枚の画像に合成する。

数学的には、各ピクセルについて最も信頼性の高い(SNRが最も高い)フレームの値を採用し、重み付き平均で滑らかに接続する。露光比が2倍のフレームを1枚追加するごとに、理論上は1EVのダイナミックレンジ拡張が見込める。

たとえば、ベース露出に対して+2EVと-2EVの3枚ブラケットを撮影し合成すれば、単一フレームのDRに対して概ね4EVの拡張が期待できる。14EVのセンサーDRを持つカメラで適切な3枚ブラケットを行えば、合成後のDRは18EV前後に達しうる。

ただしHDR合成には制約がある。被写体が動いている場合、フレーム間でのずれがゴーストとして残る。三脚が必要な場面も多い。また、合成後のトーンマッピング次第で不自然な画像になるリスクもある。現像ソフトのHDR合成アルゴリズムの品質が、最終的な画質を大きく左右する。

スマートフォンのコンピュテーショナルHDRは、この合成をリアルタイムかつ手持ちで実現するために、高速連写と高度なアライメント/マージアルゴリズムを用いている。シングルショットで複数のゲインを読み出すデュアルゲインセンサーも、ある意味ではセンサーレベルで実現されたHDR合成だ。

EV段とストップの物理的対応

写真の世界で「ストップ」という単位が使われるのには、物理的な必然性がある。

光量とセンサー出力の関係は線形だが、知覚とセンサーの実用的な取り扱いは対数的だ。露出の制御で使う絞り、シャッタースピード、ISO感度はすべて「1段」が光量2倍に対応するように設計されている。この設計は偶然ではない。

人間の知覚がウェーバー-フェヒナーの法則に従い、刺激の強度に対して対数的に反応するからだ。明るさの知覚的な「均等な差」を物理量で表すと、それは等比的な差(比が一定)になる。1EVという単位は、この知覚的な等間隔に対応している。

だからこそ、ダイナミックレンジをEV段で表記すると直感的に意味が伝わる。「14EV」と言えば、「最も暗い検出可能な信号と最も明るい信号の間に、知覚的に等間隔な14段のステップがある」ということだ。

ダイナミックレンジとシーンの輝度分布

日常的な撮影で、14EVのダイナミックレンジは本当に必要なのか。

シーンの輝度比は、被写体と光の条件によって大きく変わる。おおよその目安は以下の通りだ。

  • 曇天の屋外風景: 7から9EV
  • 晴天の屋外風景: 10から12EV
  • 逆光の屋外シーン(太陽を含む画角): 15から20EV以上
  • 室内の人工照明: 5から8EV
  • 窓のある室内(窓外と室内を両方含む): 12から15EV

つまり、曇りの日の風景であれば10EVのセンサーDRでも事足りるが、逆光や窓を含む室内では14EVでも不足する場面がある。

ここで大事なのは、センサーのDRを超える輝度比を持つシーンは、単一露光では必ずどこかが犠牲になるということだ。ハイライトを守ればシャドーは潰れ、シャドーを救えばハイライトは飛ぶ。この局面で高DRセンサーは選択肢を広げてくれる。14EVのDRがあれば、後処理でシャドーを2EV持ち上げても破綻しにくい。12EVではその余地が狭い。

ただし、センサーDRの数字だけで撮影の成否は決まらない。適正露出を得るための判断、つまり何を守り何を捨てるかという選択は、物理の領域ではなく撮影者の意思の領域にある。フィルムで星空を撮るときのように、制約の中でどう振る舞うかが、写真の面白さでもある。

まとめ

ダイナミックレンジは、センサーのウェルキャパシティとリードノイズフロアの比で決まる物理量だ。ビット深度は、そのダイナミックレンジをデジタルデータとして保存する器の大きさを規定する。

ビット深度を上げても、センサーのダイナミックレンジそのものは変わらない。ビット深度の役割は、センサーが捉えた情報を損なわずに格納することだ。器が十分ならば、器を大きくしてもノイズの記録精度が上がるだけで、写真は良くならない。

RAWデータが線形であるがゆえに、ビット深度の恩恵はシャドー側に集中する。ハイライトには最初から十分すぎるコード値が割り当てられている。14bitが12bitより有利なのは、ベースISOで14EVを超えるDRを持つセンサーの暗部情報を保全できる点に限られる。

数字の大小ではなく、自分のカメラのセンサーが何EVのダイナミックレンジを持ち、それに対して何bitの記録が必要かを理解すること。それがダイナミックレンジとビット深度の正しい関係だ。

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