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

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 发表期刊&#xff1a…...

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组件,并提供代…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

MySQL的pymysql操作

本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...