Newer
Older
SmTIAS-LightSim / src / sm_tias_lightsim / evaluation / roi_presets.py
"""キャリブレーション基準 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)