You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SimpleITK.GetDirection()输出解释及与DICOM、NIFTI的关联问题

SimpleITK方向矩阵与DICOM、NIfTI关联及常见切面取值说明

1. SimpleITK.GetDirection()输出含义

GetDirection()返回的是一个3×3的方向余弦矩阵的行优先展平元组,作用是描述图像像素坐标到患者世界坐标系的映射关系:

  • 矩阵的每一列对应图像的一个轴(x轴/行方向、y轴/列方向、z轴/层方向)在世界坐标系下的单位方向向量
  • 矩阵为正交矩阵,行列式为±1,为负时代表图像存在镜像翻转
  • SimpleITK默认使用LPS(左-后-上)作为世界坐标系:x轴正方向指向患者左侧、y轴正方向指向患者后侧、z轴正方向指向患者头侧

2. 与DICOM Image Orientation (Patient)字段的关联

DICOM标准中的Image Orientation (Patient)(以下简称IOP)字段为6个浮点数的序列,和SimpleITK方向矩阵完全兼容:

  • IOP的前3个值 = 方向矩阵第一列的三个元素,对应图像行方向在LPS坐标系下的方向余弦
  • IOP的后3个值 = 方向矩阵第二列的三个元素,对应图像列方向在LPS坐标系下的方向余弦
  • DICOM单帧没有显式存储层方向,层方向由行方向向量和列方向向量叉乘计算得到,和SimpleITK方向矩阵的第三列完全一致

3. 与NIfTI格式的关联

NIfTI格式默认使用RAS(右-前-上)作为坐标系,和SimpleITK的LPS坐标系仅x、y轴符号相反:

  • SimpleITK读取NIfTI文件时,会自动将NIfTI存储的RAS方向矩阵转换为LPS格式,再通过GetDirection()返回
  • SimpleITK写入NIfTI文件时,也会自动将内部的LPS方向矩阵转换为RAS格式存储,无需用户手动做坐标系转换

4. 标准无旋转切面对应的IOP取值

以下为临床常用的无倾斜、无翻转切面的标准IOP值,可直接使用:

  • 轴位(Axial,横断位):1\0\0\0\1\0
    对应SimpleITK方向矩阵:(1, 0, 0, 0, 1, 0, 0, 0, 1)
  • 冠状位(Coronal,额状位):1\0\0\0\0\1
    对应SimpleITK方向矩阵:(1, 0, 0, 0, 0, 1, 0, -1, 0)
  • 矢状位(Sagittal,旁正中位):0\1\0\0\0\1
    对应SimpleITK方向矩阵:(0, 1, 0, 0, 0, 1, 1, 0, 0)
    如果图像存在旋转、倾斜,可根据切面和LPS坐标系的夹角计算对应方向余弦即可。

5. DicomSeriesFromArray示例的设定逻辑

该示例的核心逻辑是:先给SimpleITK图像对象设置正确的方向矩阵,导出DICOM序列时,SimpleITK会自动从方向矩阵中提取前6个值写入IOP字段,无需手动赋值。如果你的输入数组是其他切面,只需要提前调用SetDirection()传入对应切面的方向矩阵即可,后续导出DICOM时IOP会自动匹配。

内容的提问来源于stack exchange,提问作者vpap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:54:01