Skip to content

DICOM-Decoder 1.2.0

Choose a tag to compare

@ThalesMMS ThalesMMS released this 29 May 15:47
· 13 commits to main since this release

Changes since 1.1.4.

Compare: 1.1.4...1.2.0

This release covers 139 changed files, with 44 new DicomCore source files, 44 new DicomCoreTests files, and an opt-in interop smoke-test harness. The range includes the 1.1.5 license change plus the 1.2.0 DicomCore expansion.

Licensing and packaging

  • Switched the project license from MIT to Apache License 2.0.
  • Updated the README license badge, license section, and Homebrew formula metadata to use Apache-2.0.
  • Linked the DicomCore target against system zlib for Deflated Explicit VR Little Endian dataset support.

Decoder and metadata model

  • Added DicomDataSet, DicomDataElement, typed DICOM value helpers, typed person/date/time/date-time parsing, sequence item parsing, and DicomDataSetWriter for controlled Part 10 dataset output.
  • Added Deflated Explicit VR Little Endian read/write support through DicomDeflatedDataSetCodec.
  • Added DicomSpecificCharacterSet and character-set-aware text decoding for header and lazy metadata paths, including SpecificCharacterSetTagHandler.
  • Expanded DicomTag and the bundled dictionary resources for additional image, clinical object, waveform, presentation, private, network, and quantitative tags.
  • Preserved private data as typed dataset elements and added private-data helpers for known Siemens CSA-style metadata.
  • Added DicomDirectory / DicomDirectoryReader plus StudyDataService methods for loading DICOMDIR media hierarchies.
  • Added DicomMediaCatalogBuilder for files, directories, DICOMDIR media, and ZIP media catalogs, with special-object classification for SEG, RT, SR/KOS, documents, waveforms, and video.

Pixel data, transfer syntaxes, and color handling

  • Added DicomPixelDataDescriptor and frame-addressable native pixel access through DCMDecoder.pixelDataDescriptor, getFrame(_:), getFrames(_:), and getAllFrames().
  • Added DicomEncapsulatedPixelDataParser, encapsulated pixel data descriptors, Basic Offset Table / Extended Offset Table parsing, fragment indexing, and compressed frame extraction through getEncapsulatedFrame(_:).
  • Added Enhanced Multi-frame Functional Group parsing for shared and per-frame geometry through enhancedMultiframeFunctionalGroups and enhancedFrameGeometry(at:).
  • Added native RLE Lossless decoding for supported 8-bit/16-bit grayscale and 8-bit RGB payloads.
  • Added JPEG-LS lossless and near-lossless runtime bridging through CharLS when the runtime library is available.
  • Added JPEG 2000 runtime bridging through OpenJPEG for supported grayscale/color frames and JPEG 2000 Part 2 multi-component volume documents.
  • Added DicomJP3DVolumeDocument for JPEG 2000 Part 2 multi-component volume decoding into DicomSeriesVolume buffers.
  • Added JPIP referenced pixel data models and DicomJPIPClient progressive volume update streams with caller-supplied transport.
  • Added a transfer syntax registry and conservative transcode planning diagnostics through DicomTransferSyntaxRegistry and DicomTranscodePlan.
  • Reworked compressed-pixel backend selection to use explicit backend decisions and diagnostics instead of silent ImageIO fallback for unsupported precision or syntax combinations.
  • Added display-ready RGB conversion support for MONOCHROME, RGB, PALETTE COLOR, YBR_FULL, and YBR_FULL_422 data, including palette descriptors and ICC profile metadata.

Display, quantitative values, and export

  • Added DicomDisplayTransformProfile for modality LUT, rescale, VOI LUT, window selection, presentation LUT shape, MONOCHROME1 inversion, and preset suggestions.
  • Added stored, modality-transformed, and quantitative pixel-value accessors on DCMDecoder.
  • Added Real World Value Mapping and PET SUV support through DicomQuantitativeValueProfile, DicomRealWorldValueMap, DicomSUVMetadata, and related value/diagnostic types.
  • Added percentile window calculation for uncompressed native pixel data.
  • Added DicomImagePreprocessor for UI-independent frame rendering, resizing, and explicit annotation overlays.
  • Added DicomImageExporter to DicomCore, supporting PNG, JPEG, TIFF, unsigned 16-bit TIFF output, per-frame export, all-frame export, overwrite handling, and optional non-PHI JSON metadata sidecars.
  • Moved dicomtool extract and batch extraction onto the new DicomCore exporter.
  • Extended dicomtool extract and dicomtool batch --operation extract with --format jpeg, --jpeg-quality, --frame, --all-frames, --preserve-16-bit, and --metadata.
  • Kept --processing-mode as a compatibility option in dicomtool extract; export now uses the DicomCore frame exporter.
  • Removed the old executable-local Sources/dicomtool/Utilities/ImageExporter.swift.

Series loading and decoded-series output

  • Extended DicomSeriesVolume and DicomDecodedSeries with study description, quantitative value profile, loaded image-instance references, and Key Object Selection documents.
  • Added DicomSeriesImageInstance to retain SOP Class UID, SOP Instance UID, study/series UID, slice index, and instance number for loaded slices.
  • Updated DicomSeriesLoader to skip non-image clinical objects such as SR, KOS, encapsulated documents, waveforms, and video when assembling image volumes.
  • Updated decoded-series construction so image instance metadata and KOS documents can travel with the loaded volume.

Clinical object models and builders

  • Added DICOM Segmentation parsing and dataset building for binary and fractional segmentations, including segment metadata, frame references, geometry, and labelmap extraction.
  • Added RT Structure Set, RT Dose, and RT Plan models for contour, dose grid, beam, and control-point inspection.
  • Added Parametric Map parsing for integer, Float Pixel Data, and Double Float Pixel Data scalar layers with units, quantity definitions, Real World Value Mapping, geometry, and source references.
  • Added Structured Report and Key Object Selection parsing/building for content trees, measurements, ROI/source image references, CAD findings, and key object references.
  • Added Secondary Capture snapshot building/parsing with patient, study, series, image, source-reference, and device metadata.
  • Added Grayscale Softcopy Presentation State models/builders for referenced images, graphic layers, annotations, displayed areas, shutters, spatial transforms, and display transforms.
  • Added Encapsulated PDF, CDA, and STL document models/builders with MIME type, document title, concept name, payload, and source-instance metadata.
  • Added ECG and related waveform object models/builders with channel definitions, temporal samples, sampling frequency, units, and waveform source references.
  • Added video object models/builders for Endoscopic, Microscopic, and Photographic video objects, preserving MPEG-2, H.264, and H.265 encoded streams and timing metadata for caller/player handoff.
  • Added external inference builders for SR findings, SEG masks, GSPS graphic annotations, and derived images, with source references and tracking identifiers.
  • Added print-management models for film session, film box, image box, print jobs, and print queue state.
  • Added Modality Worklist and MPPS request/result models for workflow metadata.

Networking and interoperability

  • Added DIMSE association, PDU, presentation-context, command-set, and TCP transport primitives.
  • Added DicomDIMSEServiceSCU operations for C-ECHO, C-FIND, Modality Worklist C-FIND, C-MOVE, C-GET, C-STORE, MPPS create/update, and print-job submission.
  • Added Storage SCP support with file-backed storage, association handling, storage commitment tracking, store-and-forward queueing, and a basic listener wrapper.
  • Added DICOMweb client support for QIDO-RS study search, WADO-RS metadata/object/frame retrieval, WADO-URI retrieval, and STOW-RS storage.
  • Added an in-memory DICOMweb server/transport for local tests and embedded integration flows.
  • Added network resilience helpers for TLS configuration metadata, user identity negotiation models, retry policy, circuit breaker state, audit events, and bandwidth-limited transports.
  • Added opt-in Orthanc/dcm4chee interop smoke tests under Scripts/interop/; normal unit tests skip these unless DICOM_INTEROP_SMOKE=1.

Documentation and tests

  • Expanded README coverage for export formats, frame selection, metadata sidecars, supported transfer syntaxes, runtime codec limits, quantitative values, clinical objects, and known limitations.
  • Expanded DocC landing, conformance, architecture, and performance documentation for the new APIs and runtime codec model.
  • Added clinical performance budget documentation and test support for budget warning/failure thresholds, environment metadata, and peak resident memory reporting where available.
  • Added public API documentation policy/gate tests.
  • Added unit coverage for the new dataset, writer, DICOMDIR, frame access, encapsulated pixel data, enhanced multiframe, display transform, color conversion, export, preprocessing, compression, quantitative, clinical object, networking, DICOMweb, interop, and performance-budget surfaces.

Operational notes

  • CharLS and OpenJPEG are loaded dynamically when present; related JPEG-LS and JPEG 2000 paths report diagnostics or return unsupported-path errors when the runtime backend is unavailable.
  • JPIP support models referenced pixel data and progressive update delivery, but the application supplies the actual transport.
  • Video objects expose encoded streams and timing metadata; they are not decoded into rendered video frames by DicomCore.
  • Waveform objects expose temporal samples and metadata; they are not converted into image-volume slices by DicomSeriesLoader.
  • The interop smoke harness starts external archive containers and is intentionally opt-in.