SimpleITK 获取CT spacing 底层原理

news2024/11/16 5:27:36

SimpleITK 获取CT spacing 底层原理

一、层厚、层间距概念

层厚: CT扫描机扫描出来的断层的层的厚度, 通常用Slice thickness表示, 比如 5mm

层间隔:一般用 Slice intervalSlice increment来表示,比如 5mm。在 CT 中,层间隔表示相邻两层中心之间的距离

在这里插入图片描述

如上图所示, 在CT中, 相邻两层CT中心之间的距离代表层间距, 当层厚==层间距时,无重叠, 代表CT断层之间是连续的, 那么同理, 当层厚!=层间距时, 代表断层之间是有距离或者重叠的

二、pydicom中的层厚以及spacing

spacing:

在这里插入图片描述

一张二维的医学图像,图像尺寸为[6x7],每个像素之间的物理空间距离(spacing),x轴、y轴分别是(20,30)。扩展到三维医学图像,就出现【体素】,就是三维的“像素”。相比像素有三个轴(x、y、z),同样每个轴都有spacing。 意思相同大小尺寸的医学图片,spacing也是不同。

如下是pydicom以及SimpleITK获取spacing:

import pydicom as dicom
import numpy as np
from pathlib import Path

PathDicom = 'dcm序列所在文件夹路径'

data_dir = Path(PathDicom)
dicom_files = list(data_dir.glob('*.dcm')) # 获取目录下所有 .dcm 文件

dicom_files.sort(key=lambda x: int(x.stem.rsplit('.', 1)[1])) #将 .dcm文件 按序号排列 注意: sorted() 方法会按字符排列, 此处需要按末尾数字排列
slices = [dicom.read_file(dicom_file, force=True) for dicom_file in dicom_files]

# 采用以下方法返回的SliceThickness是错误的
print(slices[0].SliceThickness)

# 正确的层厚获取方法
thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation) # 获取 dcm 文件的层厚

# 获取整个 CT 序列的 spacing, 等同于 SimpleITK 的 GetSpacing() 方法
spacing_z_list = []
for i in range(1, len(slices)):
    spacing_z_list.append(slices[i].SliceLocation - slices[i - 1].SliceLocation)


spacing_z = abs(sum(spacing_z_list) / len(spacing_z_list)) # 获取Z轴的spacing
print(f"spacing_z : {spacing_z}")

如上代码所示, 因为dicom文件层次之间可能会存在重叠或者间隔, 故z轴的spacing应该取所有相邻序列层厚的均值, 即abs(sum(spacing_z_list) / len(spacing_z_list))

注意:在临床CT数据中, 有时候会遇到一些数据在ITK-SNAP软件中显示如下, 有多个component:

在这里插入图片描述

这种情况下, 使用SimpleITK获取的Z轴spacing就是利用我上述代码的逻辑计算的, 并且单独的component之间数据的层厚是相同的, 只是因为两个component连接处的层厚大大超出单独component内的层厚, 故不注意的话会造成一些问题。这个component信息可以通过pydicom包中AcquisitionNumber获取

singleDicomFile # 单独的一个dcm文件
print(singleDicomFile.AcquisitionNumber) # 查看某个dcm文件所属component

在这里插入图片描述

参考链接:

【CTMR技术】CT与MR中的层厚&层间隔一样吗?

DICOM数据字段说明

关于DICOM文件的SliceThickness参数错误问题

【碎碎念】医学图像处理工具SimpleITK与DataSet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新!蔚来2022年第四季度被理想汽车超越,或将在2023年全面落后

3月1日,蔚来汽车(NYSE: NIO; HKEX: 9866; SGX: NIO,下称“蔚来”)发布了截至2022年12月31日的第四季度及全年财报。财报显示,蔚来2022年第四季度实现营收160.64亿元(约23.29亿美元),…

SpringBoot实现静态资源映射,登录功能以及访问拦截验证——以黑马瑞吉外卖为例

目录 一、项目简介 二、设置静态资源访问路径 三、实现登录功能 四、拦截访问请求 本篇文章以黑马瑞吉外卖为例 一、项目简介 瑞吉外卖项目分为后台和前台系统,后台提供给管理人员使用,前台则是用户订餐使用 资源我们放在resources下 二、设置静态…

Postman的下载和安装

文章目录一 下载二 安装一 下载 官网下载地址:https://www.postman.com/ 进入官网页面,选择对应的操作系统和版本,然后进入Postman下载页面,然后点击 Windows 64-bit 即可下载,如下 二 安装 Postman的安装很简单&am…

Python每日一练(20230302)

目录 1. 字符串统计 2. 合并两个有序链表 3. 下一个排列 附录 Python字典内置方法 增 删 改 查 其它 1. 字符串统计 从键盘输入一个包含有英文字母、数字、空格和其它字符的字符串,并分别实现下面的功能:统计字符串中出现2次的英文字母&#…

C++---最长上升子序列模型---友好城市(每日一道算法2023.3.2)

注意事项: 本题为"线性dp—最长上升子序列的长度"的扩展题,所以dp思路这里就不再赘述。 题目: Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。 北岸的每个城市有且仅有…

python自学之《21天学通Python》(18)——第21章 案例2 Python搞定大数据

“大数据(Big Data)”这个术语最早期的引用可追溯到apache org的开源项目Nutch。当时,大数据用来描述为更新网络搜索索引需要同时进行批量处理或分析的大量数据集。随着谷歌MapReduce和GoogleFileSystem (GFS)的发布&a…

第十三节 继承

什么是继承? java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立父子关系。 public class Student extends People{} student为子类(派生类),people为父类(基类或者超类…

激光雷达迈向规模量产期:如何看待3类玩家的竞争格局?

激光雷达正进入规模量产周期。 高工智能汽车研究院监测数据显示,2022年中国市场(不含进出口)乘用车前装标配激光雷达交付12.99万颗,配套新车11.18万辆,同比分别增长1544.30%和2626.82%;预计2023年标配交付将…

第四回:文字图例尽眉目

import matplotlib import matplotlib.pyplot as plt import numpy as np import matplotlib.dates as mdates import datetime一、Figure和Axes上的文本 Matplotlib具有广泛的文本支持,包括对数学表达式的支持、对栅格和矢量输出的TrueType支持、具有任意旋转的换…

Python进阶-----面向对象2.0(特有属性和方法与私有属性和方法)

目录 前言: 1.添加特有属性/方法 示例1:添加特有属性 示例2:添加特有方法 2.私有属性/方法 (1)私有化示例 (2) 私有化属性/方法可以在类的内部使用 (3)强制访问私…

一:BT、BLE版本说明及对比

蓝牙版本说明1.常见名词说明2.BT&BLE特性对比3.BT各版本对比4.BLE各版对比1.常见名词说明 名称说明BR(Basic Rate)基本码率EDR(Enhanced Data Rate)增强码率BLE(Bluetooth Low Energy)低功耗蓝牙HS(High Speed)高速蓝牙BT(BlueTooth)蓝牙技术LE(Low Energy)低能耗AFH(Adap…

态路小课堂丨光模块使用可能遇到的4大问题以及注意事项!

光模块作为光通信系统的核心器件,其内部集成了精密的光学元件和电路元件。在日常使用过程中如果不按规定操作,很容易导致光模块损坏。本文态路通信为您介绍光模块在使用时可能遇到的问题,以及我们应该注意的事项。以此来减少光模块使用寿命&a…

Spring 事务(编程式事务、声明式事务@Transactional、事务隔离级别、事务传播机制)

文章目录1. 事务的定义2. Spring 中事务的实现2.1 MySQL 中使用事务2.2 Spring 中编程式事务的实现2.3 Spring 中声明式事务2.3.1 声明式事务的实现 Transactional2.3.2 Transactional 作用域2.3.3Transactional 参数设置2.3.4 Transactional 异常情况2.3.5 Transactional 工作…

桑基图绘制

绘制桑基图 但是关于数据流上的数据标签可能还得用ps… 注意 1、节点(nodes)要包括各层的,且不能重复,需要自己在后边append几个数据 2、数据流的数据要是整数,不能时numpy 3、注意表格加入时要再由array转为list&a…

大数据技术之Maxwell入门案例学习

大数据技术之Maxwell入门案例学习 文章目录大数据技术之Maxwell入门案例学习1、写在前面2. Maxwell 使用2.1 Maxwell 安装部署2.2 Maxwell 入门案例2.2.1 监控 Mysql 数据并在控制台打印2.2.2 监控 Mysql 数据输出到 kafka2.2.3 监控 Mysql 指定表数据输出控制台2.2.4 监控 Mys…

分布式监控系统——Zabbix(4)可视化、模板和用户参数

文章目录分布式监控系统——Zabbix(4)可视化、模板和用户参数一、zabbix可视化1.简介2.自定义图形(Graphs)3.聚合图形(Screens)4.幻灯片演示(Slide shows)5.定义拓扑图(M…

企业电销如何获得高质量精准流量,大数据获客直击精准客流

随时社会的发展,时代的进步,各行各业都在崛起,竞争力愈演愈烈,那么为了使自己的品牌得到更多人的关注,自己的产品可以更好的销售,无数的老板在想各种缤纷的办法让自己赚钱,百度竞价,…

图像处理│一张自拍即可实现变老变年轻,带你感受时光流逝之美

✨ 目录🎈 项目效果🎈 环境搭建🎈 下载PaddleGAN🎈 安装飞浆🎈 生成图片潜码🎈 老龄化处理🎈 年轻化处理🎈 项目效果 飞浆是一个由百度推出的深度学习开发平台,为开发者…

Ep_MySQL基础-存储引擎

show engines; //查看mysql所支持的存储引擎,以及从中得到mysql默认的存储引擎 MyIsam存储引擎:(非聚集索引)->数据索引不在一起 Innodb存储引擎:(聚集索引)->数据索引在一起 MyISAM 每个MyISAM数据表,皆由存储在硬盘上的3个文件所组成, .f…

光学设计软件Ansys的Lumerical 2023版本下载与安装使用

文章目录前言一、许可管理工具安装二、许可管理器配置三、Lumerical安装四、工具使用配置总结前言 Lumerical是一款功能强大的软件,用于设计和分析从组件到系统阶段的光子学和电磁学。这个版本的Lumerical改进了电子和光子学设计工具,用于复杂光子学&am…