本ドキュメントは SmTIAS-LightSim プロジェクトから MiniTIAS プロジェクトに対する 撮影モード拡張の要求仕様 である.SmTIAS-LightSim のキャリブレーション作業 (Step 8 系) で判明した「実機 PNG が定量データとして揺らぐ」問題を解消するための撮影アプリ側改修を依頼する.
MiniTIAS(MiniTias リポジトリ)の撮影アプリに,現状の通常撮影モードに加えて 「定量撮影モード (Quantitative Capture Mode)」 を追加することを要求する.
定量撮影モードでは:
これにより同じシーンを何度撮影しても再現性のある定量データが得られ,SmTIAS-LightSim 側のシミュレーション結果との突合が安定する.
→ 3 つのプロジェクトで 同じ評価指標 を出すことで「シミュ vs 実機」を比較する.
Step 8 キャリブレーション (TEST_01 参照) で,シミュと実機の比較を試みた結果,以下の現象が観測された:
「形を変える唯一の道」として LSC (Lens Shading Correction) モデル化 が候補に挙がったが,さらに調査した結果,より根本的な問題 が判明した:
MiniTIAS_20260408_144434) は MiniTIAS の通常撮影モードで取得されており,ISP がすべて自動制御で動作している.つまり「定量比較の対象である実機 PNG 自体が揺らいでいる」状態.まずここを固定化しない限り,シミュ側でいくらモデルを精緻化しても比較できない.
定量撮影モードの導入により以下を達成する:
撮影画面 (S-01) に「定量撮影モード」のトグルスイッチを追加する.
| キー | 値 | 目的 |
|---|---|---|
CONTROL_MODE | OFF(マニュアル全制御) | ISP オート制御の完全停止 |
CONTROL_AE_MODE | OFF | 自動露光停止 |
SENSOR_EXPOSURE_TIME | 固定値(要キャリブ,例 1/60 s) | 露光時間固定 |
SENSOR_SENSITIVITY | 最低 ISO(端末依存,例 50) | ノイズ最小化 + ゲイン固定 |
CONTROL_AWB_MODE | OFF | 自動 WB 停止 |
COLOR_CORRECTION_GAINS | 固定値 (R=G=B=1.0 推奨) | チャネルゲイン固定 |
COLOR_CORRECTION_TRANSFORM | 単位行列 | カラーマトリクス無効化 |
NOISE_REDUCTION_MODE | OFF | NR 無効化(アーティファクト排除) |
EDGE_MODE | OFF | エッジ強調無効化 |
TONEMAP_MODE | CONTRAST_CURVE (線形カーブ) または PRESET_CURVE (SRGB) | トーンマッピング固定 |
SHADING_MODE | HIGH_QUALITY (LSC 補正適用) または OFF (LSC 無効化) のいずれか選択可 | LSC の挙動制御(次節参照) |
STATISTICS_LENS_SHADING_MAP_MODE | ON | LSC ゲインマップ取得有効化 |
※
SHADING_MODE = OFFを選んだ場合は cos⁴ falloff が画像に残る.後段のシミュ側で物理 cos⁴ を加える前提なら有用.通常運用ではHIGH_QUALITYを推奨.
撮影成功時に CaptureResult.STATISTICS_LENS_SHADING_CORRECTION_MAP から LensShadingMap を取得して保存する.
| 項目 | 仕様 |
|---|---|
| 取得 API | result.get(CaptureResult.STATISTICS_LENS_SHADING_CORRECTION_MAP) |
| データ形状 | 4 × N × M float 配列(4 = R/Geven/Godd/B チャネル,N = 列,M = 行) |
| 値の意味 | ≥ 1.0 のゲイン係数.corrected = raw × gain |
| 保存形式 | NPZ(推奨)または JSON.画像ファイル名と同 prefix で <basename>.lsc.npz 等 |
| 保存先 | 画像と同ディレクトリ |
| マップサイズ | CameraCharacteristics.LENS_INFO_SHADING_MAP_SIZE から取得 |
LSC マップに加えて,撮影時の Camera2 API パラメータを JSON で保存する.後段でシミュレーションの境界条件を再現するために必要.
{
"capture_timestamp_utc": "2026-05-28T10:00:00Z",
"device_model": "SH-02M",
"android_version": "9",
"camera_id": "1",
"hardware_level": "LIMITED",
"capture_mode": "quantitative",
"settings": {
"control_mode": "OFF",
"ae_mode": "OFF",
"exposure_time_ns": 16666666,
"sensor_sensitivity_iso": 50,
"awb_mode": "OFF",
"color_correction_gains": [1.0, 1.0, 1.0, 1.0],
"color_correction_transform": "identity",
"noise_reduction_mode": "OFF",
"edge_mode": "OFF",
"tonemap_mode": "CONTRAST_CURVE",
"shading_mode": "HIGH_QUALITY",
"statistics_lens_shading_map_mode": "ON"
},
"image_format": "YUV_420_888",
"image_size": [4000, 3000],
"yuv_to_rgb_matrix": "BT.601"
}
ファイル名規則: <image_basename>.meta.json
優先順位は以下:
| 優先度 | フォーマット | 説明 |
|---|---|---|
| 第 1 | RAW_SENSOR (DNG) | ISP 介入ゼロ.センサ出力そのまま.DNG GainMap 仕様 と整合 |
| 第 2 | YUV_420_888 + 上記メタデータ + LSC マップ | 現状フォーマットに情報追加.後段で逆処理可能 |
| 第 3 | PNG(現状) + メタデータ + LSC マップ | 最小実装.BT.601 YUV→RGB 経由のため情報量は最小 |
第 1 は実機が DNG 出力をサポートしている必要がある(AQUOS sense3 で要確認).サポートしていない場合は第 2 を採用.
定量モード起動時に CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL を取得して以下を判定:
LEGACY: 定量モード 不可(マニュアル制御サポートなし)→ ユーザーに警告表示LIMITED: 部分サポート.SHADING_MODE と LSC マップ取得が可能か個別確認FULL / LEVEL_3: 完全サポート必要な能力フラグ:
REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR (露光・ISO 固定)REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING (NR/EDGE/TONEMAP/SHADING 固定)REQUEST_AVAILABLE_CAPABILITIES_RAW (DNG 出力,第 1 優先時のみ必須)判定結果は前述メタデータ JSON の hardware_level フィールドに記録する.
camera パッケージ は AE/AWB/SHADING_MODE 等の詳細制御を 直接公開していない ことが多い.定量モードを実現するには以下のいずれかが必要:
実装規模が大きい場合は段階的に:
MiniTIAS 既存構造に従い:
android/app/src/main/kotlin/<package>/
└── camera/
└── QuantitativeCameraController.kt # Camera2 直接制御
lib/services/
├── quantitative_camera_service.dart # Platform Channel ラッパ
├── lsc_map_service.dart # LSC マップ NPZ 保存
└── capture_metadata_service.dart # メタデータ JSON 保存
lib/providers/
└── camera_provider.dart # 定量モード状態追加(既存 Provider 拡張)
| 項目 | 改善内容 |
|---|---|
| 撮影再現性 | 同条件 10 連射で mean / std が ±1% 以内に揃う |
| 色温度ドリフト | AWB 固定により無彩色撮影で色シフト排除 |
| LSC 補正可視化 | ISP が適用したゲインマップが取得でき,シミュ側で逆適用可能 |
| 物理 cos⁴ 検証 | SHADING_MODE = OFF モードで実機 raw 相当を取得し,シミュ + cos⁴ と比較可能 |
| RAW 比較 (任意) | DNG 経路が確立すれば,ISP 完全排除でセンサ生値 vs Mitsuba 直接比較 |
| キャリブ作業の安定化 | SmTIAS-LightSim 側で同じ baseline を繰り返し再撮影しても結果が動かない |
MiniTIAS_20260408_144434) は 「通常モードで撮影された」 ことを SmTIAS-LightSim 側で明示記録(TEST_03 に追記予定)MiniTIAS_QM_YYYYMMDD_HHmmss.png(QM = Quantitative Mode)MiniTIAS_QM_YYYYMMDD_HHmmss.meta.jsonMiniTIAS_QM_YYYYMMDD_HHmmss.lsc.npz定量モード実装完了後,以下を実施して受け入れ判定とする:
同条件(光源 ON・同じ白板・三脚固定)で 10 回連続撮影 し,全画像で:
<basename>.lsc.npz が保存されているCameraCharacteristics.LENS_INFO_SHADING_MAP_SIZE と一致SHADING_MODE = OFF で撮影した画像が HIGH_QUALITY より周辺で明らかに暗い(cos⁴ falloff 可視化)HIGH_QUALITY × (1 / LSC マップ) ≈ OFF の関係性が成立する(数値差 < 5%)実装着手時に確認が必要な事項:
| ID | 質問 | 確認方法 |
|---|---|---|
| Q1 | AQUOS sense3 のハードウェアレベルは何か | デバッグビルドで CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL を読みログ出力 |
| Q2 | SH-02M のフロントカメラで REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING がサポートされているか | 同上.未サポートなら定量モードは部分実装 |
| Q3 | DNG (RAW_SENSOR) 出力は可能か | REQUEST_AVAILABLE_CAPABILITIES_RAW を確認 |
| Q4 | LSC マップサイズはどの程度か(例 13×17 等) | 実機でログ出力.データ量設計の参考 |
| Q5 | 露光時間・ISO の最適値(固定値の決定) | 白板撮影で被写体の明るさが適切かを実機で試行錯誤 |
| Q6 | 既存 MiniTIAS_20260408_144434 を定量モードで再撮影するか | 研究方針との整合(再撮影なら現 baseline は参考扱い) |
| Q7 | 既存 PNG 保存形式 (BT.601 経由) を維持するか YUV/RAW 直接保存に変えるか | SmTIAS-LightSim 側読み込みコストとのトレードオフ |