Skip to main content

pydicom-seg

License: MIT Python versions PyPI version DOI

Reading and writing of DICOM-SEG medical image segmentation storage files using pydicom as DICOM serialization/deserialization library. For detailed explanations about supported functionality and usage please have a look at the documentation.

Motivation

Converting DICOM-SEG files into ITK compatible data formats, commonly used for research, is made possible by the dcmqi project for some time. However, the project is written in C++ and offers only access to the conversion via the binaries itkimage2segimage and segimage2itkimage. After a conversion of a DICOM-SEG file to ITK NRRD file format, the user has to scan the output directory for generated files, load them individually and potentially combine multiple files to the desired format.

This library aims to make this process much easier, by providing a Python native implementation of reading and writing functionality with support for numpy and SimpleITK. Additionally, common use cases like loading multi-class segmentations are supported out-of-the-box.

Installation

Install from PyPI

pip install pydicom-seg

Install from source

This package uses Poetry (version >= 1.0.5) as build system.

git clone \
    --recurse-submodules \
    https://github.com/razorx89/pydicom-seg.git
cd pydicom-seg
poetry build
pip install dist/pydicom_seg-<version>-py3-none-any.whl

Development

After cloning the repository, please install the git pre-commit hook to enforce code style and run static code analysis on every git commit.

git clone \
    --recurse-submodules \
    https://github.com/razorx89/pydicom-seg.git
cd pydicom-seg
poetry install
poetry run pre-commit install

Getting Started

Loading binary segments

import pydicom
import pydicom_seg
import SimpleITK as sitk

dcm = pydicom.dcmread('segmentation.dcm')

reader = pydicom_seg.SegmentReader()
result = reader.read(dcm)

for segment_number in result.available_segments:
    image_data = result.segment_data(segment_number)  # directly available
    image = result.segment_image(segment_number)  # lazy construction
    sitk.WriteImage(image, f'/tmp/segmentation-{segment_number}.nrrd', True)

Loading a multi-class segmentation

dcm = pydicom.dcmread('segmentation.dcm')

reader = pydicom_seg.MultiClassReader()
result = reader.read(dcm)

image_data = result.data  # directly available
image = result.image  # lazy construction
sitk.WriteImage(image, '/tmp/segmentation.nrrd', True)

Saving a multi-class segmentation

Please generate a metainfo.json for the segments you want to serialize using the web-based editor from dcmqi.

segmentation: SimpleITK.Image = ...  # A segmentation image with integer data type
                                     # and a single component per voxel
dicom_series_paths = [...]  # Paths to an imaging series related to the segmentation
source_images = [
    pydicom.dcmread(x, stop_before_pixels=True)
    for x in dicom_series_paths
]
template = pydicom_seg.template.from_dcmqi_metainfo('metainfo.json')
writer = pydicom_seg.MultiClassWriter(
    template=template,
    inplane_cropping=False,  # Crop image slices to the minimum bounding box on
                             # x and y axes. Maybe not supported by other frameworks.
    skip_empty_slices=True,  # Don't encode slices with only zeros
    skip_missing_segment=False,  # If a segment definition is missing in the
                                 # template, then raise an error instead of
                                 # skipping it.
)
dcm = writer.write(segmentation, source_images)
dcm.save_as('segmentation.dcm')

License

pydicom-seg is distributed under the MIT license.

Metadata

Release files for pydicom-seg 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pydicom-seg 0.4.1
File Size Uploaded
pydicom-seg-0.4.1.tar.gz 24.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pydicom-seg 0.4.1
File Interpreter ABI Platform
pydicom_seg-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 51.9 kB

Release files / pydicom-seg-0.4.1.tar.gz

Download URL pydicom-seg-0.4.1.tar.gz
Size 24.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ec6bbd961d44b2fb347a9aa313d6b66c5aa8db9d002d28a58fa549ff48a431fb
BLAKE2b-256 checksum
How to use checksums
6612b6cf4dbeb111e515cbec834a7ee6f6b8da9a7a8d4962cc2b31adfc7adad5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.12 CPython/3.8.10 Linux/5.4.0-139-generic

Release files / pydicom_seg-0.4.1-py3-none-any.whl

Download URL pydicom_seg-0.4.1-py3-none-any.whl
Size 27.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72b1c9e4de8ec5728e893bbe855cd88155e4690fe3cb5be9ff44f354eb431715
BLAKE2b-256 checksum
How to use checksums
452d2abfff99acd1e6a55a25dd51de3ce9af3eeaa9ffc6b7d05e037b7ace856c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.12 CPython/3.8.10 Linux/5.4.0-139-generic

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page