Newer
Older
SmTIAS-LightSim / docs / 05_TECH / TECH_06_MiniTias-Evaluation引き継ぎ受領.md

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

本ドキュメントは MiniTias-Evaluation 側で TECH_05 DNG 対応要求仕様 の 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 で要求した 6 Phase のうち,本受領時点で完了しているのは Phase 1(DNG 読み込み I/F)のみ.

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

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

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

以下は実装の前提であり,TECH_05 要求仕様 の記述と食い違う点を含む.取り込み時に必ず反映すること.

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).

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

コピー元(MiniTias-Evaluation)コピー先(SmTIAS-LightSim)区分
src/io/dng_loader.pysrc/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 側へのコピー手順 の指定通り:

"""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.

指標値
CoV0.0695
max/min 比1.617
中心/周辺比1.0911
勾配 (%)8.35
動径 min/max 比0.8600

→ 本値が 新しい正規実機ターゲット(TEST_01 Step 8-13 以降).従来の通常モード PNG 値(CoV=0.0427)は,sRGB ガンマでムラが圧縮された 過小評価値だったことが TEST_05 で確認された.

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

5. 取り込み計画(SmTIAS-LightSim 側 3 サブタスク)

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

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

  • 本ファイル (TECH_06) で受領記録
  • TEST_05 として REPORT_02 を取り込み
  • TEST_06 として REPORT_03 を取り込み
  • TECH_05 の 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 に 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