简体   繁体   中英

How to transform stored values in a DICOM file to real world units?

I am trying to calculate radioactivity concentrations on a PET DICOM image using either Matlab or python. I have read in the DICOM standard that

(0028,1053) Rescale Slope    
(0028,1052) Rescale Intercept

can be used to map the stored 16 bit uints (in my case) to real units. The files also contain the following elements:

(0040,9096) Real World Value Mapping Sequence    
(0028,9145) Pixel Value Transformation Sequence 

as parts of a (5200,9230) Per Frame Functional Groups Sequence (for each frame in a dynamic measurement) or a (5200,9229) Shared Functional Groups Sequence (for static measurements). These sequences also contain rescale slopes and intercepts. The values match with each other (for a given frame, the (0040,9096) Real World Value Mapping Sequence and (0028,9145) Pixel Value Transformation Sequence values are the same) but they don't match the values of tha "main" slope and intercept (that are attributes of the PET Image module). For example after reading a dynamic multi-frame file with pydicom as 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

My question is the following: How do I correctly apply these transformations to get real world units (eg: Bq/ml as described in the header) from the pixel values? Do I need to multiply with both ds.RescaleSlope and RealWorldValueSlope? (the intercepts are always 0 in my case). This seems counterintuitive as the dicom standard states that these two values don't really have anything to do with each other, but then what does ds.RescaleSlope do?

Any help is appreciated.

If following David Clunie in this post , Real World Value Mapping Sequence shall be used in this case, Rescale/Slope being a fallback if this is not supported. I haven't used Real World Value Mapping Sequence myself (always applied the modality LUT in a display pipeline if present), so I'm not completely sure about this, though...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM