Getting DICOM structure contours as array in Python

前端 未结 1 577
感动是毒
感动是毒 2021-01-04 22:30

So if I have an image (CT, MRI, etc.) or even a dose from radiation therapy I can pull out the dose or image values into an array through:

import dicom

ds =         


        
相关标签:
1条回答
  • 2021-01-04 22:54

    Here is an interactive session illustrating the data layout using the rtstruct.dcm file included with pydicom:

    >>> import dicom
    >>> ds = dicom.read_file("rtstruct.dcm", force=True)
    >>> ds.dir("contour")
    ['ROIContourSequence']
    >>> ctrs = ds.ROIContourSequence
    >>> ctrs[0]
    (3006, 002a) ROI Display Color                   IS: ['220', '160', '120']
    (3006, 0040)  Contour Sequence   3 item(s) ----
       (3006, 0042) Contour Geometric Type              CS: 'CLOSED_PLANAR'
       (3006, 0046) Number of Contour Points            IS: '5'
       (3006, 0048) Contour Number                      IS: '1'
       (3006, 0050) Contour Data                        DS: ['-200.0', '150.0', '-20
    0.0', '-200.0', '-150.0', '-200.0', '200.0', '-150.0', '-200.0', '200.0', '150.0
    ', '-200.0', '-200.0', '150.0', '-200.0']
       ---------
       (3006, 0042) Contour Geometric Type              CS: 'CLOSED_PLANAR'
       (3006, 0046) Number of Contour Points            IS: '6'
       (3006, 0048) Contour Number                      IS: '2'
       (3006, 0050) Contour Data                        DS: ['200.0', '-0.0', '-190.
    0', '200.0', '-150.0', '-190.0', '-200.0', '-150.0', '-190.0', '-200.0', '150.0'
    , '-190.0', '200.0', '150.0', '-190.0', '200.0', '-0.0', '-190.0']
       ---------
       (3006, 0042) Contour Geometric Type              CS: 'CLOSED_PLANAR'
       (3006, 0046) Number of Contour Points            IS: '6'
       (3006, 0048) Contour Number                      IS: '3'
       (3006, 0050) Contour Data                        DS: ['200.0', '-0.0', '-180.
    0', '200.0', '-150.0', '-180.0', '-200.0', '-150.0', '-180.0', '-200.0', '150.0'
    , '-180.0', '200.0', '150.0', '-180.0', '200.0', '-0.0', '-180.0']
       ---------
    (3006, 0084) Referenced ROI Number               IS: '1'
    

    The data is stored (in this case, as is usual) as a set of coordinates for each plane. To get the data for one contour, for one plane, you could use

    >>> ctrs[0].ContourSequence[0].ContourData
    ['-200.0', '150.0', '-200.0', '-200.0', '-150.0', '-200.0', '200.0', '-150.0', '
    -200.0', '200.0', '150.0', '-200.0', '-200.0', '150.0', '-200.0']
    

    These are triplets of (x, y, z) coordinates one after the other.

    You can find out more information about each contour (name, etc) in the StructureSetROISequence sequence, for the index given by Referenced ROI Number.

    You could get a complete array for all of these by looping through each dataset in the ContourSequence for that particular contour and appending them together into one array.

    0 讨论(0)
提交回复
热议问题