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

nifty数据格式中qform 和sform

NIfTI 文件格式 中,qform 和 sform 是两种不同的方式,用于存储 像素坐标到物理空间坐标的仿射变换矩阵。它们的作用是定义图像数据在真实世界(例如 MRI 扫描仪坐标系)中的位置、方向和缩放。

1. qform(基于四元数的变换)

特点

  • 更紧凑的表示:使用 四元数(quaternion) 表示旋转,节省存储空间。
  • 兼容性更好:所有 NIfTI 阅读工具都支持 qform
  • 适用于刚体变换(旋转 + 平移 + 均匀缩放)。

存储方式

qform 的变换矩阵由以下头文件字段组成:

  • quatern_bquatern_cquatern_d → 旋转的四元数表示
  • qoffset_xqoffset_yqoffset_z → 平移(物理空间原点)
  • pixdim[1..3] → 像素间距(缩放)

2. sform(直接存储仿射矩阵)

特点

  • 更灵活:直接存储 4×4 仿射矩阵,支持任意线性变换(如剪切、非均匀缩放)。
  • 精度更高:避免四元数转换带来的数值误差。
  • 适用于复杂变换(如 DICOM 到 NIfTI 的转换)。

存储方式

sform 的变换矩阵直接存储在以下头文件字段:

  • srow_x → 矩阵第 1 行 [a b c d]
  • srow_y → 矩阵第 2 行 [e f g h]
  • srow_z → 矩阵第 3 行 [i j k l]
  • sform_code → 标识变换类型(见下表)

sform_code含义
0未指定(忽略 sform
1Scanner-based 坐标(原始 MRI 坐标系)
2Aligned 坐标(标准空间,如 MNI)
3Talairach 坐标(人脑模板)
4其他模板坐标

3 总结

  • qform:紧凑的四元数表示,兼容性好,适合刚体变换。
  • sform:直接存储仿射矩阵,灵活精确,适合复杂变换。
  • 大多数情况下,库(如 SimpleITK/nibabel)会自动处理两者,无需手动干预。

4 使用

从 NIfTI 头文件提取参数

import nibabel as nibimg = nib.load("your_image.nii")
header = img.header# 获取关键参数
origin = header.get_qform()[:3, 3]    # 或 header.get_sform()[:3, 3]
spacing = header.get_zooms()[:3]      # 像素间距 (dx, dy, dz)
direction = header.get_qform()[:3, :3]  # 方向矩阵

构建仿射矩阵

affine = np.eye(4)
affine[:3, :3] = direction * spacing  # 旋转 + 缩放
affine[:3, 3] = origin                # 平移

坐标转换

world_coord = affine @ np.append([10, 20, 30], 1)

http://www.xdnf.cn/news/1164.html

相关文章:

  • 电子电器架构 --- 面向下一代车辆的演进式(发展演变的)汽车网关
  • C++ std::forward 详解
  • WLAN 漫游技术全解析:类型、转发模式与应用场景
  • C++ 拷贝构造函数 浅拷贝 深拷贝
  • Spring开发系列教程(26)——异步处理
  • 中和农信从信贷支持到多元服务的创新实践
  • el-table中el-input的autofocus无法自动聚焦的解决方案
  • DasViewer软件打开、保存、关闭文件
  • 部署私有gitlab网站
  • 基于大语言模型的减肥健身计划系统设计与实现
  • 小雨滴的奇妙旅行
  • 【MQ篇】RabbitMQ初体验!
  • 残差(Residual)
  • (区间 dp)洛谷 P6879 JOI2020 Collecting Stamps 3 题解
  • Spring Boot 应用优雅关闭
  • MYSQL—两阶段提交
  • 4.基础开发工具
  • stat判断路径
  • 【设计模式】深入解析代理模式(委托模式):代理模式思想、静态模式和动态模式定义与区别、静态代理模式代码实现
  • 基于PHP+MySQL实现(Web)单词助手网站
  • 基于javaweb的SSM+Maven教材管理系统设计与实现(源码+文档+部署讲解)
  • 深入理解 Java 中的 Classpath
  • 【Java面试笔记:基础】3.谈谈final、finally、 finalize有什么不同?
  • [Java] 泛型
  • Python 设计模式:享元模式
  • JVM虚拟机-类加载器、双亲委派模型、类装载的执行过程
  • 虚无隧穿产生宇宙(true nothing tunneling) 这个的真空是哪种
  • GitLab 提交权限校验脚本
  • 界面控件DevExpress WPF v25.1预览 - 支持Windows 11系统强调色
  • MuJoCo中的机器人状态获取