# 三个完整使用场景

输入由 `scripts/fixtures.py` 确定性生成，约 5×4×3×2 的合成体数据，包含斜切
qform、带剪切且原点不同的 sform、负 qfac 和缩放。它们不是真实医学影像，
不用于证明临床有效性。`scripts/scenarios.py` 执行流程并用 NiBabel 独立验收。

## 1. 科研/教学的 4D 切片与坐标提取

用户已有授权体数据，希望在 MoonBit 中检查时间帧、取出二维数据并知道体素空间
位置，无需让 Python 参与产品运行。

输入：`input/phantom.nii.gz`，时间帧 1、数据轴 2、第 1 层。
流程：inspect 解码样本及缩放 → slice 取层 → world 显式选择 qform 计算
`[2,1,1]` 的世界坐标。qform 和 sform 分别显示，不要求两者相同。
输出：`01-inspect.json`、`01-slice.json`、`01-world.json`。
验收：与 NiBabel 缩放体素及 qform 乘积一致；形状、单位、非有限值计数明确。
限制：数据轴切片，不做解剖正交重采样或疾病判断。

## 2. 图像与标签的空间网格门控

用户需叠加分割标签，但尺寸相同不代表空间原点/方向相同。

输入：4D phantom、3D 二值 labels，以及 sform 原点沿 x 偏移 5 mm 的负例。
流程：grid 比较空间尺寸、坐标系代码和毫米坐标误差；错位负例退出码 2，拒绝
直接配对；匹配标签通过后提取原图第 0 帧与标签同层。
输出：`02-grid-rejected.json`、`02-grid-compatible.json`、
`02-gated-overlay-data.json`（供消费端绘制的配对数据，不宣称已实现查看器）。
验收：同尺寸错位负例必须失败，匹配正例通过；不自动“修好”不匹配文件。
限制：只证明采样网格一致，不证明受试者相同、解剖配准或标注质量。

## 3. 保持世界位置的 ROI 与轴重排导出

用户要减小分析样例或适配后续工具的轴顺序，希望保留原始值与空间位置。

输入：phantom；起点 `[1,1,1]`，大小 `[3,2,2]`；轴排列 `[2,0,1]`，翻转新轴 0。
流程：裁剪保留全部时间帧 → 分别更新两套原点 → 重排原始样本字节 → 独立写回
qform 四元数和 sform 矩阵 → 新文件重新解码。
输出：`03-roi.nii.gz`、`03-reoriented.nii` 与操作/元数据损失报告。
验收：NiBabel 读回形状、原始值、缩放、字节序、单位、形式代码；比较新旧对应
体素坐标。未知扩展不会静默传播到错误位置。
限制：不做插值、任意旋转、向量分量旋转或非线性配准。

## 复现与产物

README 的运行命令生成全部输入、输出及 `summary.json`。输出目录必须不存在，
防止混入旧结果。CI 的两平台附件含全部合成输入和输出，可以直接下载检查。
