本ドキュメントは TECH_03 定量モード実装報告と SHADING_MODE 相談 に対する SmTIAS-LightSim 側からの回答書 である.MiniTIAS 側の実装結果評価・SHADING_MODE 判断・物理解釈の修正・運用上の合意事項を明文化する.
| 項目 | 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 で適切か実機で要確認 |
| 作業フェーズ分け | フェーズ A(直近): 1 ショット撮影でシミュとの対応を先に検証 → フェーズ B(後続): 対応が取れたら連射 UI 実装と V1 再現性検証 |
| V1 連射再現性検証 | フェーズ B に後回し.フェーズ A で対応の見通しが立ってから着手.解析は SmTIAS-LightSim 側 sm-evaluate に統合,MiniTIAS 側は連射 UI のみ実装(フェーズ B 時点) |
| データ転送 | adb pull 推奨.MTP 経由は禁止しないが大容量 DNG で不整合リスクあり |
| 改善案優先度 | フェーズ A 用: 画素統計・Hot pixel map を高優先で同意.連射 UI は フェーズ B に後回し.他はキャリブ進捗を見て判断 |
→ フェーズ A で MiniTIAS 側に追加で依頼するのは 画素統計・Hot pixel map の 2 件と 白板 1 ショット試し撮りのみ.連射機能はフェーズ B まで保留.
選択肢 (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,周辺で大きい) | 理想的にはほぼ補正済み(残差あり) |
つまり:
逆に SHADING_OFF DNG と Mitsuba 出力を直接比較するには Mitsuba 側に物理 cos⁴ falloff を別途モデル化する必要があり,新たな自由度(絞り径・焦点距離・口径食モデル)が入る.自由度が増えれば overfitting リスクも増える.現状の方針(HIGH_QUALITY 維持)は overfitting 回避の観点でも妥当.
実装した LSC マップ取得機構 (STATISTICS_LENS_SHADING_MAP_MODE = ON) は本流の比較では直接使わないが,以下の検証用途で価値が高い:
| 用途 | 説明 |
|---|---|
| 個体差検証 | 実機ごと・撮影ごとに LSC マップが変動するか確認.固定なら端末校正値,変動なら AWB 連動の動的計算 |
| 補正残差の可視化 | LSC マップが実画像のずれを完全に説明するか,残差がどの程度残るかを定量化 |
| 物理 cos⁴ との比較 | LSC マップ ≒ 物理 cos⁴ の逆数か検証.モデル化検討の物理動機として使える |
| SHADING_OFF へのフォールバック | 後述「フォールバック条件」発動時に,OFF データへの逆適用ロジックの正当性検証に使える |
→ メタデータ JSON に LSC マップを保存し続ける現実装は そのまま維持を依頼.
「もし問題があったら 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).
現時点では発動条件未到達.実装は不要.
TECH_03 §SHADING_MODE 経緯で混乱の元になった「Mitsuba 出力 = 生 Bayer 相当か?」について,SmTIAS-LightSim 側の正式な物理モデルを整理する.
path tracer(多重反射,max_depth=8)→ シミュ 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 を適用する).
本回答時点での研究上の優先順位として,「シミュ vs 実機の対応がそもそも取れるか」を 1 ショットで先に確認してから連射に進む 二段階方式を採用する.
目的: 1 枚の定量モード DNG とシミュ Mitsuba 出力の対応そのものを評価する.
MiniTIAS 側の作業:
白板で 1 ショット試し撮り(現状実装で OK,追加実装なし)
画素統計を meta.json に追加(高優先)
Hot pixel map 取得(高優先)
STATISTICS_HOT_PIXEL_MAP_MODE = ONSmTIAS-LightSim 側の作業:
DNG (RAW_SENSOR) 読み込み I/F の実装 (evaluation/dng_loader.py 想定)
rawpy 等で 10-bit BGGR Bayer を展開メタデータ JSON 読み込み I/F の実装 (evaluation/metadata.py 想定)
settings / actual / sensorCharacteristics / lscMap の読み取り新規 baseline config の作成 (configs/eval_baseline_quantitative.yaml)
1 ショット シミュ vs 実機 突合
フェーズ A 完了の判定:
フェーズ A で対応の見通しが立った場合のみ着手.目的は TECH_01 検証 V1(10 連射 mean CoV < 1%)の達成.
MiniTIAS 側の作業(フェーズ B 時点):
MiniTIAS_QM_YYYYMMDD_HHmmss_burst{0..9}.dngSmTIAS-LightSim 側の作業(フェーズ B 時点):
scripts/verify_repeatability.py
役割分担の根拠:SmTIAS-LightSim 側に既存の解析基盤(uniformity.py, evaluation/*.py)があるので,再現性検証もそこに統合する方が将来のキャリブ作業との整合性が高い.
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)に.
提案された「AE を 1 回走らせて値を読み,以降固定」は 歓迎.実装すれば以下の利点:
settings.exposure_time_ns / settings.sensor_sensitivity_iso に校正済み値を記録ただし優先度は 中(現状の手動ハードコードでも研究は進められる).連射 UI と画素統計が先.
TECH_03 「検討中の改善案」に対する SmTIAS-LightSim 側の優先度評価.本回答ではフェーズ A/B 分けにより 連射 UI を高優先 → フェーズ B(中優先)に降格する点が当初提案からの修正.
| MiniTIAS 側優先度 | 項目 | SmTIAS-LightSim 側評価 | フェーズ | 理由 |
|---|---|---|---|---|
| 高 | 画素統計を meta.json に追加(mean/max/p99/saturated_ratio) | 同意,高 | A | 飽和判定がないと「定量データの有効性」が事後判断になる.撮影時に即判定したい.1 ショット分析でも必須 |
| 高 | Hot pixel map 取得 (STATISTICS_HOT_PIXEL_MAP_MODE = ON) | 同意,高 | A | 10-bit のホット画素は max/std 指標に大きく影響.マスク必須 |
| 高 | 連射機能(V1 検証用) | 降格.フェーズ A 結果次第で再評価 | B(保留) | 1 ショットで対応が取れることを先に確認すべき.対応が取れないなら連射しても無意味 |
| 中 | 露光時間・ISO の半自動キャリブ | 同意,中 | B 以降 | 手動ハードコードでも進められる.運用が定着した後でよい |
| 中 | レンズ・センサ校正値を meta に追加 | 同意,中 | B 以降 | DNG Exif に既に埋め込まれている分は重複.未埋め込み値のみ追加で十分 |
| 低 | Dark frame / Flat field キャリブ機能 | 同意,低 | C 以降 | 実物理 cos⁴ の独立測定として理想的だが,現状の HIGH_QUALITY 経路では LSC マップで代替可能 |
→ フェーズ A で MiniTIAS 側に依頼するのは「画素統計・Hot pixel map」の 2 件のみ.連射 UI と他項目はフェーズ A 完了後に再評価.
TECH_02 データ受け渡し仕様 を以下で補足する.
adb pull /sdcard/Pictures/MiniTIAS/ <local_path>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 は解析不要なので配置任意.
MiniTIAS_20260408_144434.png(通常モード)は SmTIAS-LightSim/reference_measurement/MiniTIAS_20260408_144434/ 配下に保持.新規定量モード baseline 取得後は参考扱いで,本流キャリブから外す.
本回答に基づく次フェーズの作業を整理.フェーズ A 完了後にフェーズ B への移行を判断する.
STATISTICS_HOT_PIXEL_MAP_MODE = ONreference_measurement/quantitative/ へ adb pull 転送連射 UI は不要.本フェーズでは 1 ショット分析を優先.
evaluation/dng_loader.py 新規想定)evaluation/metadata.py 新規想定)configs/eval_baseline_quantitative.yaml の作成フェーズ A 完了後,1 ショット突合の結果から以下を判断:
| 結果 | 判断 | 次の動き |
|---|---|---|
| 残差が縮む(≤ 1.5×) | 撮影モード変更が効いた | フェーズ B(連射 V1 検証)に進む.連射 UI 実装依頼 |
| 残差変わらず(≈ 2.1×) | 撮影モード変更だけでは足りない | SHADING_MODE フォールバック条件 C1 検討.物理モデル見直し(LSC モデル化/反射特性/emitter 配光) |
| 残差が増える | 解析パイプラインに不整合 | DNG 読み込み・黒レベル・デモザイク・カラーマトリクスを疑う.デバッグ |
フェーズ A で対応の見通しが立った場合のみ着手.
reference_measurement/quantitative/ へ転送scripts/verify_repeatability.py の実装以下は本回答時点では判断保留.後続作業の進捗に応じて追加判断する:
| ID | 内容 | 判断時期 |
|---|---|---|
| P1 | DNG 内 Bayer データから RGB への展開方法(rawpy 等使用) | sm-evaluate DNG 読み込み実装時 |
| P2 | 黒レベル除去の有無(meta.json sensorCharacteristics.black_level_pattern で対応) | 同上 |
| P3 | デモザイク手法(最近傍 / バイリニア / AHD) | 同上.評価指標への影響を実測比較 |
| P4 | カラーマトリクス適用の有無 | 無彩色シーンでは影響軽微.本流は無適用で進める |
| P5 | 連射時の物理的振動・温度ドリフトの扱い | V1 結果次第.問題があれば連射間隔の延長等を検討 |