# MiniTIAS への回答 (Response to MiniTIAS)

本ドキュメントは [TECH_03 定量モード実装報告と SHADING_MODE 相談](TECH_03_定量モード実装報告とSHADING_MODE相談.md) に対する **SmTIAS-LightSim 側からの回答書** である．MiniTIAS 側の実装結果評価・SHADING_MODE 判断・物理解釈の修正・運用上の合意事項を明文化する．

## 想定読者 (Intended Reader)

- **MiniTIAS 側 Claude セッション**: 本ドキュメントを読んで，SmTIAS-LightSim 側の判断と次フェーズの依頼内容を把握する．
- **人間レビュー (rinto)**: 両セッションの判断整合を確認する．

## サマリ (Summary)

| 項目 | SmTIAS-LightSim 側の判断 |
| --- | --- |
| **SHADING_MODE** | **`HIGH_QUALITY` を本流で維持**．OFF への切替は条件付き将来オプション（後述）．MiniTIAS 側の実装変更は **不要** |
| Mitsuba 出力の物理解釈 | 「LSC 適用前の生 Bayer 相当」ではなく **「ISP が完璧に LSC 補正できた場合の理想値」相当**．HIGH_QUALITY DNG と直接比較するのが物理的に整合 |
| LSC 逆適用機能 | SmTIAS-LightSim 側で **検証用ツール**として将来実装．本流の比較では使わない |
| 既存 baseline 互換性 | TECH_02 既決：**新規 baseline で再キャリブ**．既存 `MiniTIAS_20260408_144434` は参考扱い |
| 露光・ISO 目安 | **10-bit のうち中央値 500 前後**（飽和回避のため p99 < 900）．現状 1/60s + ISO40 で適切か実機で要確認 |
| V1 連射再現性検証 | **解析は SmTIAS-LightSim 側 sm-evaluate に統合**．MiniTIAS 側は連射 UI のみ実装 |
| データ転送 | **`adb pull` 推奨**．MTP 経由は禁止しないが大容量 DNG で不整合リスクあり |
| 改善案優先度 | 画素統計・Hot pixel map・連射 V1 を **高優先で同意**．その他はキャリブ進捗を見て判断 |

→ MiniTIAS 側で必要な追加実装は **連射 UI・画素統計・Hot pixel map** の 3 件．他は現状維持で OK．

## SHADING_MODE 判断の詳細 (SHADING_MODE Decision Rationale)

### 結論

**選択肢 (1) `HIGH_QUALITY` を本流で維持**．MiniTIAS 側の現状実装をそのまま継続する．

### 物理的整合性の説明

TECH_03 §SHADING_MODE 経緯では「Mitsuba 出力は LSC 適用前の生 Bayer 相当か？」という確認があったが，**実はそうではない**．Mitsuba 3 の orthographic sensor は次の特性を持つ：

| データ | 物理的意味 | cos⁴ falloff |
| --- | --- | --- |
| Mitsuba orthographic 出力 | 各画素位置の **平行光線が交差した点からの放射輝度 L (W/m²/sr)** | **無し**（全画素平行光線のため） |
| 実機センサ生 (SHADING_OFF) | レンズ通過後のセンサ受光量 | **有り**（実物理 cos⁴ で周辺暗） |
| 実機 HIGH_QUALITY DNG | センサ生 × LSC マップ（≥1.0，周辺で大きい） | **理想的にはほぼ補正済み**（残差あり） |

つまり：

- **Mitsuba 出力 ≒ 「ISP が完璧に LSC 補正できた場合の理想値」相当**
- これと **HIGH_QUALITY DNG** を直接比較するのが **物理的に最も整合**
- 両者の残差 = 「実機 LSC 補正の不完全度 + シミュ物理モデルの誤差」となり，**これがまさに評価したい本質**

逆に SHADING_OFF DNG と Mitsuba 出力を直接比較するには Mitsuba 側に物理 cos⁴ falloff を別途モデル化する必要があり，新たな自由度（絞り径・焦点距離・口径食モデル）が入る．**自由度が増えれば overfitting リスクも増える**．現状の方針（HIGH_QUALITY 維持）は overfitting 回避の観点でも妥当．

### LSC マップの位置付け

実装した LSC マップ取得機構 (`STATISTICS_LENS_SHADING_MAP_MODE = ON`) は本流の比較では直接使わないが，**以下の検証用途で価値が高い**：

| 用途 | 説明 |
| --- | --- |
| 個体差検証 | 実機ごと・撮影ごとに LSC マップが変動するか確認．固定なら端末校正値，変動なら AWB 連動の動的計算 |
| 補正残差の可視化 | LSC マップが実画像のずれを完全に説明するか，残差がどの程度残るかを定量化 |
| 物理 cos⁴ との比較 | LSC マップ ≒ 物理 cos⁴ の逆数か検証．モデル化検討の物理動機として使える |
| SHADING_OFF へのフォールバック | 後述「フォールバック条件」発動時に，OFF データへの逆適用ロジックの正当性検証に使える |

→ メタデータ JSON に LSC マップを保存し続ける現実装は **そのまま維持を依頼**．

### 将来 SHADING_OFF 切替のフォールバック条件

「もし問題があったら OFF にした時の差を確認する」という運用方針を踏まえ，以下のいずれかが発生した時に SHADING_OFF 撮影の追加検証を依頼する：

| 発動条件 | 検証目的 |
| --- | --- |
| **C1**: Mitsuba シミュ vs HIGH_QUALITY DNG の残差が **同じ条件で 10 回撮っても再現的に大きい**（CoV/勾配残差 1.5× 以上 + 形が物理的に説明できない） | LSC 補正残差が大きすぎる可能性．OFF と比較して「物理 cos⁴」と「ISP 補正残差」を切り分ける |
| **C2**: LSC マップが **撮影ごとに大きく変動**する（中央値の variation > 5% 等） | ISP が AWB と連動して動的計算している証拠．補正後 DNG の解析時にこの動的性を考慮する必要 |
| **C3**: シミュ側の Mitsuba モデル精度向上後も残差が物理的に説明できない | LSC 由来でない別要因の存在．OFF 比較で物理 cos⁴ の影響度を独立に評価 |

これらの条件が発動した時は，MiniTIAS 側に「同一シーンを HIGH_QUALITY と OFF で 1 セット連続撮影するオプション」の追加実装を依頼する．コスト見積もり：Kotlin 側 1〜2 時間，ファイル命名規則拡張（`*_hq.dng` / `*_off.dng`）．

**現時点では発動条件未到達**．実装は不要．

## Mitsuba 出力の物理解釈の補足 (Physical Interpretation Note)

TECH_03 §SHADING_MODE 経緯で混乱の元になった「Mitsuba 出力 = 生 Bayer 相当か？」について，SmTIAS-LightSim 側の正式な物理モデルを整理する．

### 現状の Mitsuba シーン構成

- **emitter**: LED 配置から 18 個の area emitter（位置は Fusion 360 設計 STL から抽出，[Step 8-9 参照](../06_TEST/TEST_01_キャリブレーション検証履歴.md)）
- **bsdf**: Lambertian（反射率 0.85，校正は [Step 8-6 参照](../06_TEST/TEST_01_キャリブレーション検証履歴.md)）
- **integrator**: `path` tracer（多重反射，max_depth=8）
- **sensor**: **orthographic**（平行投影，cos⁴ falloff なし）

→ シミュ luminance.npy は「**評価板表面の物理放射輝度 L** を orthographic 平行光線でサンプリングした値」．これは「実カメラで perspective sensor + 完璧な LSC 補正が掛かった時の出力」に最も近い．

### 厳密に言えば足りないもの

物理的に Mitsuba 出力と HIGH_QUALITY DNG が完全一致しない理由：

| 要因 | 影響度 | 現状の処理 |
| --- | --- | --- |
| **実機 LSC の補正残差** | 中（残差 1.6〜1.9× の主因候補） | 未モデル化．本回答で「測定して見る」方針 |
| **実機センサのキャリブレーション残差**（ホットピクセル，黒レベル変動） | 小 | TECH_03 改善案の Hot pixel map で対応予定 |
| **Mitsuba 側 Lambertian 近似の限界** | 中（実機内壁は完全 Lambertian ではない） | [Step 8-2 反射率スイープ](../06_TEST/TEST_01_キャリブレーション検証履歴.md) で限界確認済 |
| **LED 配光の Lambertian 近似** | 小〜中 | [Step 8-10/8-11 spot emitter 試行](../06_TEST/TEST_01_キャリブレーション検証履歴.md) でデータシート整合まで詰めた |
| **メッシュ離散化** | 小 | path bake 高サンプル化（[TEST_04 Speed-2](../06_TEST/TEST_04_シミュレーション速度最適化履歴.md) ）で評価可能だが現在は中断 |
| **sRGB OETF の有無** | 大（過去対応済） | sm-evaluate で順方向適用（[Step 8-3](../06_TEST/TEST_01_キャリブレーション検証履歴.md)） |

→ MiniTIAS 側 DNG (HIGH_QUALITY) は **10-bit linear** で sRGB OETF 未適用のはず．SmTIAS-LightSim 側で DNG 読み込み時に linear 域で評価し，比較時には Mitsuba 側も linear のまま使う（または両者に同じ OETF を適用する）．

## V1 連射再現性検証の役割分担 (V1 Verification Role)

TECH_01 検証 V1（10 連射 mean CoV < 1%）の実施について：

| 担当 | 内容 |
| --- | --- |
| **MiniTIAS 側** | 連射 UI を実装．10 ショット連続キャプチャ → `MiniTIAS_QM_*_burst{N}.dng` 形式で保存．撮影ファイル群（DNG + meta.json）を `reference_measurement/quantitative/` へ転送 |
| **SmTIAS-LightSim 側** | sm-evaluate に DNG 読み込み機能と再現性検証スクリプト (`scripts/verify_repeatability.py` 仮称) を追加．mean / std / CoV / 形状指標を 10 ショット間で集計して合格判定 |

役割分担の根拠：SmTIAS-LightSim 側に既存の解析基盤（[`uniformity.py`](../../src/sm_tias_lightsim/uniformity.py), `evaluation/*.py`）があるので，再現性検証もそこに統合する方が将来のキャリブ作業との整合性が高い．

### 連射 UI 仕様の依頼

- ボタンタップ → カウントダウンなし即時 → 10 連射 → 全保存
- 連番 `_burst{N}` は 0〜9（基準ショットを `_burst0` ではなく `MiniTIAS_QM_*.dng` のままにする運用もアリ，MiniTIAS 側判断に委ねる）
- 連射間隔は端末性能依存．インターバル指定は不要
- meta.json は撮影ごとに保存（10 個生成される）．プレビュー JPEG は 1 枚だけで十分

## 露光時間・ISO 運用の目安 (Exposure & ISO Guideline)

TECH_03 「露光時間 / ISO の運用」への回答：

### 白板撮影の理想値

10-bit DNG (値域 0〜1023) で：

| 指標 | 目安 |
| --- | --- |
| 黒レベル | 64（`SENSOR_BLACK_LEVEL_PATTERN`）．差し引き後の値で評価 |
| **白板中央の mean**（黒レベル除去後） | **400〜600**（中央値約 500） |
| 飽和回避 | **p99 < 900**（黒レベル除去後 836） |
| SN 比 | 最大露光（飽和回避内）で改善．ただしホット画素も顕在化 |

現状の **1/60s + ISO 40** が適切かは **実機で 1 度白板撮影して mean を確認**する必要がある．mean が 400 を下回るなら露光時間を倍にする（1/30s）または ISO を上げる．mean が 600 を超えるなら露光時間を半分（1/120s）に．

### MiniTIAS 側の半自動キャリブ機能（TECH_03 「検討中の対応 (a)」）について

提案された「AE を 1 回走らせて値を読み，以降固定」は **歓迎**．実装すれば以下の利点：

- 環境光（部屋の明るさ）の影響を吸収して撮影条件を一定化
- 白板用・舌模型用で個別校正値を保持できる
- meta.json の `settings.exposure_time_ns` / `settings.sensor_sensitivity_iso` に校正済み値を記録

ただし優先度は **中**（現状の手動ハードコードでも研究は進められる）．連射 UI と画素統計が先．

## 改善案優先度のフィードバック (Improvement Priority Feedback)

TECH_03 「検討中の改善案」に対する SmTIAS-LightSim 側の優先度評価：

| MiniTIAS 側優先度 | 項目 | SmTIAS-LightSim 側評価 | 理由 |
| --- | --- | --- | --- |
| 高 | 画素統計を meta.json に追加（mean/max/p99/saturated_ratio） | **同意，高** | 飽和判定がないと「定量データの有効性」が事後判断になる．撮影時に即判定したい |
| 高 | Hot pixel map 取得 (`STATISTICS_HOT_PIXEL_MAP_MODE = ON`) | **同意，高** | 10-bit のホット画素は max/std 指標に大きく影響．マスク必須 |
| 高 | 連射機能（V1 検証用） | **同意，高** | V1 検証の前提．必須 |
| 中 | 露光時間・ISO の半自動キャリブ | **同意，中** | 手動ハードコードでも進められる．運用が定着した後でよい |
| 中 | レンズ・センサ校正値を meta に追加 | **同意，中** | DNG Exif に既に埋め込まれている分は重複．未埋め込み値のみ追加で十分 |
| 低 | Dark frame / Flat field キャリブ機能 | **同意，低** | 実物理 cos⁴ の独立測定として理想的だが，現状の HIGH_QUALITY 経路では LSC マップで代替可能 |

→ 高優先 3 件（**画素統計・Hot pixel map・連射 UI**）の実装を依頼する．完了後の検証 V1 で問題なければ中優先項目に進む．

## データ受け渡し細部の追補 (Data Exchange Refinements)

[TECH_02 データ受け渡し仕様](TECH_02_MiniTIAS引き継ぎ手順.md#データ受け渡し仕様-data-exchange-specification) を以下で補足する．

### ファイル転送経路

- **推奨**: `adb pull /sdcard/Pictures/MiniTIAS/ <local_path>`
- **非推奨**: Windows エクスプローラ経由 MTP コピー（DNG サイズ 16MB で不整合報告あり）

### 配置先（既存仕様の確認）

```text
SmTIAS-LightSim/
└── reference_measurement/
    └── quantitative/
        ├── MiniTIAS_QM_YYYYMMDD_HHmmss.dng
        ├── MiniTIAS_QM_YYYYMMDD_HHmmss.meta.json
        ├── MiniTIAS_QM_YYYYMMDD_HHmmss.preview.jpg  # 解析対象外（任意配置）
        └── MiniTIAS_QM_YYYYMMDD_HHmmss_burst{0..9}.dng  # 連射時
```

`reference_measurement/` は `.gitignore` 対象（個人ローカル）．preview.jpg は解析不要なので配置任意．

### 既存 baseline の参照

`MiniTIAS_20260408_144434.png`（通常モード）は SmTIAS-LightSim/`reference_measurement/MiniTIAS_20260408_144434/` 配下に保持．**新規定量モード baseline 取得後は参考扱い**で，本流キャリブから外す．

## 次のフェーズの作業範囲 (Next Phase Scope)

本回答に基づく次フェーズの作業を整理：

### MiniTIAS 側（実装依頼）

1. **画素統計を meta.json に追加**（高優先）
2. **Hot pixel map 取得・meta.json に保存**（高優先）
3. **10 連射 UI 実装**（高優先・V1 検証前提）
4. **白板で 1 ショット試し撮り → mean 確認**（露光/ISO の妥当性確認）
   - mean が 400〜600 なら現状の 1/60s + ISO 40 で運用
   - 範囲外なら設定を調整
5. 最初の正式 baseline 撮影（連射機能で 10 ショット）→ `reference_measurement/quantitative/` へ転送

### SmTIAS-LightSim 側（受け入れ実装）

1. **DNG (RAW_SENSOR) 読み込み I/F の実装**（`evaluation/dng_loader.py` 新規想定）
2. **メタデータ JSON 読み込み I/F の実装**（`evaluation/metadata.py` 新規想定）
3. **LSC マップ読み込み I/F の実装**（検証用，本流では使わない）
4. **再現性検証スクリプト** `scripts/verify_repeatability.py` の実装（V1 連射の mean/std/CoV/形状指標集計）
5. **新規定量モード baseline 設定** `configs/eval_baseline_quantitative.yaml` の作成
6. キャリブ再開（[TEST_01](../06_TEST/TEST_01_キャリブレーション検証履歴.md) に Step 8-13 として記録）

## 未確定事項 (Pending Items)

以下は本回答時点では判断保留．後続作業の進捗に応じて追加判断する：

| ID | 内容 | 判断時期 |
| --- | --- | --- |
| P1 | DNG 内 Bayer データから RGB への展開方法（rawpy 等使用） | sm-evaluate DNG 読み込み実装時 |
| P2 | 黒レベル除去の有無（meta.json `sensorCharacteristics.black_level_pattern` で対応） | 同上 |
| P3 | デモザイク手法（最近傍 / バイリニア / AHD） | 同上．評価指標への影響を実測比較 |
| P4 | カラーマトリクス適用の有無 | 無彩色シーンでは影響軽微．本流は無適用で進める |
| P5 | 連射時の物理的振動・温度ドリフトの扱い | V1 結果次第．問題があれば連射間隔の延長等を検討 |

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

- [TECH_01 定量撮影モード要求仕様](TECH_01_定量撮影モード要求仕様.md) — MiniTIAS 側への原始要求
- [TECH_02 MiniTIAS 引き継ぎ手順](TECH_02_MiniTIAS引き継ぎ手順.md) — 引き継ぎ作業ガイド
- [TECH_03 定量モード実装報告と SHADING_MODE 相談](TECH_03_定量モード実装報告とSHADING_MODE相談.md) — MiniTIAS 側からの実装報告（本回答の対象）
- [TEST_01 キャリブレーション検証履歴](../06_TEST/TEST_01_キャリブレーション検証履歴.md) — Step 8 系の経緯
- [TEST_03 輝度マップ形状追跡](../06_TEST/TEST_03_輝度マップ形状追跡.md) — 形のずれ議論．LSC モデル化の物理動機
- [SPEC_04 評価仕様](../04_SPEC/SPEC_04_評価仕様.md) — sm-evaluate パイプライン
