Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何将DICOM文件中的存储值转换为实际单位?_Image_Image Processing_Dicom_Medical_Pydicom - Fatal编程技术网

Image 如何将DICOM文件中的存储值转换为实际单位?

Image 如何将DICOM文件中的存储值转换为实际单位?,image,image-processing,dicom,medical,pydicom,Image,Image Processing,Dicom,Medical,Pydicom,我试图用Matlab或python计算PET DICOM图像上的放射性浓度。我在DICOM标准中读到 (0028,1053) Rescale Slope (0028,1052) Rescale Intercept 可用于将存储的16位UINT(在我的示例中)映射到实际单位。这些文件还包含以下元素: (0040,9096) Real World Value Mapping Sequence (0028,9145) Pixel Value Transformation Sequen

我试图用Matlab或python计算PET DICOM图像上的放射性浓度。我在DICOM标准中读到

(0028,1053) Rescale Slope    
(0028,1052) Rescale Intercept
可用于将存储的16位UINT(在我的示例中)映射到实际单位。这些文件还包含以下元素:

(0040,9096) Real World Value Mapping Sequence    
(0028,9145) Pixel Value Transformation Sequence 
作为
(52009230)每帧功能组序列
(用于动态测量中的每帧)或
(52009229)共享功能组序列
(用于静态测量)的一部分。这些序列还包含重新缩放坡度和截距。这些值彼此匹配(对于给定帧,
(00409096)真实世界值映射序列
(00289145)像素值转换序列
值相同),但它们与“主”斜率和截距(PET图像模块的属性)的值不匹配。例如,在使用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标准,即这两个值实际上互不相关,但ds.RescaleSlope做了什么


感谢您的帮助。

如果跟随David Clunie,在这种情况下应使用真实世界的值映射序列,如果不支持,则重新缩放/倾斜是一种退路。我自己没有使用过
真实世界的值映射序列
(如果存在,总是在显示管道中应用模态LUT),所以我不完全确定这一点,不过…

谢谢你的回答,David Clunie的非常有用的帖子。因此,如果我理解得很好,重缩放斜率和截距严格用于显示,对于测量,应使用真实世界值映射。我就是这样理解的,是的。至少在存在
真实世界值映射的情况下是这样的-否则,模态LUT也应应用于测量。