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

相关推荐
bIo7lyA8v13 分钟前
算法可视化对教学与调试效率的影响分析的技术8
算法
hunterkkk(c++)22 分钟前
优先队列启发式最短路径快速算法(优化SPFA)-HEAP_SPFA算法
算法
SiliconGazer35 分钟前
第15届国赛满分代码解析(下)—— 运动轨迹算法、按键交互与完整状态机
算法·状态机·stc15f2k60s2·浮点运算·蓝桥杯国赛·运动轨迹、·向量分解
Navigator_Z36 分钟前
LeetCode //C - 1096. Brace Expansion II
c语言·算法·leetcode
luj_176838 分钟前
FreeDOS vs MS-DOS PC-DOS 对比解析
服务器·c语言·开发语言·经验分享·算法
笨笨没好名字1 小时前
Leetcode刷题python版第一周
python·算法·leetcode
Cthy_hy1 小时前
斯特林数:组合划分的递归经典,一二两类全解
python·算法·斯特林数
不忘不弃1 小时前
计算pi的近似值
算法
码云骑士1 小时前
12-GIL不是性能杀手(下)-绕过GIL的三种方案与决策树
算法·决策树·机器学习
一只齐刘海的猫1 小时前
【Leetcode】无重复字符的最长子串
算法·leetcode·职场和发展