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 不要积分喔
相关文章:
3D Slicer 教程三 ---- 坐标系
上篇提到3D Slicer 教程二 ---- 数据集-CSDN博客 3d slicer的坐标系与大多数医学影像软件使用LPS(左、后、上)坐标系统不太一样, 今天就仔细介绍一下坐标系的区别,复盘一下在影像处理中遇到的坐标问题(集中在坐标处理相关的,图像插值,图像处理, 定位线,翻…...
Video-LLaMA论文解读和项目部署教程
Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding 相关工作 大型语言模型: 本文的工作基于这些LLM,并提供即插即用插件,使其能够理解视频中的视觉和听觉内容。 多模态大型语言模型: 现有…...
Elasticsearch设置 X-Pack认证,设置账号和密码
前言 以下Elasticsearch版本:7.9.3 ES自带的X-Pack密码验证: X-Pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,所以我们想要开启账号密码验证…...
机器学习——量子机器学习(Quantum Machine Learning)
机器学习——量子机器学习(Quantum Machine Learning) 量子机器学习(Quantum Machine Learning)——未来的智能计算量子机器学习的核心概念使用Qiskit进行量子机器学习——代码示例代码解析量子机器学习的应用结论 量子机器学习&a…...
Android Studio 的 Gradle 任务列表只显示测试任务
问题现象如下: 问题原因: 这是因为Android Studio 设置中勾选了屏蔽其他gradle任务的选项。 解决方法: File -> Settings -> Experimental 取消勾选Only include test tasks in the Gradle task list generated during Gradle Sync&…...
Keepalived:高可用性的守护神
Keepalived:高可用性的守护神 在现代企业IT系统中,高可用性是确保业务连续性和服务质量的关键要素。系统面对硬件故障、软件错误、人为失误或自然灾害时,依然能保持正常运行,这样的能力对于企业来说至关重要。为此,业界开发了一系列高可用性解决方案,其中Keepalived以其…...
Golang笔记_day08
Go面试题(一) 1、空切片 和 nil 切片 区别 空切片: 空切片是指长度和容量都为0的切片。它不包含任何元素,但仍然具有切片的容量属性。在Go语言中,可以使用内置的make函数创建一个空切片,例如:…...
如何在 React 中更新状态对象的某个值
在 React 中,我们经常需要更新组件的状态来反映 UI 的变化。如果状态是一个复杂的对象,比如一个包含多个筛选条件的对象,我们希望只更新其中的某个键,而不是整个状态对象。今天,我将向大家展示如何在更新状态时保留已有…...
edge浏览器:你的连接不是专用连接
最近在使用edge浏览器打开github时,发现打不开了,提升你的连接不是专用连接。试了很多种方法甚至重装了浏览器,都没有用。 直到看到了这篇文章,才得到解决: 10 个修复此站点在 Windows Edge 上的连接不安全的问题htt…...
PDF 软件如何帮助您编辑、转换和保护文件
如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的…...
如何使用Java爬虫处理API接口返回的JSON数据?
处理API接口返回的JSON数据是Java爬虫开发中的一个常见任务。在Java中,有多个库可以帮助我们解析JSON数据,其中最流行的是Jackson和Gson。以下是使用这两个库处理JSON数据的基本步骤和示例代码。 使用Jackson处理JSON Jackson是一个功能强大的JSON处理…...
Ajax是什么?
Ajax是什么? Ajax是创建交互式网页应用的网页开发技术。简单来说就是网页在不加载的情况下,可以跟服务器交换数据,并更新页面的内容。 原理: 1. 创建xhr(xmlHttpRequest)对象; 2, 通过xhr对象的open()方法和…...
技术方向简介
掌握 Java基础,包括OOP思想、集合、常用的设计模式;熟悉基本的数据结构和算法; 掌握JVM虚拟机和Java多线程并发编程,熟悉线程池、线程安全机制、锁的使用; 熟悉MySQL、Oracle等关系型数据库锁、事务、索引相关知识,了解DDL原理&…...
延迟队列实现及其原理详解
1.绪论 本文主要讲解常见的几种延迟队列的实现方式,以及其原理。 2.延迟队列的使用场景 延迟队列主要用于解决每个被调度的任务开始执行的时间不一致的场景,主要包含如下场景: 1.比如订单超过15分钟后,关闭未关闭的订单。 2.比如用户可以…...
web APIs
目录 Web APIs第一天Dom获取&属性操作Web API基本认知变量声明作用和分类什么是DOMDOM树DOM对象 获取Dom对象根据CSS选择器来获取DOM元素(重点)其他获取DOM元素方法(了解) 操作元素内容对象.innerText 属性对象.innerHTML 属性…...
【Web前端概述】
HTML 是用来描述网页的一种语言,全称是 Hyper-Text Markup Language,即超文本标记语言。我们浏览网页时看到的文字、按钮、图片、视频等元素,它们都是通过 HTML 书写并通过浏览器来呈现的。 一、HTML简史 1991年10月:一个非正式…...
文献阅读:一种基于艾伦脑图谱的空间表达数据可视化、空间异质性描绘和单细胞配准工具
::: block-1 文献介绍 文献题目: AllenDigger,一种基于艾伦脑图谱的空间表达数据可视化、空间异质性描绘和单细胞配准的工具 研究团队: 王晓群(北京师范大学) 发表时间: 2023-03-16 发表期刊:…...
Redis学习笔记(三)--Redis客户端
文章目录 一、命令行客户端二、图形界面客户端1、Redis Desktop Manager2、RedisPlus 三、java代码客户端 本文参考: Redis学习汇总(已完结) Redis超详细入门教程(基础篇) Redis视频从入门到高级,redis视频…...
面试知识梳理
一、vue篇章 1.vue2和vue3性能方面的提升最主要的原因是什么? 1、1响应式的系统优化: vue3使用了es6的proxy对象来实现响应式系统,取代了vue2中基于Object.defineProperty的方法。Proxy提供了更强大和灵活的拦截能力,可以更有效地…...
Unity3D ScrollView 滚动视图组件详解及代码实现
前言 在Unity3D中,ScrollView(滚动视图)是一种常用的UI组件,它允许用户通过滚动来查看超出当前视图范围的内容。ScrollView通常用于显示长列表、大量文本或图像等。本文将详细介绍Unity3D中的ScrollView组件,并提供代…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
