我正在尝试使用Matlab或python计算PET DICOM图像上的放射性浓度。我在DICOM标准中已经读到
(0028,1053) Rescale Slope
(0028,1052) Rescale Intercept
可用于将存储的16位单元(在我的情况下)映射到实际单位。这些文件还包含以下元素:
(0040,9096) Real World Value Mapping Sequence
(0028,9145) Pixel Value Transformation Sequence
作为(5200,9230) Per Frame Functional Groups Sequence
(对于动态测量中的每个帧)或(5200,9229) Shared Functional Groups Sequence
(对于静态测量)的一部分。这些序列还包含重新缩放的斜率和截距。这些值彼此匹配(对于给定的帧,(0040,9096) Real World Value Mapping Sequence
和(0028,9145) Pixel Value Transformation Sequence
值相同),但是它们与“主”斜率和截距(这是PET Image模块的属性)的值不匹配)。例如,在使用pydicom将动态多帧文件读取为ds
之后:
#This is the "main" slope, part of the PET Image module
>ds.RescaleSlope
Out[31]: "0.478081"
#This is a dynamic image, for a static image SharedFunctionalGroupsSequence would be used
>ds.PerFrameFunctionalGroupsSequence[0].PixelValueTransformationSequence[0].RescaleSlope
Out[34]: "104.435089"
>ds.PerFrameFunctionalGroupsSequence[0].RealWorldValueMappingSequence[0].RealWorldValueSlope
Out[38]: 104.43508911132812
我的问题是:如何正确应用这些转换,以从像素值中获取现实世界的单位(例如,标题中所述的Bq / ml?我是否需要同时乘以ds.RescaleSlope和RealWorldValueSlope? (在我的情况下,截距始终为0)。这与dicom标准states似乎违反直觉,因为这两个值之间确实没有任何关系,但是ds.RescaleSlope有什么作用?
感谢您的任何帮助。
如果遵循David Clunie in this post,则在这种情况下应使用Real World Value Mapping Sequence
,如果不支持,则“缩放/斜率”为后备。我本人并没有使用过Real World Value Mapping Sequence
(如果存在,总是在显示管道中应用模态LUT),所以我对此并不完全确定,但是...