API Reference¶
-
class
pydicom_seg.MultiClassReader¶ Bases:
pydicom_seg.reader._ReaderBaseReads multi-class segmentations from a DICOM-SEG file.
If all segments in a DICOM-SEG don’t overlap, then it is save to reduce n binary segmentations to a single segmentation with an integer index for the referenced segment at the spatial location. This is a common use-case, especially in computer vision applications, for analysing different regions in medical imaging. The read operation creates a MultiClassReadResult object with information about the spatial location and extent, as well as the multi-class segmentation data.
Example
dcm = pydicom.dcmread('segmentation.dcm') reader = pydicom_seg.MultiClassReader() result = reader.read(dcm) data = result.data # numpy array image = result.image # SimpleITK image
-
read(dataset: pydicom.dataset.Dataset) → pydicom_seg.reader.MultiClassReadResult¶ Read from a DICOM-SEG file.
- Parameters
dataset – A pydicom.Dataset with DICOM-SEG content.
- Returns
Result object with decoded numpy data and common information about the spatial location and extent of the volume.
-
-
class
pydicom_seg.MultiClassWriter(template: pydicom.dataset.Dataset, inplane_cropping: bool = False, skip_empty_slices: bool = True, skip_missing_segment: bool = False)¶ Bases:
objectWriter for DICOM-SEG files from multi-class segmentations.
Writing DICOM-SEGs can be optimized in respect to the required disk space. Empty slices/frames of a 3D volume, containing only zeros, can be omitted from the frame sequence. Furthermore, the segmentation might only span a small area in a slice and thus can be cropped to the minimal enclosing bounding box.
Example
segmentation = ... # A multi-class segmentation as SimpleITK image series_dcms = ... # List of `pydicom.Dataset`s related to the segmentation template = pydicom_seg.template.from_dcmqi_metainfo('metainfo.json') writer = MultiClassWriter(template) dcm = writer.write(segmentation, series_dcms) dcm.save_as('<path>')
- Parameters
template – A pydicom.Dataset holding all relevant meta information about the DICOM-SEG series. It has the same meaning as the metainfo.json file for the dcmqi binaries.
inplane_cropping – If enabled, slices will be cropped (Rows/Columns) to the minimum enclosing boundingbox of all labels across all slices. Warning: This is an experimental feature and might not be supported when decoding with other frameworks / DICOM viewers.
skip_empty_slices – If enabled, empty slices with only zeros (background label) will be ommited from the DICOM-SEG.
skip_missing_segment – If enabled, just emit a warning if segment information is missing in the template for a specific label. The segment won’t be included in the final DICOM-SEG. Otherwise, the encoding is aborted if segment information is missing.
-
write(segmentation: SimpleITK.SimpleITK.Image, source_images: List[Union[pydicom.dataset.Dataset, bytes, str, os.PathLike]]) → pydicom.dataset.Dataset¶ Writes a DICOM-SEG dataset from a segmentation image and the corresponding DICOM source images.
- Parameters
segmentation – A SimpleITK.Image with integer labels and a single component per spatial location.
source_images – A list of pydicom.Dataset which are the source images for the segmentation image.
- Returns
A pydicom.Dataset instance with all necessary information and meta information for writing the dataset to disk.
-
class
pydicom_seg.SegmentReader¶ Bases:
pydicom_seg.reader._ReaderBaseReads binary segments from a DICOM-SEG file.
All segments in a DICOM-SEG file cover the same spatial extent, but might overlap. If a user wants to use each segment individually as a binary segmentation, then this reader extracts all segments as individual numpy arrays. The read operation creates a SegmentReadResult object with common information about the spatial location and extent shared by all segments, as well as the binary segmentation data for each segment.
Example
dcm = pydicom.dcmread('segmentation.dcm') reader = pydicom_seg.SegmentReader() result = reader.read(dcm) data = result.segment_data(1) # numpy array image = result.segment_image(1) # SimpleITK image
-
read(dataset: pydicom.dataset.Dataset) → pydicom_seg.reader.SegmentReadResult¶ Read from a DICOM-SEG file.
- Parameters
dataset – A pydicom.Dataset with DICOM-SEG content.
- Returns
Result object with decoded numpy data and common information about the spatial location and extent of the volume.
-
-
class
pydicom_seg.reader.SegmentReadResult¶ Bases:
pydicom_seg.reader._ReadResultBaseRead result for segment-based decoding of DICOM-SEGs.
-
property
available_segments¶
-
segment_data(number: int) → numpy.ndarray¶
-
segment_image(number: int) → SimpleITK.SimpleITK.Image¶
-
property
-
class
pydicom_seg.reader.MultiClassReadResult¶ Bases:
pydicom_seg.reader._ReadResultBaseRead result for multi-class decoding of DICOM-SEGs.
-
data: np.ndarray = None¶
-
property
image¶
-
-
class
pydicom_seg.reader._ReadResultBase¶ Bases:
objectBase data class for read results.
Contains common information about a decoded segmentation, e.g. origin, voxel spacing and the direction matrix.
-
dataset: pydicom.Dataset = None¶
-
direction: np.ndarray = None¶
-
origin: Tuple[float, ...] = None¶
-
property
referenced_instance_uids¶
-
property
referenced_series_uid¶
-
segment_infos: Dict[int, pydicom.Dataset] = None¶
-
size: Tuple[int, ...] = None¶
-
spacing: Tuple[float, ...] = None¶
-
-
pydicom_seg.template.from_dcmqi_metainfo(metainfo: Union[dict, bytes, str, os.PathLike]) → pydicom.dataset.Dataset¶ Converts a metainfo.json file from the dcmqi project to a pydicom.Dataset with the matching DICOM data elements set from JSON.
Those JSON files can be easilly created using the segmentation editor tool from QIICR/dcmqi: http://qiicr.org/dcmqi/#/seg When converting the JSON to a DICOM dataset, the validity of the provided JSON document is ensured using the official JSON schema files from the dcmqi project.
- Parameters
metainfo – Either a str for a file path to read from or a dict with the JSON already imported or constructed in source code.
- Returns
A pydicom.Dataset containg all values from the JSON document and some defaults if the elements were not available.