当前位置: 首页 > article >正文

3D Slicer 教程三 ---- 坐标系

   上篇提到3D Slicer 教程二 ---- 数据集-CSDN博客 3d slicer的坐标系与大多数医学影像软件使用LPS(左、后、上)坐标系统不太一样, 今天就仔细介绍一下坐标系的区别,复盘一下在影像处理中遇到的坐标问题(集中在坐标处理相关的,图像插值,图像处理, 定位线,翻页同步,空间定位,三维定位,mpr切片,vr测量,cpr重建等)

  在 2000 年代初期,当 Slicer 开始开发时,LPS 和 RAS 坐标系统都被广泛使用。GE的扫描设备传统上使用 RAS 坐标系统,而西门子(Siemens)和其他公司则使用 LPS。GE 的一些研究人员是 Slicer 的早期贡献者,因此 Slicer 选择了 RAS 坐标系统作为其内部表示。

一. 介绍

在日常的影像里面一般包括3种坐标系统: 世界坐标系统(world), 解剖坐标系(anatomical),图像坐标系统(image coordinate system).

                                                            图1

二.世界坐标系

    世界坐标系统(World Coordinate System)通常是一个笛卡尔坐标系统,用于定位模型(例如MRI扫描仪或患者)。每个模型都有自己的坐标系统,但只有一个世界坐标系统来定义每个模型的位置和方向.

  • 一个全局的参考坐标系,用于在更大的空间范围内定位和定向对象。
  • 在医学成像中,可以用于将患者的扫描数据与全球或设施范围内的其他数据关联起来

  跟这个世界坐标系比较相近的是设备坐标系(Device Coordinate System)

    与成像设备相关的坐标系,用于描述在设备空间中的位置和方向。例如,CT或MRI扫描仪中使用的坐标系,通常与设备的空间对齐。

这个坐标系就是上面的第一个 ,上面设备就是常见ct设备.

世界坐标系在模型定位,图像配准和融合,多模态图像融合,导航系统,设备校准,远程医疗和协作等用的比较多.

三. 解剖坐标系(anatomical)

又称患者坐标系统(patient coordinate system)

这个空间由三个平面组成,用来描述人类的标准解剖位置:

  • 轴向平面(axial plane)与地面平行,分隔头部(Superior)和脚部(Inferior)。
  • 冠状平面(coronal plane)与地面垂直,分隔前部(Anterior)和后部(Posterior)。
  • 矢状平面(sagittal plane)与地面垂直,分隔左侧和右侧(Left and Right)。

根据这些平面,所有的轴都有正方向的标记(例如,负的Superior轴由Inferior轴表示)。

解剖坐标系统是一个连续的三维空间,其中对图像进行了

采样。在神经成像中,通常根据被扫描的人脑来定义这个空间。因此,3D基础是沿着解剖轴的前后、上下、左右来定义的。

然而,不同的医学应用使用不同的3D基础定义。最常见的基础有:

  • LPS(Left, Posterior, Superior):用于DICOM图像,表示从右向左、从前往后、从下向上的方向。
  • RAS(Right, Anterior, Superior):与LPS类似,但前两个轴翻转,表示从左向右、从后向前、从下向上的方向。

因此,两种约定之间的唯一区别是前两个坐标的符号是相反的。

注意:

1. Slicer 内部使用 RAS 坐标系统存储所有数据类型的坐标值。

2. 为了与其他软件兼容,Slicer 假设所有文件中的数据都以 LPS 坐标系统存储,除非文件中明确声明坐标系统为 RAS。因此,当 Slicer 读取或写入文件时,可能需要翻转前两个坐标轴的符号,以将数据转换为 RAS 坐标系统。

 这种内部使用 RAS 坐标系统,而与外部文件交换时使用 LPS 坐标系统的策略,使得 Slicer 能够与遵循不同坐标系统标准的设备和软件进行交互。这也意味着我们在使用 Slicer 时需要意识到坐标系统可能的变化,并在必要时进行适当的转换。

四.图像坐标系统(Image Coordinate System)

这个坐标系就是我们熟悉的坐标系了

医学扫描仪创建了规则的点和单元格的矩形数组,这些点和单元格从左上角开始。i轴向右增加,j轴向下增加,k轴向后增加。

除了每个体素(voxel)的灰度值(ijk)之外,还存储了解剖坐标的原点和间距。

原点代表了解剖坐标系统中第一个体素(0, 0, 0)的位置,例如(100, 50, -25)毫米。

这个一般是dicom Tag: 0020,0032 Image Position (Patient) 患者原点坐标值

间距指定了每个轴上体素之间的距离,例如(1.5, 0.5, 0.5)毫米。

这个一般  dicom tag:(0028,0030) Pixel Spacing 像素间距

这意味着,如果你知道了原点的位置和体素的间距,你就可以计算出图像坐标系统中任何体素在解剖坐标系统中的对应位置。

假设你有一个图像,其原点位于(100, 50)毫米,间距为(1.5, 0.5)毫米。这意味着第一个体素(0, 0)位于(100, 50)毫米的位置,下一个体素(0, 1)将位于(100, 50 + 0.5)毫米的位置,而体素(1, 0)将位于(100 + 1.5, 50)毫米的位置。通过这种方式,你可以确定图像中每个体素在实际解剖空间中的位置。

总结一下这个转换,在平时的处理中,世界坐标系默认就跟患者坐标系一样了(业务不涉及到配准这边)  以图1为准

(1) 先Image Position (Patient) (DICOM Tag: 0020,0032):表示图像左上角在患者坐标系中的位置,单位通常是毫米(mm)。这个标签包含三个值,分别对应于X、Y、Z轴的位置.

确定原点的坐标 确定图1 第3个图左上角在第2个图的位置

(2)Image Orientation (Patient) (DICOM Tag: 0020,0037):定义了图像坐标与解剖学坐标体系对应坐标的夹角余弦值。这个标签包含六个值,前三个值表示图像行(row)的方向,后三个值表示图像列(column)的方向。这些值是相对于患者身体的,通常使用LPS(左后上)坐标系

确定图1 第3个图在 第2个图 的方向

(3)其他位置就是相对于 图1  第3个图的偏移,(偏移带像素间隔的)

Pixel Spacing (DICOM Tag: 0028,0030):给出了图像行和列方向的像素间距,即分辨率,单位也是毫米(mm)。这个标签包含两个值,第一个值表示行间距,第二个值表示列间距.

同一个图上, 同个序列不同图 涉及到 Spacing Between Slices (DICOM Tag: 0018,0088):表示相邻切片之间的物理距离,单位通常是毫米(mm)

Slice Thickness (DICOM Tag: 0018,0050):表示每个切片的厚度,单位也是毫米(mm)

(二维图像其实是一个三维体的像素投影  跟三维里面的最大,最小,平均密度投影不太像,这块是取的体接近最中间那片图像)

补充:

    (1) ITK坐标系统

医学扫描仪(如CT、MRI等)在获取图像数据时,会有一个固定的坐标系统来标记和定位图像中的每个点。这个坐标系统就是IJK坐标系统,它定义了图像数据的三维空间,其中:

  • I代表图像的一层中,水平方向上的位置(通常是左右方向)。
  • J代表图像的一层中,垂直方向上的位置(通常是前后方向)。
  • K代表图像堆栈中的层级位置,也就是沿着扫描方向的深度(通常是上下方向)。

IJK坐标系统关注的是图像数据本身,而不是扫描仪设备或扫描台的位置。这意味着,即使扫描台或患者移动,图像数据在IJK坐标系统中的位置也是固定的。这个坐标系统对于图像的采集、处理和分析都是非常重要的,因为它确保了图像数据的空间一致性和准确性。

(2) XYS 坐标系统

  这个就是平时用的右手坐标系

 (3)感兴趣的可以看看这个, 从LPS 转成RAS,坐标变换

  将LPS(左、后、上)坐标系转换为RAS(右、前、上)

  • 在LPS坐标系中,X轴从右向左增加,Y轴从前往后面增加,Z轴从下向上增加。
  • 在RAS坐标系中,X轴从左向右增加,Y轴从后向前增加,Z轴同样从下向上增加
  • 从LPS到RAS,需要对前两个坐标轴进行翻转。这可以通过一个变换矩阵来实现,该矩阵对X和Y轴的符号进行反转。
  • 一个简单的变换矩阵可以表示为:
  • 这个矩阵会将LPS坐标系中的点转换到RAS坐标系

看看官方文档 https://download.csdn.net/download/smallITperson/89889256 不要积分喔


http://www.kler.cn/news/358664.html

相关文章:

  • 小技巧——如何启动miivii控制器自带相机demo
  • 单细胞分析 | Cicero+Signac 寻找顺式共可及网络
  • c#webapi远程调试方法asp.netcore
  • 【思维导图】C语言
  • 【C语言】指针进阶【万字详细版】
  • 使用langchain和大模型API提取QA的实战教程
  • RHEL: rpm2cpio: signature hdr data: BAD, no. of bytes(19987) out of range
  • 【基于Spring Boot+Unipp的古诗词学习小程序【原创】
  • lazyLoad
  • 【java数据结构】栈
  • SQL Server LocalDB 表数据中文乱码问题
  • java 获取最高20%数据
  • 多进程多线程之间相互通信
  • JavaScript 第13章:Ajax 与异步请求
  • chat_gpt回答:python获取当前utc时间,将xml里时间tag里的值修改为当前时间
  • 上位机开发常用技术 C# Task 线程 开始,暂停,继续,停止
  • Flutter Container组件
  • Javascript 脚本查找B站限时免费番剧
  • 对“一个中心,三重防护”中安全管理中心的理解
  • jmeter 从多个固定字符串中随机取一个值的方法