写真の物理学 ㉟ HDRとトーンマッピングの数学

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

自然界の輝度範囲は20EVを優に超えるが、一般的なSDRディスプレイの表示能力はせいぜい8から10EV程度にすぎない。この根本的なギャップに対処するために、HDR合成からトーンマッピング、PQ曲線やHLGによるHDR表示規格までの技術が発展してきた。本稿ではDebevec-Malikの応答関数推定からReinhardオペレータ、バイラテラルフィルタ分解、ST 2084の知覚的均等量子化までを数学的に導出する。

シーンの輝度分布

写真撮影において「ダイナミックレンジが足りない」場面を具体的に考える。

窓のある室内を撮影するとき、窓の外の輝度は10,000 cd/m²以上に達しうるが、室内の暗い家具は10 cd/m²程度だ。輝度比は1,000:1、すなわち約10EVに及ぶ。逆光で人物を撮る場合、背景の空と顔の影の輝度差は12から15EVに達することもある。

ダイナミックレンジとビット深度で述べたように、現代の高性能なフルサイズセンサーはベースISO時に14から15EV程度のダイナミックレンジを持つ。これは多くのシーンに対して十分だが、太陽を含む風景や窓越しの室内では依然として不足する。

人間の眼の光学で論じるように、人間の視覚系は瞳孔の調節と網膜の順応を組み合わせることで、同時には約14EV、時間をかけた適応を含めれば約24EVもの輝度範囲を知覚できる。ただしこれは同時知覚ではなく、視線の移動と順応を伴う動的な過程だ。写真は一枚の静止画にすべてを収めなければならないという点で、視覚系よりも厳しい制約を課される。

複数露出からのHDR合成

センサーの単一露光では捉えきれない輝度範囲を記録するために、異なる露出で撮影した複数のフレームを統合する手法がHDR合成だ。

基本原理

短い露光時間のフレームからはハイライトの情報を、長い露光時間のフレームからはシャドーの情報を取り出す。各露光 $j$ における画素 $i$ の記録値 $Z_{ij}$ は、シーンの放射輝度 $E_i$ と露光時間 $\Delta t_j$ に対して次の関係を持つ。

$$ Z_{ij} = f(E_i \cdot \Delta t_j) $$

ここで $f$ はカメラの応答関数(Camera Response Function, CRF)であり、センサーへの入射エネルギーをデジタル値に変換する関数だ。RAWデータの場合、$f$ はほぼ線形だが、JPEG出力ではガンマ補正やトーンカーブが適用されたあとの非線形な関数になる。

重み付き合成

複数の露光から放射輝度マップを復元するには、各露光の信頼性を考慮した重み付き平均を計算する。応答関数の逆関数 $f^{-1}$ が既知であれば、画素 $i$ における放射輝度の推定値は次のように書ける。

$$ \ln \hat{E}_i = \frac{\sum_{j=1}^{P} w(Z_{ij}) \left[ \ln f^{-1}(Z_{ij}) - \ln \Delta t_j \right]}{\sum_{j=1}^{P} w(Z_{ij})} $$

$P$ は露光枚数、$w(Z)$ は重み関数だ。重み関数の設計が合成品質を左右する。

直感的には、コード値が中間域にある画素ほど信頼性が高い。飽和に近い値(白飛び付近)やノイズの物理学で定量化するノイズフロアに近い値(黒つぶれ付近)は信号の信頼性が低い。最も単純な重み関数は三角関数(ハット関数)で、コード値の中央で最大値をとり、両端でゼロに落ちる。

$$ w(Z) = \begin{cases} Z - Z_{\min} & (Z \leq \tfrac{Z_{\min} + Z_{\max}}{2}) \\ Z_{\max} - Z & (Z > \tfrac{Z_{\min} + Z_{\max}}{2}) \end{cases} $$

ここで $Z_{\min}$ と $Z_{\max}$ はコード値の最小値と最大値(たとえば0と255)だ。

カメラ応答関数の推定

HDR合成を正確に行うには、カメラの応答関数 $f$ を知る必要がある。RAWデータであればほぼ線形だが、JPEGからHDR合成を行う場合や、応答関数の精密な校正が必要な場合には、$f$ を実験的に推定しなければならない。

Debevec & Malikの手法

1997年にPaul DebevecとJitendra Malikが発表した手法は、HDR合成の事実上の標準となった。彼らは応答関数の対数 $g(Z) = \ln f^{-1}(Z)$ を未知関数とし、次の最適化問題を定式化した。

$$ \mathcal{O} = \sum_{i=1}^{N} \sum_{j=1}^{P} \left\{ w(Z_{ij}) \left[ g(Z_{ij}) - \ln E_i - \ln \Delta t_j \right] \right\}^2 + \lambda \sum_{z=Z_{\min}+1}^{Z_{\max}-1} \left[ w(z) \, g''(z) \right]^2 $$

第一項はデータ適合項であり、推定された応答関数と放射輝度が観測値と整合するよう求める。第二項は滑らかさの正則化項であり、$g$ の二階微分を抑制することで応答関数が滑らかな曲線になるよう制約する。$\lambda$ は正則化の強さを制御するパラメータだ。

$N$ はサンプリングされた画素数、$P$ は露光枚数である。未知変数は $g(Z)$ の値($Z_{\min}$ から $Z_{\max}$ までの各コード値に対して1つ)と放射輝度 $\ln E_i$(各画素に対して1つ)だ。この最適化問題は特異値分解(SVD)による線形最小二乗法で解ける。

Debevec-Malik法の核心は、相反則の仮定にある。センサーの応答は入射エネルギー $E \cdot \Delta t$ にのみ依存し、$E$ と $\Delta t$ の個別の値には依存しないという仮定だ。これは通常のデジタルセンサーでは十分に成り立つ。

トーンマッピングの必要性

HDR合成によって得られた放射輝度マップは、シーンの物理的な輝度分布を忠実に記録している。しかし、これをそのまま通常のディスプレイに表示することはできない。

SDRディスプレイのピーク輝度は100から300 cd/m²程度、コントラスト比は1,000:1前後であり、ダイナミックレンジは約10EVにすぎない。20EVを超えるHDR画像をこの範囲に収めるには、何らかの圧縮が不可避だ。

単純にクランプ(範囲外の値を切り捨て)すれば、ハイライトは白飛びし、シャドーは黒つぶれする。線形にスケーリングすれば、コントラストが失われて平坦な画像になる。ガンマとトーンカーブの知覚心理物理学で述べたように、人間の視覚は輝度に対して非線形な応答を持つ。この非線形性を活かし、知覚的に自然な印象を保ちながらダイナミックレンジを圧縮する関数がトーンマッピングオペレータ(TMO)だ。

トーンマッピングの目標は、HDR画像の「見た目の印象」をLDR(Low Dynamic Range)ディスプレイ上でできる限り再現することにある。物理的な忠実性ではなく、知覚的な妥当性が評価基準となる。

グローバルトーンマッピング

グローバルトーンマッピングは、画像内のすべての画素に同一の変換関数を適用する手法だ。実装が単純で処理が高速である反面、シーン全体の輝度分布に対して一律に圧縮を行うため、局所的なコントラスト保持には限界がある。

Reinhardのオペレータ

2002年にErik Reinhardらが提案したトーンマッピングオペレータは、グローバルTMOの中で最も広く知られている。このオペレータは、露出の統合と逆数則で物理的根拠を導いたアンセル・アダムスのゾーンシステムにおける露出決定の考え方を数学的に定式化したものだ。

まず、シーンの「キー」(全体的な明るさの指標)として対数平均輝度を計算する。

$$ \bar{L}_w = \exp\!\left( \frac{1}{N} \sum_{x,y} \ln(\delta + L_w(x,y)) \right) $$

$L_w(x,y)$ は画素 $(x,y)$ の輝度、$N$ は全画素数、$\delta$ はゼロ除算を防ぐための微小値(典型的には10⁻⁴程度)だ。対数平均は算術平均よりも極端に明るい画素の影響を受けにくく、シーンの代表的な輝度を安定して推定できる。

次に、キー値 $a$(典型的には0.18、18%グレーに対応)を用いて各画素の輝度をスケーリングする。

$$ L(x,y) = \frac{a}{\bar{L}_w} \cdot L_w(x,y) $$

これにより、シーンの対数平均輝度がキー値 $a$ に一致するように正規化される。この操作はアダムスのゾーンシステムにおける「露出決定」に対応する。

最後に、圧縮関数を適用する。最も単純な形は次の式だ。

$$ L_d(x,y) = \frac{L(x,y)}{1 + L(x,y)} $$

この関数は $L \to 0$ では $L_d \approx L$(暗部はほぼ線形に保持)、$L \to \infty$ では $L_d \to 1$(ハイライトは1に漸近)という性質を持つ。すべての正の実数を0から1の区間に写像する単調増加関数であり、いかなる輝度値も飽和しない。

拡張Reinhardオペレータ

基本形の $L/(1+L)$ には、ハイライトが一律に圧縮されるため、明るい光源などが「輝いて見えない」という問題がある。Reinhardはこれに対処するため、拡張形を提案した。

$$ L_d(x,y) = \frac{L(x,y) \left(1 + \dfrac{L(x,y)}{L_{\text{white}}^2}\right)}{1 + L(x,y)} $$

$L_{\text{white}}$ はバーンアウト(白飛び)を許容する閾値だ。$L > L_{\text{white}}$ の領域は1を超える出力を生み、最終的にクリップされて純白になる。$L_{\text{white}} \to \infty$ では基本形に一致し、$L_{\text{white}}$ を小さくするほどハイライトのバーンアウトが増えてコントラスト感が高まる。

グローバルTMOの限界

グローバルTMOの根本的な限界は、画像全体の統計量(対数平均輝度)だけを手がかりにしている点にある。暗い森の中に一条の光が差し込むシーンでは、大部分が暗い画素で占められるため対数平均輝度が低くなり、光の差し込み部分が白飛びしやすい。逆に、明るい空の下に小さな影がある場合、影のディテールが犠牲になりやすい。

人間の視覚系は局所的な順応機構を持っており、視線を移動させるたびに周囲の輝度に適応する。この局所適応を模倣するのが、次に述べるローカルトーンマッピングだ。

ローカルトーンマッピング

ローカルトーンマッピングは、画像の各領域の輝度分布に応じて異なる圧縮を適用する手法だ。暗い領域では暗部のディテールを引き出し、明るい領域ではハイライトを保持する。

Durand & Dorseyのバイラテラルフィルタ法

2002年にFrédéric DurandとJulie Dorseyが提案した手法は、画像をベースレイヤー(大域的な輝度変動)とディテールレイヤー(局所的なコントラスト)に分解する。

対数輝度画像 $\ln L$ にバイラテラルフィルタを適用してベースレイヤーを抽出する。

$$ B(x,y) = \frac{\sum_{s,t} G_{\sigma_s}(s,t) \, G_{\sigma_r}\!\big(\ln L(x,y) - \ln L(x+s, y+t)\big) \, \ln L(x+s, y+t)}{\sum_{s,t} G_{\sigma_s}(s,t) \, G_{\sigma_r}\!\big(\ln L(x,y) - \ln L(x+s, y+t)\big)} $$

$G_{\sigma_s}$ は空間ガウスカーネル、$G_{\sigma_r}$ はレンジガウスカーネルだ。バイラテラルフィルタはエッジを保存しながら平滑化を行う。RAW現像の信号処理で扱ったノイズリダクションにおけるバイラテラルフィルタと同じ原理である。

ディテールレイヤーは次のように得られる。

$$ D(x,y) = \ln L(x,y) - B(x,y) $$

ベースレイヤーのコントラストを圧縮し(たとえばリニアにスケーリングして出力のダイナミックレンジに収める)、ディテールレイヤーをそのまま加算して再合成する。

$$ \ln L_{\text{out}}(x,y) = s \cdot B(x,y) + D(x,y) + o $$

$s < 1$ はベースレイヤーの圧縮率、$o$ はオフセットだ。この手法の利点は、大域的な輝度変動(ベース)だけを圧縮し、局所的なテクスチャやエッジ(ディテール)を保存できることにある。結果として、グローバルTMOでは失われがちな局所コントラストが維持される。

ローカルTMOの課題

ローカルTMOには特有の問題がある。最も顕著なのがハロー(halo)アーティファクトだ。明暗の境界付近で局所的な圧縮量が急激に変化すると、境界に沿った不自然な明暗の縁取りが出現する。バイラテラルフィルタ法はエッジ保存特性によってハローを軽減するが、完全には防げない。

また、圧縮が強すぎると画像全体のコントラストが均一化され、いわゆる「HDRっぽい」不自然な見た目を生む。自然の光にはコントラストの勾配があり、それを均してしまうと現実感が損なわれる。

知覚ベースのトーンマッピング

人間の視覚系は、膨大なダイナミックレンジの光環境に順応する精巧な機構を備えている。知覚ベースのトーンマッピングは、この順応機構を模倣することで、より自然な階調再現を目指す。

視覚順応のメカニズム

まぶたの裏に残る灰色の光で触れたように、人間の視覚系は完全な暗闇でも内部ノイズ(固有光)を知覚している。この固有光を基準として、暗い環境から明るい環境まで、約24EVの範囲に順応できる。

順応は複数の段階で起きる。瞳孔径の変化(約1EV分の調節)、網膜の光化学的適応(錐体・桿体の感度変化)、神経回路レベルのゲイン調節が階層的に作用する。特に重要なのは局所的な順応だ。網膜上の各領域は、その周辺の平均輝度に応じて独立に感度を調節している。

Reinhard局所オペレータ

Reinhardの2002年の論文には、グローバルオペレータだけでなく局所オペレータも含まれている。局所版では、各画素の周囲の「局所適応輝度」$V_1(x,y,s)$ をガウシアンフィルタで推定し、適切なスケール $s$ を自動的に選択する。

$$ L_d(x,y) = \frac{L(x,y)}{1 + V_1(x,y, s_m(x,y))} $$

スケール $s_m$ はセンターサラウンド関数(異なるスケールのガウシアンの差)が閾値を超えない最大のスケールとして決定される。これにより、エッジを跨がないように局所適応輝度が推定され、ハローアーティファクトが抑制される。

この設計は、視覚の知覚心理物理学で詳述する側抑制(lateral inhibition)の計算論的な模倣と見ることができる。

PQ曲線とST 2084

ここからは、HDRディスプレイの出力側の数学に移る。SDRディスプレイが前提としていた「ガンマ2.2」の時代は終わりつつあり、HDR時代には新しい伝達関数が必要になった。

PQ曲線の心理物理学的根拠

PQ(Perceptual Quantizer)曲線は、SMPTE ST 2084規格として2014年に標準化された。Dolby Laboratoriesが開発したこの曲線は、視覚の知覚心理物理学で定式化するコントラスト感度関数(CSF)に基づいて設計されている。

設計の出発点は、Peter Bartenが1999年に提案したCSFモデルだ。Bartenのモデルは、人間が検出できる最小のコントラスト(弁別閾)を、輝度、空間周波数、パターンサイズなどの関数として予測する。PQ曲線は、Bartenモデルが予測する弁別閾の刻みに合わせてコード値を配分する。つまり、人間が「ちょうど区別できる」明るさの差に1コード値を割り当てる設計だ。

10ビットのPQ曲線は、0から10,000 cd/m²の輝度範囲にわたって、知覚的に均等な約1,000段階の区別可能なステップを提供する。12ビットでは約4,000段階となり、知覚的な弁別限界を十分に下回る精度が確保される。

PQ曲線の数式

PQ曲線のEOTF(Electro-Optical Transfer Function、ディスプレイがコード値から輝度を出力する関数)は次のように定義される。

$$ L = 10000 \cdot \left( \frac{\max\!\left(E^{1/m_2} - c_1,\; 0\right)}{c_2 - c_3 \cdot E^{1/m_2}} \right)^{1/m_1} \quad [\text{cd/m}^2] $$

その逆関数(輝度をコード値に符号化する関数)は次の式だ。

$$ E = \left( \frac{c_1 + c_2 \cdot Y^{m_1}}{1 + c_3 \cdot Y^{m_1}} \right)^{m_2} $$

ここで $Y = L / 10000$(正規化輝度)であり、定数は次の値をとる。

$$ m_1 = \frac{2610}{16384} \approx 0.1593, \quad m_2 = \frac{2523}{32} \approx 78.84 $$

$$ c_1 = \frac{3424}{4096} \approx 0.8359, \quad c_2 = \frac{2413}{128} \approx 18.85, \quad c_3 = \frac{2392}{128} \approx 18.69 $$

これらの定数は $c_1 = c_3 - c_2 + 1$ の関係を満たす。一見すると複雑な式だが、本質は知覚的に均等な量子化を実現するために最適化されたべき乗関数の組み合わせだ。

sRGBガンマとの対比

sRGBの伝達関数がべき指数1/2.4(実効ガンマ約2.2)の単純な関数であるのに対し、PQ曲線は10,000 cd/m²という広大な輝度範囲にわたって知覚的均等性を保つために、はるかに複雑な関数形を必要とする。sRGBが設計された1990年代のCRTディスプレイは最大輝度100 cd/m²程度であり、その狭い範囲ではガンマ2.2で十分だった。PQ曲線は、100倍以上に拡張された輝度範囲に対応する必然的な進化だ。

PQ曲線はディスプレイ参照(display-referred)の絶対輝度符号化だ。コード値と絶対輝度が一対一に対応しており、コンテンツ制作者がディスプレイ上の正確な輝度を指定できる。Log収録とシネマカラーサイエンスで述べたACESのODTがRec.2020 PQ ST 2084向けの出力を生成するのは、この絶対輝度指定の仕組みを利用しているからだ。

HLG(Hybrid Log-Gamma)

PQ曲線と並ぶもう一つのHDR伝達関数が、HLG(Hybrid Log-Gamma)だ。BBCとNHKが共同開発し、ITU-R BT.2100として2016年に勧告された。

HLGの設計思想

PQが絶対輝度を符号化するのに対し、HLGはシーン参照(scene-referred)の相対輝度を符号化する。この設計の最大の利点はSDRとの後方互換性にある。

HLG信号をSDRディスプレイにそのまま入力しても、ガンマ曲線と類似した応答によって「それなりに見える」画像が得られる。専用のHDRデコーダがなくても致命的に破綻しない。これは地上波テレビ放送のような、受信機のHDR対応状況が不均一な環境において決定的な利点となる。NHKが4K/8K放送に採用したのはこの理由による。

HLGのOETF

HLGのOETF(カメラ側の変換)は、下半分を平方根関数、上半分を対数関数で構成した区分関数だ。

$$ E' = \begin{cases} \sqrt{3 \cdot E_s} & (0 \leq E_s \leq 1/12) \\ a \cdot \ln(12 \cdot E_s - b) + c & (1/12 < E_s \leq 1) \end{cases} $$

ここで $E_s$ はシーンリニア信号(正規化)、$E'$ は非線形コード値であり、定数は次の値をとる。

$$ a = 0.17883277, \quad b = 1 - 4a = 0.28466892, \quad c = 0.5 - a \ln(4a) \approx 0.55991073 $$

低輝度域の平方根関数はsRGBのガンマ曲線と近い形状を持ち、これがSDR後方互換性の源泉だ。高輝度域の対数関数は、ハイライトの広いダイナミックレンジを効率的に符号化する。名前の「Hybrid Log-Gamma」はこの構造(対数とガンマの混成)に由来する。

PQとHLGの使い分け

PQは映画やストリーミングなど、再生環境が比較的制御された用途に適している。絶対輝度の精密な指定が可能であり、制作者の意図を忠実に再現できる。

HLGはテレビ放送やライブ中継など、多様な受信機への配信が求められる用途に適している。SDR互換の安全網があり、ディスプレイの最大輝度に応じて相対的にスケーリングされるため、ピーク輝度が異なるディスプレイ間でも破綻しにくい。

HDRディスプレイの物理

HDRコンテンツの恩恵を享受するには、ディスプレイの物理学で体系的に論じる表示デバイスの特性が決定的に重要になる。

ピーク輝度

SDRディスプレイのピーク輝度は100から300 cd/m²が一般的だ。HDRディスプレイの定義にはいくつかの段階があるが、VESA DisplayHDR規格では次のような区分がある。

  • DisplayHDR 400: ピーク輝度400 cd/m²
  • DisplayHDR 600: ピーク輝度600 cd/m²
  • DisplayHDR 1000: ピーク輝度1,000 cd/m²
  • DisplayHDR 1400: ピーク輝度1,400 cd/m²

ハイエンドのOLEDテレビは1,000から2,000 cd/m²、液晶のフラッグシップモデルは2,000から4,000 cd/m²に達するものもある。PQ曲線が10,000 cd/m²まで定義しているのは、将来のディスプレイ技術の発展を見越した設計だ。

ローカルディミング

液晶ディスプレイ(LCD)は自発光ではなく、バックライトの光を液晶パネルで遮断・透過させて画像を表示する。画面全体が単一のバックライトで照らされている場合、黒を表示しようとしても完全に光を遮断できず、バックライトの光が漏れる。これがコントラスト比の制約だ。

ローカルディミングは、バックライトを複数のゾーンに分割し、画面の領域ごとにバックライト輝度を独立に制御する技術だ。暗い領域のバックライトを消灯すれば、より深い黒が得られる。

$$ \text{コントラスト比} = \frac{L_{\text{peak}}}{L_{\text{black}}} $$

ゾーン数が多いほどきめ細かい制御が可能になり、コントラスト比が向上する。フラッグシップのmini-LEDバックライト液晶では数千ゾーンを実装しており、有効コントラスト比は100,000:1を超える。

OLEDディスプレイは各画素が自発光するため、原理的にはゾーン数が画素数に等しいローカルディミングと見なせる。画素単位で完全な消灯が可能であり、理論上の黒輝度はゼロ、コントラスト比は無限大だ(実際にはパネル全体の反射光やドライバICの漏れ電流により完全なゼロにはならない)。

広色域

HDRディスプレイのもう一つの特徴が広色域への対応だ。SDR時代の標準であるRec.709(sRGBとほぼ同じ色域)に対し、HDRコンテンツではDCI-P3やRec.2020といった広い色域が使われる。色空間の数学で扱ったCIE色度図上で見ると、Rec.2020はRec.709の約2倍の面積を持つ。高輝度と広色域の組み合わせにより、HDRディスプレイは人間の知覚により近い映像表現を可能にする。

写真におけるHDRの実践

最後に、写真撮影の実務としてのHDRを整理する。

ブラケット撮影の最適化

HDR合成のためのブラケット撮影では、いくつかの物理的な条件を最適化する必要がある。

露出間隔: 各フレームの露出差は1から2EV刻みが一般的だ。間隔を広げると少ないフレーム数で広いDRをカバーできるが、フレーム間の重複領域が狭くなり、合成の接合部でノイズやトーンの不連続が生じやすい。

フレーム数: センサーのベースDRが $D_{\text{sensor}}$ EV、ブラケットの露出幅が $\Delta E$ EVのとき、合成後の理論的DRは近似的に次のように見積もれる。

$$ D_{\text{total}} \approx D_{\text{sensor}} + \Delta E $$

たとえばセンサーDRが14EVで、-2EV/0EV/+2EVの3枚ブラケットを撮影した場合、$\Delta E = 4$ EVなので合成後は約18EVとなる。5枚ブラケット(-4EV/-2EV/0EV/+2EV/+4EV)なら約22EVだ。

三脚の必要性: フレーム間で被写体やカメラが動くと、合成時にゴースト(半透明の残像)が発生する。手持ちでのHDR撮影では、高速連写とアライメント処理(位置合わせ)に頼ることになるが、大きな動きにはソフトウェア補正も限界がある。

カメラ内HDRとコンピュテーショナルHDR

現代のスマートフォンは、ユーザーが意識しないうちにHDR合成を行っている。Apple、Google、Samsungなどのプロセッサは、シャッターボタンが押される前後の複数フレームをバッファに蓄え、異なる露出の信号を合成してダイナミックレンジを拡張する。

止まったように見える景色の先へで述べたように、コンピュテーショナルフォトグラフィの核心はここにある。光学的な限界を計算処理で超える。物理的に小さなセンサーのダイナミックレンジは、大型センサーに及ばない。だが複数フレームの知的な合成により、最終出力のダイナミックレンジは物理的なセンサーDRを大きく上回る。

HDR写真のトーンマッピング

写真としてのHDR画像を最終出力する際にも、トーンマッピングは不可避だ。SDRディスプレイやプリント向けの出力では、本稿で扱ったグローバル/ローカルTMOのいずれかが適用される。

HDR対応ディスプレイ向けの出力であっても、シーンのダイナミックレンジがディスプレイのそれを超える場合にはトーンマッピングが必要だ。ただし圧縮量はSDR向けよりも小さく、よりシーンに忠実な再現が可能になる。

RAW現像ソフトにおける「ハイライト回復」や「シャドー持ち上げ」のスライダーも、本質的にはローカルトーンマッピングの一種だ。RAW現像の信号処理で述べたトーンカーブの段階で、これらの操作が数学的に実行されている。

まとめ

HDRとトーンマッピングの数学は、次の三つの段階に整理できる。

入力: 複数露出からのHDR合成。Debevec-Malik法によるカメラ応答関数の推定と、重み付き合成によるシーン放射輝度の復元。シーンの物理的な輝度分布を、可能な限り忠実に記録する段階だ。

変換: トーンマッピング。Reinhardオペレータに代表されるグローバルTMO、バイラテラルフィルタ分解に基づくローカルTMO、そして人間の視覚順応を模倣した知覚ベースのTMO。広大な輝度範囲を限られた表示範囲に圧縮しながら、知覚的な自然さを保つ段階だ。

出力: HDRディスプレイ向けの伝達関数。PQ曲線は知覚的均等量子化に基づく絶対輝度符号化であり、HLGはSDR後方互換性を持つ相対輝度符号化だ。ローカルディミング、ピーク輝度、広色域といったディスプレイの物理特性が、最終的な視覚体験を決定する。

これらすべての技術の根底にあるのは、ひとつの事実だ。現実の光は計測可能な物理量だが、人間がそれを「見る」過程は徹底して非線形であり、文脈依存であり、適応的だ。HDRの技術は、物理と知覚のあいだに架ける橋の設計図にほかならない。

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