# MiniTias-Evaluation 引き継ぎ受領 (Receiving Hand-off from MiniTias-Evaluation)

本ドキュメントは MiniTias-Evaluation 側で [TECH_05 DNG 対応要求仕様](TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md) の Phase 1（DNG 読み込み I/F）が完了したことの受領記録であり，併せて MiniTias-Evaluation 側から共有された **重要な設計判断・指摘事項** をまとめたものである．

## 想定読者 (Intended Reader)

- **SmTIAS-LightSim 側 Claude セッション**: 本ドキュメントを読んで取り込み作業を行う
- **人間レビュー (rinto)**: 受領内容と判断の妥当性を確認する

## 受領元と日付 (Source)

- **元プロジェクト**: MiniTias-Evaluation（`C:\Users\user\source\MiniTias-Evaluation\`）
- **受領日**: 2026-06-01
- **元ハンドオフパッケージ**: `handoff_smtias_lightsim/`（一時アーティファクト，取り込み完了後に削除）

## 1. 実装スコープ — 完了状況 (What is done / not done)

[TECH_05](TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md) で要求した 6 Phase のうち，本受領時点で完了しているのは **Phase 1（DNG 読み込み I/F）のみ**．

| Phase | 内容 | 受領状態 |
| --- | --- | --- |
| Phase 1 | DNG 読み込み I/F (`dng_loader.py`) | ✅ **完了**（コピー対象） |
| Phase 2 | メタデータ JSON 読み込み I/F (`metadata_loader.py`) | ❌ 未実装 |
| Phase 3 | LSC マップ参照・hot pixel マスク | △ LSC 順適用はプロトタイプのみ（`run_uniformity_dng.py` 内） |
| Phase 4 | 既存パイプライン統合 | ❌ 未着手 |
| Phase 5 | PNG vs DNG 検証 | △ 別撮影での比較のみ実施（[TEST_05](../06_TEST/TEST_05_PNG_DNG評価比較.md)） |
| Phase 6 | SPEC 更新 | ❌ 未着手 |

→ Phase 1 を SmTIAS-LightSim 側にコピーして統合する．Phase 2〜6 は SmTIAS-LightSim 側の必要性に応じて優先順位を判断する．

## 2. ★ 重要な設計判断・注意点（コピーだけでは伝わらない） (Critical Design Decisions)

以下は実装の前提であり，**[TECH_05 要求仕様](TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md) の記述と食い違う点を含む**．取り込み時に必ず反映すること．

### 2.1 ★★★ DNG は LSC 未補正 — `apply_lsc_inverse` は誤り

| 項目 | TECH_05 当初の前提（誤り） | 実態（MiniTias-Evaluation 側が発見） |
| --- | --- | --- |
| RAW_SENSOR DNG の状態 | LSC 補正済み | **LSC 未補正** |
| rawpy の挙動 | LSC 自動適用 | **LSC 適用しない**（OpcodeList2 GainMap は無視） |
| meta.json `lscMap` の位置付け | ISP 適用後の参考データ | **適用に使うべきマップ**（順方向適用が正しい） |
| シェーディング除去方法 | `image / interpolate(lscMap)` で逆適用 | **`image × interpolate(lscMap)` で順方向適用** |

→ TECH_05 の `apply_lsc_inverse` 関数仕様は **物理的に逆方向で誤り**．正しくは `apply_lsc_forward`（順方向適用）．TECH_05 をこの受領と同時に訂正する．

### 2.2 linear 系出力は `output_color=raw`

カラーマトリクスを通すとチャンネル混合で per-channel の比例が崩れる：

- `rgb_float32` / `luma_float32`: `output_color=rawpy.ColorSpace.raw`（カラーマトリクス非適用）
- `rgb_uint8` のみ: `output_color=rawpy.ColorSpace.sRGB`（カラーマトリクス＋ sRGB OETF 適用）

これにより入射光量とセンサ信号の比例（放射輝度リニアリティ）を担保する．

### 2.3 向き — DNG はセンサ native が landscape

PNG / preview と同じ portrait にするには `numpy.rot90(image, -1)` で回転：

- **左右反転は不要**：フロントカメラ id=1 の preview はミラーされるが RAW はミラーされない
- 既存 PNG 経路と向きを揃えるための必須処理

### 2.4 luma の Rec.709 は固定加重プロキシ

`output_color=raw` のとき Rec.709 luma (R=0.2126, G=0.7152, B=0.0722) は **厳密な CIE 輝度ではなく，既存 PNG 経路と互換の固定加重輝度プロキシ**．

Rec.709 係数を維持する理由：

- 既存 PNG 経路（`uniformity.py` の `to_grayscale`）との方法論的一貫性
- DNG / PNG 評価指標の直接比較のため

### 2.5 PNG は厳密には linear 化できない

PNG（既存通常モード）は以下のため真のシーン linear を復元できない：

- トーンカーブが端末固有・非公開で焼き込まれている
- 8bit 量子化・クリップで不可逆な情報損失あり
- ICC プロファイル等の透過関数情報が PNG ファイルに付随しない

→ inverse-sRGB OETF を掛けても得られるのは「表示参照 linear」で，入射光量との比例性は復元できない．これが定量 DNG モード採用の根拠（詳細は [TEST_05](../06_TEST/TEST_05_PNG_DNG評価比較.md)）．

## 3. コピー対象ファイル (Files to Copy)

| コピー元（MiniTias-Evaluation） | コピー先（SmTIAS-LightSim） | 区分 |
| --- | --- | --- |
| `src/io/dng_loader.py` | `src/sm_tias_lightsim/evaluation/dng_loader.py` | ★ 正規コピー対象 |
| `scripts/run_uniformity_dng.py` | （参考）`cli/evaluate.py` 等への統合参考 | LSC 順適用・向き合わせ・評価フローの参考 |
| `src/analysis/spatial.py` の `calc_radial_min_max_ratio` | 既存 `evaluation/radial.py` または `zones.py` へ **マージ**（全体コピーは禁止） | 動径 min/max 比指標（追加指標） |

### コピー時のファイル先頭注記

[TECH_05 §SmTIAS-LightSim 側へのコピー手順](TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md#smtias-lightsim-側へのコピー手順-copy-to-smtias-lightsim) の指定通り：

```python
"""DNG 読み込みモジュール．

MiniTias-Evaluation/src/io/dng_loader.py を SmTIAS-LightSim にコピーしたもの．
オリジナルは MiniTias-Evaluation 側で管理する．バグ修正・機能追加はそちらで行い，
本プロジェクトに反映する形を取る．
"""
```

### `spatial.py` のマージ方針

SmTIAS-LightSim 側の既存均一性コード（`evaluation/zones.py` の `calc_zone_stats` 等）と競合する関数が含まれるため，**丸ごとコピーせず `calc_radial_min_max_ratio` のみマージ**する．

## 4. 引き渡された評価結果（暗闇＝MiniTIAS のみ撮影）

代表結果は **外乱光に汚染されていない「MiniTIAS の照明のみ」の撮影**（`MiniTIAS_QM_20260601_124500`，室内灯 OFF）．

評価条件: linear（output_color=raw）／ portrait ／ LSC 補正あり ／ 白板 ROI．

| 指標 | 値 |
| --- | --- |
| CoV | **0.0695** |
| max/min 比 | 1.617 |
| 中心/周辺比 | 1.0911 |
| 勾配 (%) | 8.35 |
| 動径 min/max 比 | 0.8600 |

→ 本値が **新しい正規実機ターゲット**（[TEST_01](../06_TEST/TEST_01_キャリブレーション検証履歴.md) Step 8-13 以降）．従来の通常モード PNG 値（CoV=0.0427）は，sRGB ガンマでムラが圧縮された **過小評価値**だったことが [TEST_05](../06_TEST/TEST_05_PNG_DNG評価比較.md) で確認された．

成果物（評価結果図・CSV・meta.json）は元ハンドオフパッケージ `handoff_smtias_lightsim/results_dark_124500/` に同梱されていたが，S3（突合検証）段階で必要になった時点で再取得する．

## 5. 取り込み計画（SmTIAS-LightSim 側 3 サブタスク）

本受領を起点に，SmTIAS-LightSim 側で以下の 3 サブタスクを順次実施する：

### S1: ドキュメント取り込み + TECH_05 訂正（本コミットで実施）

- 本ファイル (TECH_06) で受領記録
- [TEST_05](../06_TEST/TEST_05_PNG_DNG評価比較.md) として REPORT_02 を取り込み
- [TEST_06](../06_TEST/TEST_06_外乱光影響評価.md) として REPORT_03 を取り込み
- [TECH_05](TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md) の `apply_lsc_inverse` を `apply_lsc_forward` に訂正
- CLAUDE.md / TEST_01 / TEST_03 に方針更新を追記

### S2: コード取り込み（次セッション・`/implement`）

- `src/sm_tias_lightsim/evaluation/dng_loader.py` 新規作成（MiniTias-Evaluation からコピー＋冒頭注記）
- `evaluation/radial.py` または `zones.py` に `calc_radial_min_max_ratio` をマージ
- `pyproject.toml` に `rawpy>=0.21.0` 追加
- 新規テスト追加（DNG 読み込み・新指標）

### S3: sm-evaluate DNG 対応 + Step 8-13 突合（次セッション・`/implement`）

- `cli/evaluate.py` に DNG 入力経路追加（拡張子で自動判定）
- `configs/eval_baseline_quantitative.yaml` 新規作成
- 既存シミュ luminance.npy と新規実機 DNG で評価指標を突合
- [TEST_01](../06_TEST/TEST_01_キャリブレーション検証履歴.md) に **Step 8-13: 定量モード DNG での 1 ショット対応検証** として記録

## 6. 検証 (Verification — TECH_05 V4)

S2 / S3 完了後に以下を確認：

- SmTIAS-LightSim 側で同じ DNG (`MiniTIAS_QM_20260601_124500.dng`) を読み込んで，**§4 の表と同じ評価指標**が出ること
- 既存テストが全合格すること
- 依存追加: `rawpy>=0.21.0`

## 7. 関連ドキュメント (Related Documents)

- [TECH_05 MiniTias-Evaluation DNG 対応要求仕様](TECH_05_MiniTiasEvaluation_DNG対応要求仕様.md) — 本受領の原始要求
- [TEST_05 PNG/DNG 評価比較](../06_TEST/TEST_05_PNG_DNG評価比較.md) — REPORT_02 取り込み．ドメイン違いの分析
- [TEST_06 外乱光影響評価](../06_TEST/TEST_06_外乱光影響評価.md) — REPORT_03 取り込み．室内灯ロバスト性
- [TEST_01 キャリブレーション検証履歴](../06_TEST/TEST_01_キャリブレーション検証履歴.md) — Step 8 系．Step 8-13 として続編予定
- [TEST_03 輝度マップ形状追跡](../06_TEST/TEST_03_輝度マップ形状追跡.md) — 形のずれ議論
- [SPEC_04 評価仕様](../04_SPEC/SPEC_04_評価仕様.md) — sm-evaluate パイプライン
