"""キャリブレーション基準 ROI のプリセットと dict ベース抽出ヘルパ.
スライド/比較パネル生成スクリプト(scripts/build_*_panel.py 等)が共通で使う
ROI 座標を一元管理する.座標は評価パイプライン(sm-evaluate)の
configs/eval_baseline*.yaml / eval_real.yaml と同一.
評価本体(シーンスキーマ ``RoiConfig`` を使う側)は
``sm_tias_lightsim.evaluation.roi.extract_roi`` を使うこと.
本モジュールは ``{"x", "y", "w", "h"}`` dict を扱うスクリプト向けの軽量ヘルパ.
"""
from __future__ import annotations
import numpy as np
# シミュ luminance.npy 用 ROI(configs/eval_baseline*.yaml と整合).
SIM_ROI = {"x": 24, "y": 37, "w": 464, "h": 450}
# 実機測定画像用 ROI(configs/eval_real.yaml と整合).
REAL_ROI = {"x": 539, "y": 1015, "w": 1400, "h": 1409}
def extract_roi_xywh(arr: np.ndarray, roi: dict) -> np.ndarray:
"""ROI 矩形(``{"x", "y", "w", "h"}``)を切り出して float64 で返す.
先頭 2 軸を (H, W) とみなすため,2D(輝度)・3D(RGB)どちらの配列も扱える.
Args:
arr: 先頭 2 軸が (H, W) の配列.
roi: ``{"x", "y", "w", "h"}`` 形式の ROI 辞書(``SIM_ROI`` / ``REAL_ROI``).
Returns:
ROI でクロップした float64 配列(入力と同じ次元数).
"""
x, y, w, h = roi["x"], roi["y"], roi["w"], roi["h"]
return arr[y : y + h, x : x + w].astype(np.float64)