# PNG / DNG 照明均一性評価 比較報告書 (PNG vs DNG Uniformity Evaluation Comparison)

## 概要 (Overview)

SmTIAS 撮影アプリの定量撮影モードの出力フォーマットが **PNG から DNG (RAW_SENSOR) に変更**された（[TECH_01](../05_TECH/TECH_01_DNG対応要求仕様.md)）ことに伴い，照明均一性評価の結果が PNG 経路と DNG 経路でどのように変わるかを比較した．

結論を先に述べると，**PNG→DNG は単なるファイル形式の変更ではなく，「何を測っているか」が変わる**．PNG は sRGB エンコード済み・端末 ISP でレンズシェーディング補正済みの「処理後」データであり，DNG は linear・補正前の「物理生信号」である．このため評価指標の数値は大きく変化する．

## 前提・対象データ (Scope and Samples)

| 項目 | 内容 |
| --- | --- |
| 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 で連続撮影した厳密な対照比較」**ではない**．**評価手法・ドメインの違いが指標に与える影響**を既存サンプルで定量的に示すものである．厳密な同一シーン比較は今後の課題（後述）．

## 評価条件（ドメイン）の違い (Domain Differences)

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 を物理的に正しく評価した値は，**同じものを測っていない**．公平に比較するにはドメインを揃える必要がある．

## 結果比較 (Results)

同一 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 化できない」を参照．

## 考察：なぜ結果が変わるのか (Analysis)

数値変化は主に3つの要因に分解できる．

### 1. ドメイン（sRGB ガンマ）の影響 — 最大の要因

同じ PNG データでも，**sRGB のまま（CoV 0.0423）か擬似linear化（CoV 0.0901）かで CoV が約2倍**変わる（撮影は同一，ドメインのみ変更）．sRGB の OETF は暗部を持ち上げ明部を圧縮するため，**ムラを実際より穏やかに見せる**．従来の PNG 評価値（CoV 0.042）は，このガンマ圧縮により**楽観的に小さく出ていた**．

なお CoV・max/min・動径比は**スケール不変**なので，0〜255 と 0〜1 のスケール差では変わらない．変化はあくまでドメイン（ガンマ）によるもの．

### 2. レンズシェーディング補正の有無

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 と**劇的に平坦化**する（残りが照明そのもののムラ）．

### 3. 撮影セッションの違い

PNG（4月）と DNG（6月）は別撮影で，照明配置・フレーミング・距離が異なる．この差も数値に含まれるため，厳密な大小比較はできない（前提参照）．

### 4. PNG は厳密には linear 化できない（重要な限界）

上表の「PNG 擬似linear化」は inverse-sRGB OETF を掛けたものだが，これは**真のシーン linear（入射光量比例）を復元しない**．理由：

- **透過関数が不明**: 本サンプル PNG は ICC プロファイル・gAMA・EXIF を一切持たず，**sRGB である保証すらない**（sRGB と仮定して逆変換しているだけ）．
- **トーンカーブが残る（最大の壁）**: 端末 PNG は `linear生信号 →[WB・カラー行列・レンズ補正・トーンカーブ・NR・シャープ化]→ 表示RGB → sRGB符号化 → 8bit` を経る．inverse-sRGB が戻せるのは最後の符号化だけで，得られるのは「**表示参照 linear**」．間のトーンカーブ（端末固有・非公開のコントラスト曲線）は焼き込まれたままで，入射光量には比例しない．
- **不可逆な損失**: 8bit 量子化（暗部の段差が逆ガンマで増幅）・クリップ（白飛び/黒潰れ）は復元不能．

→ つまり **PNG は確実には linear 化できない**．これこそが定量 DNG モード採用の理由（[TECH_01](../05_TECH/TECH_01_DNG対応要求仕様.md) 背景「実機 PNG 自体が定量データとして揺らぐ」）であり，DNG (RAW_SENSOR, TONEMAP=CONTRAST_CURVE_LINEAR) は最初から真のシーン linear を出すことでこの問題を回避する．

### 公平な比較（ドメインを揃える，ただし近似）

両者を linear ドメインに寄せると比較の目安は得られる（PNG は上記の通り**擬似linear＝近似**である点に注意）：

- **PNG 擬似linear化: CoV 0.0901**（近似） vs **DNG linear+LSC: CoV 0.0689**（真の linear）
- → 目安としては **DNG（LSC補正）の方が均一**．従来の「PNG 0.042 < DNG 0.069 で DNG が悪い」という見え方は，sRGB ガンマが PNG のムラを圧縮していた錯覚．
- ただし PNG 側が近似である以上この比較は厳密ではなく，**確実な比較には同一シーンを DNG で撮影することが必要**（後述 残課題）．

## 結論と推奨 (Conclusion)

1. **PNG→DNG の移行で評価値が変わるのは正常**．主因は形式ではなく，sRGB→linear のドメイン変化とレンズシェーディング補正の有無．
2. **物理的に正しい照明均一性評価は DNG linear + LSC 補正経路**で行うべき．入射光量に比例した信号で，レンズ特性を分離して照明ムラのみを測れる．
3. 従来の **PNG sRGB 評価値は，ガンマ圧縮によりムラを過小評価**していた点に注意．過去の PNG 値と DNG 値を近づけるには PNG を擬似linear化（inverse-sRGB）できるが，**PNG は真のシーン linear を復元できない**（トーンカーブ・8bit・透過関数不明のため）．したがって**厳密な比較には DNG での再撮影が必要**．
4. ノイズに弱い画素単位 max/min 比に代わり，**動径 min/max 比（20点輪帯平均）**をロバストな減衰指標として併用する．

## 残課題 (Open Issues)

- **厳密な V1 比較**: 同一シーン（白板）を同一フレーミングで PNG（通常モード）＋ DNG（定量モード）連続撮影し，同条件で比較する（[TECH_01](../05_TECH/TECH_01_DNG対応要求仕様.md) 検証 V1）．
- **ROI のフレーミング差対応**: PNG/DNG で白板の写る位置・スケールが異なるため，キャプチャごとの ROI 調整または同一フレーミング撮影が必要（TECH_01 Phase 5）．
- **LSC 順適用機能の正式実装**: 現状は検証スクリプトでの順適用．本流の評価フローへ正式統合する（TECH_01 Phase 3〜4）．

## 参照 (References)

- [TECH_01 DNG 対応要求仕様](../05_TECH/TECH_01_DNG対応要求仕様.md)
- [REPORT_01 照明均一性評価報告書](REPORT_01_照明均一性評価報告書.md)
- 評価実装: `src/io/dng_loader.py`, `src/analysis/spatial.py`, `scripts/run_uniformity_dng.py`
- 設計判断・経緯の詳細: `docs/PROGRESS.md`
