在医学图像处理(如 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) 环境下:
-
ITK 内部默认使用 LPS 坐标系。
-
当你用 SimpleITK 读取一个 NIfTI 文件时,SimpleITK 会自动将 NIfTI 内部的 RAS Affine 矩阵转换为 LPS。
-
因此,如果你在
nibabel(RAS) 和SimpleITK(LPS) 之间传递坐标或 Affine 矩阵,必须执行上述的 X,YX,Y 翻转操作,否则配准或分割结果会出现左右、前后颠倒。 -
使用
nibabel读 NIfTI :nibabel的设计哲学是:无论 NIfTI 文件底层存的是什么,img.affine一律返回 RAS 坐标系下的矩阵 。nibabel会在底层自动帮你处理qform/sform的转换。import nibabel as nib img = nib.load('brain.nii.gz') affine = img.affine # 拿到的绝对是 RAS!
5.使用 SimpleITK 读 NIfTI/DICOM :SimpleITK (基于 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 矩阵的主对角线通常是[-, -, +]。
