Я пытаюсь рассчитать концентрации радиоактивности на изображении PET DICOM, используя Matlab или python. Я прочитал в стандарте 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
(для каждого кадра в динамическом c измерении) или (5200,9229) Shared Functional Groups Sequence
(для статических c измерений). Эти последовательности также содержат изменения масштаба и пересечения. Значения совпадают друг с другом (для данного кадра значения (0040,9096) Real World Value Mapping Sequence
и (0028,9145) Pixel Value Transformation Sequence
одинаковы), но они не совпадают со значениями "основного" наклона и точки пересечения (которые являются атрибутами модуля PET Image). ). Например, после чтения динамического c мультикадрового файла с 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
У меня следующий вопрос: как правильно применить эти преобразования для получения единиц реального мира (например: Бк / мл как описано в шапке) из значений пикселей? Нужно ли умножать как ds.RescaleSlope, так и RealWorldValueSlope? (в моем случае перехваты всегда равны 0). Это кажется нелогичным, так как стандарт dicom гласит , что эти два значения на самом деле не имеют ничего общего друг с другом, но что же делает ds.RescaleSlope?
Любая помощь приветствуется.