diff --git a/CLAUDE.md b/CLAUDE.md index 1b056e6..937a928 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -67,6 +67,7 @@ ### 05_TECH(技術設計) - DNG 対応要求仕様: docs/05_TECH/TECH_01_DNG対応要求仕様.md +- SmTIAS-LightSim への引き継ぎ: docs/05_TECH/TECH_02_SmTIAS-LightSimへの引き継ぎ.md ### 07_REPORT(報告書) diff --git "a/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" "b/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" new file mode 100644 index 0000000..3db0f13 --- /dev/null +++ "b/docs/05_TECH/TECH_02_SmTIAS-LightSim\343\201\270\343\201\256\345\274\225\343\201\215\347\266\231\343\201\216.md" @@ -0,0 +1,72 @@ +# SmTIAS-LightSim への引き継ぎ (Hand-off to SmTIAS-LightSim) + +本ドキュメントは,MiniTias-Evaluation で実装した **DNG 読み込み I/F** を SmTIAS-LightSim 側へコピー・統合するための引き継ぎ書である.要求仕様は [TECH_01](TECH_01_DNG対応要求仕様.md)(SmTIAS-LightSim 側での名称は TECH_05). + +## 1. 実装スコープ (What is done / not done) + +TECH_01 の Phase 分割のうち,本引き継ぎ時点で完了しているのは **Phase 1(DNG 読み込み I/F)のみ**. + +| TECH_01 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〜6 | 既存パイプライン統合 / PNG vs DNG / SPEC 更新 | ❌ 未着手 | + +## 2. コピー対象ファイル (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/` 等に統合 | LSC 順適用・向き合わせ・評価フローの参考 | +| `src/analysis/spatial.py` の `calc_radial_min_max_ratio` | 既存 spatial/uniformity 相当へ**マージ** | 動径 min/max 比指標(追加指標) | + +- **ファイル先頭にコピー元を明記**(TECH_01 指定): + ```python + """DNG 読み込みモジュール. + + MiniTias-Evaluation/src/io/dng_loader.py を SmTIAS-LightSim にコピーしたもの. + オリジナルは MiniTias-Evaluation 側で管理する.バグ修正・機能追加はそちらで行い, + 本プロジェクトに反映する形を取る. + """ + ``` +- `spatial.py` は SmTIAS-LightSim 側の既存均一性コードと競合しうるため,**丸ごとコピーせず `calc_radial_min_max_ratio` のみマージ**すること. + +## 3. ★重要な設計判断・注意点(コピーだけでは伝わらない) + +以下は実装の前提であり,**TECH_01(要求仕様)の記述と食い違う点を含む**.必ず反映すること. + +1. **DNG は LSC 未補正 — `apply_lsc_inverse` は誤り**: RAW_SENSOR DNG はレンズシェーディング**未補正**(補正は DNG OpcodeList2 の GainMap / meta.json lscMap として付随するが rawpy は適用しない).TECH_01 の `apply_lsc_inverse`(「DNG=補正済み」前提で逆適用)は実態と逆.照明ムラを測るには **lscMap を順方向に適用**してレンズビネットを除去する(`image × interpolate(lscMap)`). +2. **linear 系出力は `output_color=raw`**: カラーマトリクスを通すとチャンネル混合で per-channel 比例が崩れる.`rgb_float32`/`luma_float32` は `output_color=rawpy.ColorSpace.raw` で読む(`rgb_uint8` のみ sRGB).これにより入射光量とセンサ信号の比例(放射輝度リニアリティ)を担保. +3. **向き**: DNG はセンサ native が **landscape**.PNG/preview と同じ portrait にするには `rot90(-1)`(左右反転なし.フロントカメラ id=1 の preview はミラーされるが RAW はミラーされない). +4. **luma の Rec.709 は固定加重プロキシ**: `output_color=raw` では Rec.709 luma は厳密な CIE 輝度ではなく,既存 PNG 経路互換の固定加重. +5. **PNG は厳密に linear 化できない**: トーンカーブ・8bit・透過関数不明のため.DNG 採用の根拠([REPORT_02](../07_REPORT/REPORT_02_PNG_DNG評価比較報告書.md)). + +## 4. 引き渡す評価結果(暗闇=MiniTIAS のみ) + +代表結果は **外乱光に汚染されていない「MiniTIAS の照明のみ」の撮影**(`MiniTIAS_QM_20260601_124500`,室内灯 OFF)を採用する.外乱光の有無で評価はほぼ変わらない([REPORT_03](../07_REPORT/REPORT_03_外乱光影響評価報告書.md))が,純粋な装置照明の均一性を代表させるため暗闇条件を選定. + +評価条件: linear(output_color=raw)/ portrait / LSC 補正あり / 白板 ROI. + +| 指標 | 値 | +| --- | --- | +| CoV | 0.0695 | +| max/min 比 | 1.617 | +| 中心/周辺比 | 1.0911 | +| 勾配 (%) | 8.35 | +| 動径 min/max 比 | 0.8600 | + +成果物(図・CSV)はハンドオフ束 `handoff_smtias_lightsim/results_dark_124500/` に同梱. + +## 5. コピー後の検証 (Verification — TECH_01 V4) + +- コピー後の SmTIAS-LightSim 側で**同じ DNG**(`MiniTIAS_QM_20260601_124500.dng`)を読み込み,**上表と同じ評価指標**が出ること. +- SmTIAS-LightSim の既存テストが全合格すること. +- 依存追加: `rawpy>=0.21.0`. + +## 6. 参照 (References) + +- [TECH_01 DNG 対応要求仕様](TECH_01_DNG対応要求仕様.md) +- [REPORT_02 PNG/DNG 評価比較報告書](../07_REPORT/REPORT_02_PNG_DNG評価比較報告書.md) +- [REPORT_03 外乱光影響評価報告書](../07_REPORT/REPORT_03_外乱光影響評価報告書.md) +- 設計判断・経緯の詳細: `docs/PROGRESS.md`