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

相关推荐
闻缺陷则喜何志丹43 分钟前
【C++特性】四种类型转
c++·算法·类型转换
喵本喵叁肆1 小时前
用 Boosting 把弱隐私算法炼成强隐私算法(英文原题:Boosting and Differential Privacy (FOCS 2010))
算法·集成学习·boosting
青梅味猪大肠2 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
其实防守也摸鱼16 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
Nuanyt17 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
w_zero_one20 小时前
递归算法(一)
java·开发语言·算法
风影同志7832421 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG1 天前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
地平线开发者1 天前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法