v0.28.0
What's Changed
This is a significant release with new features belonging to three major themes (as well as a large number of smaller fixes):
- Revamp of Legacy Converted Enhanced Images (#388 and #426). Legacy Converted Enhanced Images have been implemented in the library for a long time, but had many limitations and some known issues. Building on work done years ago by @afshinmessiah, this release contains a full re-implementation that resolves all the known issues and adds many new features, including much better handling of metadata, transcoding to new transfer syntaxes, monochrome1 to monochrome2 conversion, spatial sorting and dimension indices, correct handling of private tags, mapping of Body Part Examined to Anatomic Region Sequence, and more.
- Revamp of Parametric Maps (#372). Parametric Maps have also been implemented for a while, but have always been looked over for new features relative to Segmentations. This release merges a significant amount of the implementations of the two classes onto the common
_Imagebase class, meaning that Parametric Maps (and potentially other IODs in the future) can benefit from the features implemented for segmentations such as automatic tiling, construction from Volumes, creation of pyramids, support for TILED_FULL and TILED_SPARSE, etc - Conversion of highdicom Volumes to objects from other libraries (#387, #394, #411). This stream of work has been led by @mccle. First, we have added a standardised way to handle optional dependencies in highdicom. Using this, we have added methods on the Volume class to convert to and from ITK Images, SimpleITK images, and nibabel, allowing highdicom to integrate with a far wider range of image processing pipelines and interact with files from other formats, both as a reader (allowing you to for example read a DICOM segmentation or parametric map and convert it to an ITK/SITK image) and a writer (making it easier to store an ITK/SITK image in the DICOM objects supported by highdicom)
Features
- Feature/optional dependencies by @mccle in #387
- Feature/itk volume conversions by @mccle in #394
- Add family and manufacturer to Algorithm Identification template by @CPBridge in #414
- Legacy conversion revamp by @CPBridge in #388
- Parametric Map Revamp by @CPBridge in #372
- Specific character set by @CPBridge in #423
- Add new "get pixels by source" methods by @CPBridge in #426
- Add tolerance parameter to orientation by @CPBridge in #405
- Add nibabel volume conversions and tests by @mccle in #411
Bug Fixes
- Tolerate missing ReferencedInstanceSequence by @CPBridge in #380
- Avoid division by zero in volume normalization by @CPBridge in #381
- Increase tolerance used to determine a matrix is orthogonal by @CPBridge in #382
- Fix time-of-day-dependent failure in series_time validation by @yarikoptic in #395
- Remove algorithm identification from background class in labelmap segmentations by @CPBridge in #413
- Swap code used for source images in measurement groups by @CPBridge in #412
- Volume dtype restriction by @mccle in #410
- Remove the content date and content time attributes from presentation state IODs by @CPBridge in #417
- Stricter spatial checks by @CPBridge in #427
- Disallow segmented LUT in presentation states by @CPBridge in #424
Tooling and Code Quality
- PEP 639 compliance by @DimitriPapadopoulos in #378
- Add support for python 3.14 by @CPBridge in #379
- PEP 735 compliance: dependency groups by @DimitriPapadopoulos in #397
- Fix readthedocs build errors by @CPBridge in #402
- Move .readthedocs.yaml to use dependency groups by @CPBridge in #403
- Dependabot actions by @fedorov in #420
- CI: Bump the github-actions group with 2 updates by @dependabot[bot] in #421
- Add windows and macos github actions tests by @mccle in #428
- CI: Bump pytest from 8.3.5 to 9.0.3 in #429
Documentation
- Fix documentation typos and grammar errors by @DimitriPapadopoulos in #392
- Update acknowledgments by @CPBridge in #390
- Remove SOPClass "copy" methods from docs, add notes by @CPBridge in #385
- Add .mailmap to consolidate author identities by @yarikoptic in #401
- Add doc pages on context groups and dcmterms link by @CPBridge in #408
- Update funding information in README by @fedorov in #416
- Clarify docstings of get_volume_positions and get_series_volume_positions by @CPBridge in #398
New Contributors
- @mccle made their first contribution in #387
- @dependabot[bot] made their first contribution in #421
Also I wish to thank @afshinmessiah for his important contributions to the legacy converted enhanced image implementation and the APOLLO 5 project for funding much of the work that led to this release.
Full Changelog: v0.27.0...v0.28.0