ras转为lps坐标系

在医学图像处理(如 NIfTI 格式)中,RAS (Right, Anterior, Superior) 和 LPS (Left, Posterior, Superior) 是最常用的两种世界坐标系。

  • RAS :NIfTI 格式官方推荐存储坐标系的物理方向(NIfTI 的 qform / sform 通常编码为 RAS)。
  • LPS:DICOM 标准以及很多临床软件(如 ITK-SNAP、3D Slicer 内部默认、Eclipse 等)默认使用 LPS 坐标系。

将 RAS 转换为 LPS 非常简单,核心原理是:X 轴和 Y 轴方向翻转,Z 轴保持不变

复制代码
import numpy as np
import nibabel as nib

# 1. 定义 RAS 到 LPS 的变换矩阵
M_ras_to_lps = np.diag([-1, -1, 1, 1])

# 2. 转换单个坐标点
point_ras = np.array([10.5, -20.0, 30.2, 1.0]) # [x, y, z, 1]
point_lps = M_ras_to_lps @ point_ras
print(f"RAS 坐标: {point_ras[:3]} -> LPS 坐标: {point_lps[:3]}")
# 输出应该是 [-10.5, 20.0, 30.2]

# 3. 转换 NIfTI 图像的 Affine 矩阵
# 假设 img 是你的 NIfTI 图像对象
# img = nib.load('brain.nii.gz')
# affine_ras = img.affine  # nibabel 默认读取出来的就是 RAS 的 affine

# 模拟一个 RAS affine 矩阵用于演示
affine_ras = np.array([
    [1.5, 0.0, 0.0, -100.0],  # X 方向缩放 1.5 (R)
    [0.0, 1.5, 0.0, -120.0],  # Y 方向缩放 1.5 (A)
    [0.0, 0.0, 2.0,  -80.0],  # Z 方向缩放 2.0 (S)
    [0.0, 0.0, 0.0,    1.0]
])

# 左乘变换矩阵,得到 LPS 下的 affine
affine_lps = M_ras_to_lps @ affine_ras

print("\n原始 RAS Affine 矩阵:")
print(affine_ras)
print("\n转换后的 LPS Affine 矩阵:")
print(affine_lps)

注意:(ITK) 或 Python (SimpleITK) 环境下:

  1. ITK 内部默认使用 LPS 坐标系

  2. 当你用 SimpleITK 读取一个 NIfTI 文件时,SimpleITK 会自动将 NIfTI 内部的 RAS Affine 矩阵转换为 LPS。

  3. 因此,如果你在 nibabel (RAS) 和 SimpleITK (LPS) 之间传递坐标或 Affine 矩阵,必须执行上述的 X,YX,Y 翻转操作,否则配准或分割结果会出现左右、前后颠倒。

  4. 使用 nibabel 读 NIfTInibabel 的设计哲学是:无论 NIfTI 文件底层存的是什么,img.affine 一律返回 RAS 坐标系下的矩阵nibabel 会在底层自动帮你处理 qform/sform 的转换。

    复制代码
     import nibabel as nib
     img = nib.load('brain.nii.gz')
     affine = img.affine # 拿到的绝对是 RAS!

5.使用 SimpleITK 读 NIfTI/DICOMSimpleITK (基于 ITK) 的设计哲学是:一律使用 LPS 坐标系。它读取图像后,内部的方向矩阵自动转换为 LPS。

复制代码
    import SimpleITK as sitk
    img = sitk.ReadImage('brain.nii.gz')
    direction = img.GetDirection() # 拿到的是 LPS 方向!

根据affine判断是lps还是ras:

推断原理:体素增长方向与物理方向

在医学图像中,体素索引 (i,j,k)(i,j,k) 通常是按照特定的解剖学方向存储的:

  • ii 轴:通常从左到右
  • jj 轴:通常从后到前
  • kk 轴:通常从下到上

Affine 矩阵的前三列代表体素三个轴在世界坐标系中的方向向量和缩放比例 。我们主要看 3×33×3 子矩阵的主对角线元素的符号。

假设是 RAS 坐标系(+X=Right, +Y=Anterior, +Z=Superior):
  • ii 从左向右增加 →→ 指向 Right →→ 与 +X 方向一致 →→ 对角线第 1 个元素为
  • jj 从后向前增加 →→ 指向 Anterior →→ 与 +Y 方向一致 →→ 对角线第 2 个元素为
  • kk 从下向上增加 →→ 指向 Superior →→ 与 +Z 方向一致 →→ 对角线第 3 个元素为
    结论:一个典型 RAS 矩阵的主对角线通常是 [+, +, +]
假设是 LPS 坐标系(+X=Left, +Y=Posterior, +Z=Superior):
  • ii 从左向右增加 →→ 指向 Right →→ 与 +X(Left) 方向相反 →→ 对角线第 1 个元素为
  • jj 从后向前增加 →→ 指向 Anterior →→ 与 +Y(Posterior) 方向相反 →→ 对角线第 2 个元素为
  • kk 从下向上增加 →→ 指向 Superior →→ 与 +Z(Superior) 方向一致 →→ 对角线第 3 个元素为
    结论:一个典型 LPS 矩阵的主对角线通常是 [-, -, +]
相关推荐
视觉工程师07064 小时前
工业相机选择CCD 还是 CMOS
数码相机·视觉检测
FLJwu9 小时前
运动相机 ID 外观与壳体开模实战 02:壳体注塑缺陷|缩水、气泡、披风、熔接痕量产改善方案|20 年源头工厂量产经验
经验分享·数码相机·相机
高升说20 小时前
多相机同步怎么选:硬件同步与软件同步的原理、对比与选型流程
人工智能·数码相机
明志数科1 天前
从300克Ego头环看第一人称数据采集趋势:设备轻量化之后,场景端壁垒在哪
数码相机·学习
FLJwu1 天前
运动相机 ID 外观与壳体开模实战 01:ID 造型、拔模角度、壁厚设计 OEM 量产避坑|20 年源头工厂量产经验
经验分享·数码相机·相机
qq_526099131 天前
视觉检测工控机丢帧、掉线、卡顿,分别是什么原因?按这张表查
数码相机·计算机视觉
kyle~2 天前
ISP---RAW数据解析:从PixelFormat、Packed_Buffer到Bayer解码
数码相机·接口隔离原则
FLJwu2 天前
镜头模组与画质量产实战 03:运动相机 ISP 图像调校、杂光鬼影抑制与来料验收标准|20 年源头工厂量产经验
经验分享·数码相机·产品运营·接口隔离原则·相机
高升说2 天前
手眼 3D 相机选型:先定工作距离,再谈精度,最后定安装
人工智能·数码相机·3d
智简数文3 天前
锂电池检测用工业相机哪家好?极片/隔膜/电芯参数选型对照
数码相机