imvis | PET数据从dcm转换成SUV的避坑指南

TOC

从dicom转换成SUV值

从dicom转换成nifti格式,可以使用python的dicom2nifti库实现。

arduino 复制代码
import dicom2nifti
dicom2nifti.convert_directory(dicom_dir,target_dir)

重点在于如何得到SUV值,通常我们知道用浓度乘上体重除以总剂量就可以得到:

但是实际操作起来会有新的问题,我们通过dicom得到的元数据中的RadionuclideTotalDose标签并不是我们PET图像成像的真实剂量。

  1. 我们检查标签中【0x0054, 0x1102】,decay correction,衰减矫正。PET扫描中使用的放射性同位素随时间衰减,这意味着从注射到扫描过程中,放射性同位素的活性会逐渐降低。Decay Correction标签的值指示了图像数据是如何校正这种衰减的。其中的数值有:

    1. NONE:没有进行衰减校正
    2. START:校正是基于放射性药物注射开始的时间。这意味着在计算SUV时,需要考虑从放射性药物注射开始到图像采集完成这段时间内的放射性衰减。需要知道放射性药物注射的确切时间和图像采集的时间,以计算这两个时间点之间的时间差。然后根据放射性同位素的半衰期来计算注射剂量在图像采集时刻的实际活性
    3. ADMIN:校正是基于放射性药物实际给药的时间。衰减校正是基于放射性药物实际给药(注射)的时间。如果使用ADMIN作为校正基准,则认为注射剂量在给药时刻不需要进行衰减校正,直接用于SUV计算。
  2. 如果是ADMIN,我们则直接使用RadionuclideTotalDose;

  3. 如果是START,我们需要获取下面的新标签: 4. 【0x0008,0x002A】:Acquisition DateTime,图像获取的日期时间,格式通常是YYYYMMDDHHMMSS.FFFFFF年、月、日、时、分、秒、分秒; 5. 或者【0x0008,0x0022】:Acquisition Date + 【0x0008,0x0032】:Acquisition Time。

ini 复制代码
dose = injection_dose * 2**(-utils.datetimestr_diff(acquisition_datetime,radiopharm_datetime)/half_life)
  1. 最关键的一步,SUV计算中体重的单位是g不是kg,网上很多地方都写错了(包括我上面的截图)。

【对于rescale slope倍数的问题,dicom2nifti的python库还是dcm2nii都是默认乘过的了,不需要重新矫正。】

Rescale Slope是DICOM(Digital Imaging and Communications in Medicine)文件中的一个属性,用于在将存储的像素值转换为实际的物理量(如CT(计算机断层扫描)中的Hounsfield单位,或MRI(磁共振成像)中的信号强度)时,作为线性变换的斜率部分。这个属性通常与Rescale Intercept一起使用,以形成一个线性方程,

相关推荐
旖-旎1 分钟前
深搜(二叉树剪枝)(3)
数据结构·c++·算法·力扣·剪枝·递归
流年如夢3 分钟前
结构体:定义、使用与内存布局
c语言·开发语言·数据结构·c++·算法
『昊纸』℃44 分钟前
C语言学习心得集合 篇1
c语言·算法·编程基础·学习心得·实践操作
Chase_______1 小时前
LeetCode 1456:定长子串中元音的最大数目
算法·leetcode
小O的算法实验室1 小时前
2026年IEEE IOTJ,DNA序列启发相似性驱动粒子群算法+无人机与基站部署,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
谭欣辰1 小时前
Floyd算法:动态规划解最短路径
c++·算法·图论
计算机安禾1 小时前
【Linux从入门到精通】第12篇:进程的前后台切换与信号控制
linux·运维·算法
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 84. 柱状图中最大的矩形 | C++ 两次单调栈基础扫法
c++·算法·leetcode
C雨后彩虹1 小时前
文件目录大小
java·数据结构·算法·华为·面试
0南城逆流01 小时前
【技术点】嵌入式技术考点三:数据结构
java·数据结构·算法