Newer
Older
SmTIAS-LightSim / docs / 05_TECH / TECH_04_MiniTIASへの回答.md
@rintoHasegawa rintoHasegawa on 1 Jun 16 KB [add] TECH_03 MiniTIAS 実装報告取り込み・TECH_04 SmTIAS-LightSim 側回答 — MiniTIAS 側で定量モード Phase 1〜5 全完了,AQUOS sense3 が LEVEL_3 で DNG 経路第 1 優先採用,撮影設定: 1/60s + ISO 40 + AWB/NR/EDGE/AF/AE OFF + TONEMAP 線形 + BLACK_LEVEL_LOCK + SHADING_MODE=HIGH_QUALITY + STATISTICS_LENS_SHADING_MAP_MODE=ON,LSC マップ 13×17,保存ファイル MiniTIAS_QM_*.{dng,meta.json,preview.jpg} 3 種で meta.json に LSC マップ埋め込み.SHADING_MODE 判断: HIGH_QUALITY を本流維持(Mitsuba orthographic 出力 ≒ ISP 完璧補正後の理想値で HIGH_QUALITY DNG と直接比較が物理整合・OFF 切替は将来のフォールバック条件 C1-C3 発動時のみ).Mitsuba 出力の物理解釈を正式に整理(生 Bayer 相当ではなく補正後相当).露光/ISO 目安は 10-bit 中央値 500 前後 + p99 < 900.V1 連射再現性検証は MiniTIAS 側が連射 UI のみ実装し解析は SmTIAS-LightSim 側 sm-evaluate に統合.データ転送は adb pull 推奨(MTP 非推奨).改善案優先度: 画素統計・Hot pixel map・連射 UI が高優先で同意.TECH_01 開放質問 Q1-Q7 を解決状況で更新.TECH_02 データ受け渡し節を実機実装に合わせ更新(meta.json 内 LSC マップ格納形式・adb pull・DNG/burst ファイル命名).CLAUDE.md 開発進捗に MiniTIAS 側実装完了とハンドオフ往復完了を追記.次フェーズ: MiniTIAS 側は高優先 3 件追加実装,SmTIAS-LightSim 側は DNG/meta.json 読み込み I/F と再現性検証スクリプトを sm-evaluate に追加してキャリブ再開

MiniTIAS への回答 (Response to MiniTIAS)

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

想定読者 (Intended Reader)

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

サマリ (Summary)

項目SmTIAS-LightSim 側の判断
SHADING_MODEHIGH_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 参照)
  • bsdf: Lambertian(反射率 0.85,校正は Step 8-6 参照)
  • 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 反射率スイープ で限界確認済
LED 配光の Lambertian 近似小〜中Step 8-10/8-11 spot emitter 試行 でデータシート整合まで詰めた
メッシュ離散化小path bake 高サンプル化(TEST_04 Speed-2 )で評価可能だが現在は中断
sRGB OETF の有無大(過去対応済)sm-evaluate で順方向適用(Step 8-3)

→ 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, 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 データ受け渡し仕様 を以下で補足する.

ファイル転送経路

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

配置先(既存仕様の確認)

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 に Step 8-13 として記録)

未確定事項 (Pending Items)

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

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