码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 3Dslicer医学图像三维坐标系(xyz,RAS,IJK)差异及处理


    目录

    World coordinate system世界坐标系xyz

    Anatomical coordinate system解剖学坐标系(LPS/RAS/RAI)

    Image coordinate system图像坐标系ijk

    Image transformation图像转换

    三维坐标变换

    A.旋转矩阵和旋转向量

    B.欧拉角

    C.四元数​编辑

    计算平面角Angle Planes插件

    参考链接



    处理医学图像和应用程序时的问题之一是坐标系之间的差异。成像应用中常用三种坐标系:

    xyz是世界坐标系

    RAS是解剖坐标系,单位mm
    IJK是像素/体素坐标系,单位像素pixel/体素voxel

    世界(xyz轴)                                解剖学(RAS轴)                        图像坐标系(IJK轴)

     
    每个坐标系都有一个用途,并以不同的方式表示其数据。

    World coordinate system世界坐标系xyz

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

    Anatomical coordinate system解剖学坐标系(LPS/RAS/RAI)

    医学成像技术最重要的模型坐标系是解剖空间(也称为患者坐标系)。这个空间由三个平面组成,用于描述人类的标准解剖位置:

    • axial 平面平行于地面,将上与下分开
    • coronal 平面垂直于地面,将前与后分开
    • sagittal平面将左与右分开

    从这些平面可以看出,所有轴的符号都在正方向上(例如,负上轴由下轴表示)。

    解剖学坐标系是一个连续的三维空间,其中对图像进行了采样。在神经影像学中,通常根据正在扫描其大脑的人来定义这个空间。因此,3D基是沿着前后,下上和左右的解剖轴定义的。

    然而,不同的医疗应用使用这种3D基础的不同定义。最常见的是以下基础:

    • LPS(左、后、上)用于 DICOM 映像和 ITK 工具包
    • RAS(右,前,上)类似于LPS,前两个轴翻转并由3D切片器使用

    • LPS(Left, Posterior, Superior): MHD图像(meta image), ITK工具包, ITK-Snap软件(该软件中写的是RAI)使用
    • RAS(Right, Anterior, Superior): Nifti图像和3D Slicer软件使用

    注意以上两种均为右手坐标系. 其他的选择(如: RPI)和左手坐标系(如: LAS)也是可能遇到的, 需要注意区分.

    警告: 人们并不总是用三个连续的字母表示正方向, 有时候也表示出发(from)的方向(也就是负方向), 此时上面的LPS会被写成RAI, 对应的到达(to)方向才是LPS. 比如ITK-Snap软件中Tools->Image Information->Orientation就写的是RAI, 表达的意思是 from RAI --> to LPS , 同样的使用 ITK 导出的MHD格式图像也是使用From模式.

    这两个基础同样有用且合乎逻辑。只需要知道图像被引用到哪个基础。

    Image coordinate system图像坐标系ijk

    图像坐标系描述了如何获取相对于解剖结构的图像。医疗扫描仪创建从左上角开始的点和细胞的常规矩形阵列。i 轴向右增大,j 轴向右增大,k 轴向后增大。

    除了每个体素的强度值(i j k)之外,还存储解剖坐标的原点和间距。

    • 原点origin表示第一个体素 voxel(0,0,0) 在解剖坐标系中的位置,例如 (100mm, 50mm, -25mm)
    • 间距spacing指定沿每个轴的体素之间的距离,例如(1.5mm,0.5mm,0.5mm)

    以下 2D 示例显示了原点和间距的含义:

    使用原点和间距,可以计算出每个(图像坐标)体素在解剖坐标中的相应位置。

    Image transformation图像转换

    从图像空间向量的变换(ijk)′到解剖空间向量x是仿射变换,线性变换A

    转换矩阵A是一个3×3矩阵,并包含有关空间方向和轴缩放的所有信息。

    t是一个3×1向量,并包含有关第一个体素的几何位置的信息。

    最后一个方程表明线性变换是通过矩阵乘法和向量加法平移来执行的。为了表示转换和平移,必须使用矩阵乘法来表示增强矩阵。此技术要求矩阵一个在底部增加了一行额外的零,在右侧增加了一列(translation vector),在右下角增加了一个“1”。此外,所有向量都必须写成齐次坐标,这意味着“1”在最后被增强。

    根据所使用的解剖空间(LPS 或 RAS)的不同,4×4矩阵称为 IJK 到线性函数矩阵或 IJK 拓扑矩阵,因为它表示从 IJK 到 LPS 或 RAS 的转换

    三维坐标变换

    A.旋转矩阵和旋转向量

    a坐标变换

    b旋转向量

    在这里插入图片描述 在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。

    B.欧拉角

    定义\psi,\theta,\phi分别为绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、Roll。

    (1) 欧拉角的表示方式不唯一。给定某个起始朝向和目标朝向,即使给定yaw、pitch、roll的顺序,也可以通过不同的yaw/pitch/roll的角度组合来表示所需的旋转。比如,同样的yaw-pitch-roll顺序,(0,90,0)和(90,90,90)会将刚体转到相同的位置。这其实主要是由于万向锁(Gimbal Lock)引起的   (2) 欧拉角的插值比较难。  

    (3) 计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin, cos,计算量较大。

    C.四元数

    计算平面角Angle Planes插件

    下载Angle Planes插件 

    此模块用于使用法线计算两个平面之间的角度。用户可以选择使用已在Slicer上实现的两个平面,也可以使用地标(至少3个地标)定义一个平面。也可以保存平面,以便在其他模型中重复使用。

    Pitch Angle,complementary angle补角

     

     右手系xyz顺规(分别对应roll, pitch,yaw)

    参考链接

    方向和体素顺序术语:RAS、激光、低密度聚乙烯、资源说明书、XYZ和所有这一切 (grahamwideman.com)

    坐标系 - 切片器维基 (slicer.org)

    slicer软件中RAS转换为像素坐标方法
    旋转矩阵及左右乘的意义,看这一篇就够了_默以成之的博客-CSDN博客_旋转矩阵左乘和右乘的区别

    四元数与欧拉角(Yaw、Pitch、Roll)的转换_xiaoma_bk的博客-CSDN博客_四元数转欧拉角医学影像简介(Medical Imaging Guide) (jarvis73.com)

    三维旋转:欧拉角、四元数、旋转矩阵、轴角之间的转换 - 知乎pitch、yaw、roll三个角的区别_道道道人间道的博客-CSDN博客_yaw

  • 相关阅读:
    简单易懂的进程与线程详解
    Podman 部署私有镜像仓库
    计数排序基础思路
    iOS小技能:SKU视图搭建
    C# 一维数组如何快速实现数组元素的数据类型的转换?
    Linux之慢盘检测
    Python学习笔记 - 函数和lambda表达式 (2)
    HIVESQL的列转行和行转列使用总结
    Docker 容器技术
    适合学校或高校老师、学生学习用的网盘推荐
  • 原文地址:https://blog.csdn.net/qq_28838891/article/details/127455132
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号