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

相关推荐
码爸6 小时前
线性回归算法
算法·机器学习·线性回归
Coder-magician7 小时前
《代码随想录》刷题打卡day51:图论-part09(dijistra堆优化,Bellman_ford算法)
算法·图论
Nil2087 小时前
leetcode 763划分字母区间
算法·leetcode·职场和发展
不会就选b7 小时前
算法日常・每日刷题--<动态规划>20
算法·leetcode·动态规划
青少儿编程课堂8 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
不会就选b8 小时前
算法日常・每日刷题--<动态规划>19
算法·leetcode·职场和发展
没有钱的钱仔10 小时前
协方差矩阵含义
算法·机器学习·矩阵
垆边人似月.10 小时前
华为机试题 :和为 K 的子数组个数
算法·leetcode·华为
三*一10 小时前
优化修整算法
前端·javascript·算法