diff --git a/CLAUDE.md b/CLAUDE.md index 69f2ea7..09b205c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,6 +32,7 @@ 補足: **S3 方針見直しと Step D 完了 (2026-06-01)**.ユーザー指摘により「sm-evaluate に DNG 入力経路を追加する」当初案は **不採用**.理由: 実機 DNG 評価は MiniTias-Evaluation の本業で完結.SmTIAS-LightSim 側で重複実装する必要なし.S3 の作業範囲を **3 項目に絞り込み**: Step D (動径 min/max 比を sm-evaluate に統合)・Step C' (新規シミュ用 baseline config 作成)・Step G (シミュ再評価 → Step 8-13 として TEST_01 に記録).**Step D 完了**: `MetricsConfig.radial_min_max: bool = False` をスキーマ追加 (`schema.py`),`cli/evaluate.py` で `_run_radial_min_max` 関数追加して有効時に metrics.csv に 4 列 (radial_min_max_ratio / radial_min_distance / radial_min / radial_max) を末尾追加,コンソールサマリに 2 行追加.`radial_profile` を再利用 (重複算出回避),未算出時は内部算出.後方互換維持 (既存 3 configs は無修正で動作).新規テスト 39 件追加 (`tests/scene/test_metrics_radial_min_max_schema.py` 250 行 + `tests/cli/test_evaluate_radial_min_max.py` 740 行) で仕様 A1-D2 全カバー.既存 569 + 新規 39 = **608 件全通過**.SPEC_04 §動径 min/max 比 セクションを追記.次: Step C' (configs/eval_baseline_dng_target.yaml 作成: 既存 eval_baseline_linear.yaml ベース,target_mean=207.82,radial_min_max=true) → Step G (Step 8-13 計測). 補足: **Step C' 完了と Step G 計測 (2026-06-02)**.`configs/eval_baseline_dng_target.yaml` を新規作成(eval_baseline_linear.yaml ベース,target_mean=207.82,metrics.radial_min_max=true,OETF なし).動作確認で既存シミュ baseline (output/baseline/luminance.npy) を新 config で評価した結果,Step 8-13 数値が判明: シミュ CoV=0.1826, 勾配=24.65%, 中心/周辺=1.3271, 動径 min/max=0.6151.実機 DNG+LSC 補正 (CoV=0.0695, 勾配=8.35%, C/P=1.0911, 動径 min/max=0.860) と比較して **残差 2.63×**.これは TECH_06 で予想した「真の残差 2.66×」とほぼ一致.過去 Step 8-3 OETF 順方向適用時の「2.1×」は PNG sRGB ガンマ圧縮による楽観値であり,真の linear 比較では大きい.**LSC 取り扱いの結論を [TECH_07 LSC 取り扱い方針](docs/05_TECH/TECH_07_LSC取り扱い方針.md) として一元化**: 3 プロジェクト役割分担 (MiniTias=SHADING_MODE=HIGH_QUALITY 撮影 / MiniTias-Evaluation=lscMap 順方向適用 / SmTIAS-LightSim=一切扱わない),シミュ側で LSC を扱わない物理的根拠 (Mitsuba orthographic = LSC 完璧補正後相当),検討した代替案 3 つ (A: シミュに LSC モデル化追加・B: perspective+thinlens で物理 cos⁴・C: ISP 補正残差を物理導出) すべて却下,限界と注意点,フォールバック条件 C1-C3 (SHADING_OFF 撮影),Step 8-13 残差 2.63× の解釈 (LSC 由来ではない別要因,物理モデル誤差の可能性) を明文化.残差 2.63× の解消は今後の課題 (物理モデル精緻化 or SHADING_OFF 撮影で切り分け or 形状相対比較に絞る) .S3 残作業: TEST_01 への Step 8-13 正式記録・handoff_smtias_lightsim/ 削除. 補足: **実機変更とシミュ側対応の整合マッピングを明文化 (2026-06-02)**.[TECH_08 実機変更とシミュ側対応](docs/05_TECH/TECH_08_実機変更とシミュ側対応.md) として作成.実機側 8 項目変更 (PNG→DNG / AWB OFF / AE OFF / ガンマなし / NR OFF / EDGE OFF / LSC 維持 / LSC 順方向適用) に対するシミュ側 3 層 (Mitsuba シーン定義 α / sm-render β / sm-evaluate γ) の対応をマッピング.**結論: シミュ側で実際に対応が必要だったのは sm-evaluate の config レベルでの OETF 無効化 (#4) と mean アンカー調整 (#3) の 2 項目のみで,他はすべて対応不要 (Mitsuba は per-channel 独立計算で AWB/AE/NR/EDGE 概念なし,orthographic で LSC 自然対応)**.計 15 項目以上で網羅チェック,対応漏れなしを確認.特にガンマ補正は `configs/eval_baseline_dng_target.yaml` で OETF セクションを意図的に書かない形で Step C' にて対応済.**残差 2.63× は ISP 関連の対応漏れではなく,シミュ物理モデル誤差 (反射率精度・LED 配光モデル・メッシュ幾何精度等) が主因**と推定.詳細な切り分けは Step 8-14 以降の物理モデル精緻化として残す. +補足: **「対応不要」を 2 タイプに細分化 (TECH_08 §許容している構造的差異 追加)**.「対応不要」の理由を **タイプ I (本質構造同一・対応概念なし)** = AWB/NR/EDGE/LSC 等と,**タイプ II (構造的差異あり・白板で許容)** = AF (焦点モデル)/絞り口径食/ピクセル積分/センサノイズ/QE 波長依存/シャッター方式/温度依存 に分類.特に AF は実機 perspective+固定焦点 vs シミュ orthographic 無限遠相当という **シミュと実機の構造的な違い**を明示.白板撮影では影響軽微で許容しているが「ゼロ影響」ではない.舌模型評価時や残差精緻化フェーズで再評価対象.Step 8-13 残差 2.63× の主因はタイプ II ではなくシミュ物理モデル誤差と推定する従来結論は維持. 実装済みモジュール: - `src/sm_tias_lightsim/uniformity.py` — Rec.709 輝度変換 + CoV/std/max-min(MiniTias-Evaluation コピー) diff --git "a/docs/05_TECH/TECH_08_\345\256\237\346\251\237\345\244\211\346\233\264\343\201\250\343\202\267\343\203\237\343\203\245\345\201\264\345\257\276\345\277\234.md" "b/docs/05_TECH/TECH_08_\345\256\237\346\251\237\345\244\211\346\233\264\343\201\250\343\202\267\343\203\237\343\203\245\345\201\264\345\257\276\345\277\234.md" index 78ac9bb..c0d718c 100644 --- "a/docs/05_TECH/TECH_08_\345\256\237\346\251\237\345\244\211\346\233\264\343\201\250\343\202\267\343\203\237\343\203\245\345\201\264\345\257\276\345\277\234.md" +++ "b/docs/05_TECH/TECH_08_\345\256\237\346\251\237\345\244\211\346\233\264\343\201\250\343\202\267\343\203\237\343\203\245\345\201\264\345\257\276\345\277\234.md" @@ -8,10 +8,12 @@ | 観点 | 結論 | | --- | --- | -| **シミュ側対応漏れ** | **なし**(10 項目以上で網羅チェック済み) | -| **対応が必要だった項目** | **1 項目のみ**: ガンマ補正(OETF)→ Step C' で対応済 | -| **対応不要だった項目** | **7 項目**: AWB / AE / NR / EDGE / LSC / 黒レベル / ビット深度 | -| **Step 8-13 残差 2.63× の解釈** | ISP 関連の対応漏れではなく,**シミュ物理モデル誤差**が主因 | +| **シミュ側対応漏れ** | **なし**(15 項目以上で網羅チェック済み) | +| **対応が必要だった項目** | **2 項目**: ガンマ補正(OETF)→ Step C' で対応済 / AE OFF(mean アンカー) | +| **対応不要だった項目** | 残り全項目.ただし 2 タイプに分かれる(後述) | +| **タイプ I(本質構造同一)** | AWB / NR / EDGE / LSC / 量子化 等 — シミュと実機は本質的に同じ | +| **タイプ II(許容している構造的差異)** | **AF(焦点)** / 絞り・口径食 / ピクセル積分 / センサノイズ 等 — 構造的差異はあるが白板撮影では影響軽微で許容 | +| **Step 8-13 残差 2.63× の解釈** | ISP 関連の対応漏れではなく,**シミュ物理モデル誤差**が主因.タイプ II の寄与は小さいが排除不能 | ## 背景・経緯 (Background) @@ -148,10 +150,130 @@ | BLACK_LEVEL_LOCK: true | DNG 読み込み時に黒レベル除去(rawpy が自動) | **不要**(読み込み側で対応) | | COLOR_CORRECTION_GAINS: [1,1,1,1] | per-channel 独立計算 | **不要** | | COLOR_CORRECTION_TRANSFORM: identity | 同上 | **不要** | -| CONTROL_AF_MODE: OFF(固定焦点) | Mitsuba orthographic は焦点概念なし(無限遠相当) | **不要** | +| CONTROL_AF_MODE: OFF(固定焦点) | Mitsuba orthographic は焦点概念なし(無限遠相当) | **対応不要・許容**([§許容している構造的差異](#許容している構造的差異-accepted-structural-differences) 参照) | | CONTROL_VIDEO_STABILIZATION_MODE: OFF | シミュに振動概念なし | **不要** | -→ **追加で 7 項目チェックしたが,すべて対応不要**.計 15 項目以上で網羅チェック済み. +→ **追加で 7 項目チェックしたが,すべて対応不要 or 許容範囲**.計 15 項目以上で網羅チェック済み. + +> ただし **AF モード**は厳密にはシミュと実機の **構造的な違い**(実機 perspective + 固定焦点 vs シミュ orthographic 無限遠相当)であり,「対応物が存在しない」AWB/NR/EDGE と同列ではない.次節で「許容している差異」として明示的に分類する. + +## 許容している構造的差異 (Accepted Structural Differences) + +上記までの「対応不要」項目は,理由を 2 種類に分類できる: + +| タイプ | 説明 | 例 | +| --- | --- | --- | +| **タイプ I** | シミュと実機の **本質的構造が同じ**.Mitsuba の物理計算に対応概念がそもそも存在しない | AWB / NR / EDGE / LSC (orthographic で自然対応) | +| **タイプ II** | シミュと実機に **構造的な違いが存在する**.ただし白板撮影では影響が小さく許容している | **AF / 絞り / ピクセル積分** など | + +タイプ II は「対応不要」ではあるが,**Step 8-13 残差 2.63× の要因候補**として残っている可能性がある.「許容している」は「ゼロ影響」ではなく「影響は小さいと仮定している」という意味であり,将来の物理モデル精緻化で再評価すべき項目である. + +### II-1. 焦点モデル (AF / Focus) + +**実機**: AQUOS sense3 のフロントカメラは **固定焦点**(CONTROL_AF_MODE = OFF のみサポート,無限遠ハイパーフォーカル相当 0.8189).perspective レンズで物体距離に依存した焦点が存在し,被写界深度(DoF)が定義される. + +**シミュ**: Mitsuba `orthographic` sensor は全画素が平行光線で,**焦点・被写界深度の概念がない**.すべての画素位置が常に「完全に合焦」した状態でサンプリングされる. + +**構造的な違い**: + +- 実機は被写体距離が DoF を外れると **焦点ボケ**で輝度の空間滲みが発生 +- シミュは焦点ボケがない(完璧合焦相当) + +**白板撮影では許容できる理由**: + +- 評価板(白板)はアタッチメント内で **固定位置**にあり,常に DoF 内 +- 白板自体が「ボケても変わらない一様パターン」なので焦点ボケの影響は実質ゼロ +- 仮に若干のボケがあっても,照明ムラ(CoV / 勾配等)の指標値には大きく効かない + +**将来の物理モデル精緻化で再評価する条件**: + +- 評価対象を白板から **舌模型・舌**に変えた時(DoF が問題になる可能性) +- 残差 2.63× の主因切り分けで他要因を潰した後(最後の候補として) + +### II-2. 絞り・口径食 (Aperture / Vignetting) + +**実機**: 固定 F 値の絞りを持つ.レンズ通過時に物理 cos⁴ falloff(口径食)が発生. + +**シミュ**: Mitsuba orthographic は絞りを持たず,cos⁴ falloff も発生しない. + +**構造的な違い**: + +- 実機は周辺ほど暗い物理 cos⁴ falloff +- シミュは完全に均一に光線取得 + +**白板撮影では許容できる理由**: + +- 実機側で **lscMap 順方向適用**により ISP の補正(≒ 物理 cos⁴ の逆)が掛かる([TECH_07](TECH_07_LSC取り扱い方針.md) 参照) +- 結果,両者は「LSC 完璧補正後の理想値」相当のドメインに揃う +- ISP 補正残差は若干残るが,現状の評価精度では許容範囲 + +**将来の精緻化条件**: + +- TECH_04 フォールバック条件 C1〜C3 のいずれか発動時 + +### II-3. センサ ピクセル積分 (Sensor Pixel Integration) + +**実機**: 各画素は有限面積でセンサ表面に到達した光を積分する(**ピクセル積分**). + +**シミュ**: Mitsuba は画素中心で点サンプリング + 多重サンプリング(spp)で評価. + +**構造的な違い**: + +- 実機は画素サイズで空間積分(ローパスフィルタ的効果) +- シミュは点サンプリングのため,原理的にエイリアシング可能性あり(spp で緩和) + +**白板撮影では許容できる理由**: + +- spp=1024 で十分な多重サンプリング +- 白板は低空間周波数のシーン(一様パターン)でエイリアシング感度低 +- ROI 内で平均化される指標(mean / CoV / 勾配等)には影響軽微 + +### II-4. 暗電流・読み出しノイズ (Dark Current / Read Noise) + +**実機**: センサ固有の暗電流・読み出しノイズ・熱雑音.センサ温度や ISO 設定で変動. +**シミュ**: Mitsuba にはセンサノイズ概念なし(MC 計算ノイズのみ). + +**構造的な違い**: 実機にはセンサ起因のノイズフロアが存在. + +**白板撮影では許容できる理由**: + +- 白板は **高輝度シーン**でセンサノイズの相対影響は小(ショットノイズが支配的) +- ISO 40 で読み出しノイズも最小化されている +- 暗部の評価では効くが,白板評価では影響軽微 + +### II-5. その他の許容差異 + +| 項目 | 構造的差異 | 白板で許容できる理由 | +| --- | --- | --- | +| 量子効率の波長依存性 | 実機は QE が波長で変化.シミュは RGB チャネル独立 | 無彩色シーン(白板)では影響なし | +| シャッター方式 | 実機はローリングシャッター歪み等可能性.シミュは瞬間取得 | 静止白板撮影では影響なし | +| 温度依存性 | 実機センサは温度で挙動変化 | 通常使用温度範囲で安定 | +| センサ毎の個体差 | 実機ごとに微差あり | 1 個体での評価では問題なし | + +### タイプ I と II の対応マッピング再整理 + +§対応マッピング表 §追加チェック項目 を **タイプ I / II** で再分類すると: + +| 区分 | 項目 | +| --- | --- | +| **タイプ I**(本質構造同一・対応概念なし) | AWB OFF(#2) / NR OFF(#5) / EDGE OFF(#6) / LSC HIGH_QUALITY(#7) / LSC 順方向適用(#8) / 量子化(#1) / COLOR_CORRECTION_GAINS / COLOR_CORRECTION_TRANSFORM / CONTROL_VIDEO_STABILIZATION_MODE | +| **タイプ II**(構造的差異あり・白板で許容) | **CONTROL_AF_MODE**(焦点モデル) / 絞り・口径食 / センサ ピクセル積分 / 暗電流・読み出しノイズ / QE 波長依存 / シャッター方式 / 温度依存 | +| **対応必要だった項目** | AE OFF(#3 = mean アンカー) / ガンマ補正(#4 = OETF 無効化) | + +### 残差 2.63× との関係 + +Step 8-13 残差 2.63× について: + +- **タイプ I**(対応概念なし)が原因の可能性は **ゼロ**(実機側で揃えた) +- **タイプ II**(許容差異)が原因の可能性は **小さいが排除不能** + - AF: 白板評価では影響軽微と推定.ただし舌模型評価時は再考必要 + - 絞り口径食: lscMap 補正残差として若干寄与 + - ピクセル積分: spp=1024 で緩和済み + - センサノイズ: 白板高輝度で相対影響小 +- **シミュ物理モデル誤差**(タイプ II とは別)が **最有力候補** + - 反射率精度・LED 配光モデル・メッシュ幾何精度等 + +つまり残差 2.63× の主因は **タイプ II の許容差異**ではなく,**シミュ物理モデル誤差**の側にある可能性が高い.それでもタイプ II の候補は完全には排除できないため,将来 Step 8-14 以降で物理モデル精緻化と並行して **タイプ II 寄与の独立評価**も検討する余地はある. ## 動作確認の根拠 (Verification Evidence)