from __future__ import annotations from pathlib import Path import nibabel as nib import numpy as np def load_volume(path: str | Path) -> tuple[np.ndarray, np.ndarray]: img = nib.load(str(path)) return np.asarray(img.dataobj), img.affine def percentile_window(data: np.ndarray, lo: float = 2.0, hi: float = 98.0) -> tuple[float, float]: nz = data[data > 0] if (data > 0).any() else data return float(np.percentile(nz, lo)), float(np.percentile(nz, hi))