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一起使用,以形成一个线性方程,

相关推荐
爱Java&Java爱我1 小时前
数组:从键盘上输入10个数,合法值为1、2或3,不是这三个数则为非法数字,试编辑统计每个整数和非法数字的个数
java·开发语言·算法
是店小二呀2 小时前
【算法-BFS 解决最短路问题】探索BFS在图论中的应用:最短路径问题的高效解法
算法·图论·宽度优先
qq_513970442 小时前
力扣 hot100 Day46
算法·leetcode
满分观察网友z3 小时前
递归与迭代的优雅之舞:我在评论区功能中悟出的“树”之道(104. 二叉树的最大深度)
后端·算法
m0_535064603 小时前
类模版的相关案例
算法
Chirp3 小时前
手撕ultralytics,换用Lightning训练yolo模型
算法
2301_801821714 小时前
机器学习-线性回归模型和梯度算法
python·算法·线性回归
电院大学僧4 小时前
初学python的我开始Leetcode题-13
python·算法·leetcode
enzeberg4 小时前
全面解析前端领域的算法
算法
阑梦清川5 小时前
使用C语言原生的字符串函数求解的一道题目总结
算法