SmTIAS 撮影アプリの定量撮影モードの出力フォーマットが PNG から DNG (RAW_SENSOR) に変更された(TECH_01)ことに伴い,照明均一性評価の結果が PNG 経路と DNG 経路でどのように変わるかを比較した.
結論を先に述べると,PNG→DNG は単なるファイル形式の変更ではなく,「何を測っているか」が変わる.PNG は sRGB エンコード済み・端末 ISP でレンズシェーディング補正済みの「処理後」データであり,DNG は linear・補正前の「物理生信号」である.このため評価指標の数値は大きく変化する.
| 項目 | 内容 |
|---|---|
| PNG サンプル | data/smtias/whiteboard/SmTIAS_20260408_140317.png(2026-04-08 撮影) |
| DNG サンプル | data/smtias/quantitative/SmTIAS_QM_20260601_102753.dng(2026-06-01 撮影,SH-02M 定量モード) |
| 評価領域 (ROI) | config/roi_config.json の smtias.whiteboard(白板中央,全条件で同一) |
| 向き | portrait に統一(DNG は landscape native のため rot90(-1) で PNG と整合) |
| 評価指標 | CoV / max-min比 / 中心-周辺比 / 勾配 / 動径 min/max 比(20点輪帯平均の最小/最大) |
重要な前提(本報告書の限界): PNG(4月)と DNG(6月)は別セッションの撮影でフレーミングが異なる.したがって本報告書は,TECH_01 の検証 V1 が要求する「同一シーンを PNG/DNG で連続撮影した厳密な対照比較」ではない.評価手法・ドメインの違いが指標に与える影響を既存サンプルで定量的に示すものである.厳密な同一シーン比較は今後の課題(後述).
PNG 経路と DNG 経路は,評価に入る前の信号の性質が根本的に異なる.
| 観点 | PNG(従来) | DNG(新規・定量モード) |
|---|---|---|
| 信号ドメイン | sRGB(OETF/ガンマ適用済み) | linear(TONEMAP=CONTRAST_CURVE_LINEAR,OETF 未適用) |
| レンズシェーディング | 端末 ISP で補正済み(SHADING_MODE=HIGH_QUALITY が YUV/JPEG に適用) | 未補正(RAW_SENSOR は ISP 前.補正は DNG OpcodeList2 の GainMap / meta.json の lscMap として付随するのみ) |
| ビット深度 | 8bit | 10bit |
| 入射光量との関係 | ガンマで非線形 | 比例(放射輝度リニア) |
→ つまり PNG をそのまま評価した「従来値」と,DNG を物理的に正しく評価した値は,同じものを測っていない.公平に比較するにはドメインを揃える必要がある.
同一 ROI で算出した均一性指標(数値が大きいほどムラが大きい.動径 min/max のみ 1.0 に近いほど均一):
| 条件 | CoV | max/min | 中心/周辺比 | 勾配(%) | 動径 min/max |
|---|---|---|---|---|---|
| PNG sRGB(従来評価) | 0.0423 | 1.387 | 1.066 | 6.23 | 0.8964 |
| PNG 擬似linear化(inverse-sRGB 仮定)※ | 0.0901 | 2.031 | 1.148 | 12.88 | 0.7902 |
| DNG linear(LSC 補正なし) | 0.1477 | 2.287 | 1.456 | 31.33 | 0.5304 |
| DNG linear(LSC 補正あり) | 0.0689 | 1.641 | 1.095 | 8.69 | 0.8533 |
※ 「PNG 擬似linear化」は近似であり,真のシーン linear(入射光量比例)ではない.詳細は考察「4. PNG は厳密には linear 化できない」を参照.
数値変化は主に3つの要因に分解できる.
同じ PNG データでも,sRGB のまま(CoV 0.0423)か擬似linear化(CoV 0.0901)かで CoV が約2倍変わる(撮影は同一,ドメインのみ変更).sRGB の OETF は暗部を持ち上げ明部を圧縮するため,ムラを実際より穏やかに見せる.従来の PNG 評価値(CoV 0.042)は,このガンマ圧縮により楽観的に小さく出ていた.
なお CoV・max/min・動径比はスケール不変なので,0〜255 と 0〜1 のスケール差では変わらない.変化はあくまでドメイン(ガンマ)によるもの.
DNG raw は未補正のため,レンズビネット(端ほど暗い)が指標に混入する.LSC 補正なしの DNG は中心/周辺比 1.456・勾配 31.3%・動径 min/max 0.530 と大きなムラを示すが,これは照明ムラではなくレンズ特性を多く含む.lscMap を順方向適用してレンズビネットを除去すると,中心/周辺比 1.456→1.095,勾配 31.3%→8.7%,動径 min/max 0.530→0.853 と劇的に平坦化する(残りが照明そのもののムラ).
PNG(4月)と DNG(6月)は別撮影で,照明配置・フレーミング・距離が異なる.この差も数値に含まれるため,厳密な大小比較はできない(前提参照).
上表の「PNG 擬似linear化」は inverse-sRGB OETF を掛けたものだが,これは真のシーン linear(入射光量比例)を復元しない.理由:
linear生信号 →[WB・カラー行列・レンズ補正・トーンカーブ・NR・シャープ化]→ 表示RGB → sRGB符号化 → 8bit を経る.inverse-sRGB が戻せるのは最後の符号化だけで,得られるのは「表示参照 linear」.間のトーンカーブ(端末固有・非公開のコントラスト曲線)は焼き込まれたままで,入射光量には比例しない.→ つまり PNG は確実には linear 化できない.これこそが定量 DNG モード採用の理由(TECH_01 背景「実機 PNG 自体が定量データとして揺らぐ」)であり,DNG (RAW_SENSOR, TONEMAP=CONTRAST_CURVE_LINEAR) は最初から真のシーン linear を出すことでこの問題を回避する.
両者を linear ドメインに寄せると比較の目安は得られる(PNG は上記の通り擬似linear=近似である点に注意):
src/io/dng_loader.py, src/analysis/spatial.py, scripts/run_uniformity_dng.pydocs/PROGRESS.md