All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.22.0 - 2024-11-22
- Cache for compressed and decompressed tiles.
- Setting
strict_tile_size_check
, defaulting toTrue
, to enable parsing of levels with different tile size.
- Default to placing the image at the middle of the slide if no
TotalPixelMatrixOriginSequence
is set when producing DICOM metadata . - Use Unix epoch as default datetime when producing DICOM metadata.
- Group instances to pyramids with a configurable threshold to allow small differences in
TotalPixelMatrixOriginSequence
.
- Parsing of native pixel data with padded lenght.
- Check for supported transfer syntax when DICOMWeb client returns an iterable of frames.
- Fix for order of transfer syntax to check.
- Use
ImageType
DERIVED
instead ofORIGINAL
when saving resampled volume instances. - Thread-safe parsing of pixel data frame index.
0.21.4 - 2024-10-30
- Loading of files with missing TotalPixelMatrixOriginSequence.
0.21.3 - 2024-10-28
- Missing
WholeSlideMicroscopyImageFrameTypeSequence
in produced DICOM dataset for some image types. - Do not insert empty
ContainerComponentSequence
andPrimaryAnatomicStructureSequence
into produced DICOM dataset. - Only insert
SpacingBetweenSlices
into produced DICOM dataset if multiple focal planes. - Prefer use of
ZOffsetInSlideCoordinateSystem
in main DICOM dataset to attribute inSharedFunctionalGroupsSequence
/PlanePositionSlideSequence
.
0.21.2 - 2024-10-21
- Unpinned requirement for numpy to support numpy 2.
0.21.1 - 2024-10-17
- Restricted imagecodecs to exclude version 2024.9.22 due failing bug when encoding jpeg.
0.21.0 - 2024-10-08
- Support for pydicom 3.0. This requires Pyhton >3.10.
- Support for Python 3.9.
- Support for pydicom <3.
- Missing support for using fsspec in some methods.
0.20.6 - 2024-09-12
- Fixed version of pydicom to <3.0 to avoid breaking changes.
0.20.5 - 2024-07-25
- Removed debug printing.
0.20.4 - 2024-03-25
- Error when calculating downscaled image size causing
save()
withadd_missing_levels
to fail. - Missing sort when creating new pyramid levels, causing new levels to be created from a to high resolution level.
0.20.3 - 2024-03-20
- Missing handling of pyramid index when creating
WsiInstance
usingcreate_instance()
.
0.20.2 - 2024-03-18
- Fixed handling of string values longer than allowed by value representation.
- Corrected staining substances to be either a single string or a list of codes instead of a list of strings or codes.
- Added
allow_none
for json metadata fields where it was missing. - Do not add empty
CodingSchemeVersion
to concept code name.
0.20.1 - 2024-02-22
- Changed default for parameter
source_owned
in__init__
ofWsiDicom
to be True, to by default close opened file handles.
0.20.0 - 2024-02-21
- Support for opening files using fsspec.
- Support for reading tile offset from TIFF tags if dual DICOM TIFF file.
- Matching of slide uids between groups when validating opened instances.
- Handling of missing dataset values if no default value.
- Wrong concept name used when serializing and deserializing DICOM specimen samplings.
0.19.1 - 2024-02-14
- Correct handling of missing image coordinate system when loading metadata.
0.19.0 - 2024-02-12
- Support for decoding HT-JPEG2000 using Pillow, imagecodecs and/or pylibjpeg-openjpeg.
- Optional codec pyjpegls for JPEG-LS support.
- Handling of non-conformant DICOM Web responses.
0.18.3 - 2024-01-22
- Fixed missing
levels
property.
0.18.2 - 2024-01-12
- Missing KeyError in exception catch for Pyramid.get(), that made getting image data for non-existing levels (by downscaling) not work.
- Handle loading metadata if
ExtendedDepthOfField
not set. - Metadata for pyramid is now lazy loaded.
0.18.1 - 2024-01-12
- Missing indentation in
Patient
andEquipment
metadata classes.
0.18.0 - 2024-01-12
- Models for DICOM WSI metadata.
- Serializers from DICOM WSI to and from DICOM and json.
- Support for multiple pyramids within the same slide. A pyramid must have the same image coordinate system and extended depth of field (if any). Use the
pyramid
-parameter to set the pyramid in for exampleread_region()
, or useset_selected_pyramid()
to set the pyramid to use. By default the first detected pyramid is used. - RLE encoding using image codecs.
- JPEG 2000 encoding of lossless YBR using image codecs.
- Levels with different extended depth of fields are no longer considered to be the same pyramid.
OpticalManager
, replaced by new metadata model.
0.17.0 - 2023-12-10
- Option to not include label and overview in
save()
.
- Moved option to change label from
open()
tosave()
.
0.16.0 - 2023-12-07
- Option to transcode when saving.
- Option to limit levels to save.
- Fallback to extended offset table if basic offset table is overflown.
- Setting for what Pillow filter to use when scaling.
- RGB support for Jpeg LS.
- Refactored frame index reading (basic, extended, and no offset table and native pixel data) and table writing (basic and extended offset table).
- Refactored methods for getting multiple tiles for
ImageData
to make it easier to implement more efficient methods.
0.15.2 - 2023-12-01
- Pillow handling of 16 bit grayscale images as 32 bit instead of 8 bit.
- Using Pillow instead of Codec to decode frames from DICOM web, resulting in
PIL.UnidentifiedImageError
for transfer syntaxes not supported by Pillow. - Fix decoding of non-square images with
PydicomDecoder
andPylibjpegRleDecoder
.
0.15.1 - 2023-11-30
- Correct order of pixel spacing.
- Correct
photometric_interpretation
forJpeg2kSettings
PillowEncoder
encoding Jpeg2000 asJpeg2kEncoder
.
0.15.0 - 2023-11-30
- Fallback to EOT when overflowing BOT.
- Use AvailableTransferSyntaxUID if provided to determine transfer syntax to use when opening DICOM Web instances.
- Missing empty BOT when writing EOT.
- Fixed accessing settings for PillowEncoder.
0.14.0 - 2023-11-29
- Support for additional transfer syntaxes both for reading and writing, using pydicom pixel handlers, (optional) image codecs, and (optional) pylibjpeg-rle.
- Additional decoders and encoders to Pillow. Decoder and encoder is selected automatically. Decoder to use can be overridden with the
prefered_decoder
-setting. - Detection of suitable available transfer syntax when opening slide with DICOM web.
- Support for opening DICOMDIR files using
open_dicomdir()
.
- Opening DICOM web instances in parallel. Configurable with
open_web_theads
-setting. open_web()
now takes a list of requested transfer syntaxes to test if available from the server.- When fetching multiple frames from DICOM web, fetch multiple frames per request instead of making several requests.
- Renamed
OffsetTableType
optionNONE
toEMPTY
, and added typeNONE
for use with unencapsulated data.
- Support for Python 3.8.
- Loading annotation instances using DICOM web.
0.13.0 - 2023-11-11
- Allow a
requests.Session
object to be passed toWsiDicomWebClient.create_client()
.
- Refactored
WsiDicomWebClient.__init__()
to take aDICOMwebClient
instance, and moved the old__init__()
method intoWsiDicomWebClient.create_client()
. - Make some arguments optional for
WsiDicomWebClient.create_client()
. - Removed
WsiDicomFileClient
since it is no longer needed. - Fetching multiple frames in one request instead of one request per frame when using DICOM Web.
- Allow multiple series UIDs to be passed to
WsiDicom.open_web()
. - Loosen UID matching to just
study_instance
. - Require equality of 'TotalPixelMatrixOriginSequence' when matching datasets.
0.12.0 - 2023-10-04
- Updated dependency of Pillow to include Pillow 10.
- Tests written as pytests instead of unittest.
0.11.0 - 2023-08-09
- Override image size for labels and overviews if it is likely to be wrong.
- Use logger instead of issuing warnings.
- Error in documentation of read_overview() in readme.
- Spellings.
0.10.0 - 2023-06-01
- Support for using opened streams.
- Consider image as full tiled if only one tile.
- CidConceptCode.from_meaning(), use constructor with only meaning instead.
- Correct formatting of decimal string values when writing dataset.
0.9.0 - 2023-03-31
- Support for opening DICOM WSI using DICOMWeb.
- save() now takes the optional parameter add_missing_levels, that enables adding missing pyramid levels up to the single-tile level.
- read_region(), read_region_mm(), and read_region_mpp() takes an optional parameter threads, that allows multiple threads to be used for stitching together the region.
- WsiDicom is now initialized using a Source, that is responsible for provides the instances to view.
- Saving a WsiDicom is now handled by WsiDicomFileTarget.
- Refactoring due to adding support for DICOMWeb and opening instances using Source and saving using Target.
- Frame positions and tiling for levels are now parsed lazily, e.g. on first tile access.
- The construct_pyramid() method of the Levels-class has been removed in favour of the add_missing_levels-parameter in save()
0.8.0 - 2023-03-21
- Set TotalPixelMatrixOriginSequence and ImageOrientationSlide from ImageOrgin object.
0.7.0 - 2023-02-13
- Parameter to change label to given image.
- Label and overview series can now be None.
0.6.0 - 2023-01-24
- Raise WsiDicomNotFoundError if no files found for open().
- Added Python 3.11 as supported version.
0.5.0 - 2022-12-13
- Method to center-zoom a Region or RegionMm.
- Do not use threads in method WsiDicomFileWriter._write_pixel_data() if only one worker.
0.4.0 - 2022-06-30
- Focal planes are considered equal if configurable within threshold distance, see config.focal_plane_distance_threshold
- Option to read region defined in slide coordinate system for get_region_mm().
- Default chunk size for saving is now set to 16 tiles.
- Drop support for python 3.7.
- Focal planes are now written to file in correct order.
0.3.2 - 2022-05-08
- Fix version in init.py.
0.3.2 - 2022-05-08
- Fix version in init.py
0.3.1 - 2022-05-04
- Order of parameters for ConceptCode matches pydicom Code.
0.3.0 - 2022-04-20
- Simple check for if DICOM WSI is formatted for fast viewing (WsiDicom.ready_for_viewing()).
- version added.
- Action for downloading test data.
- Do not set pydicom configuration parameters.
- Use correct data type for 32 bit integer in numpy arrays.
- Fix check for if focal planes are sparse.
0.2.0 - 2022-02-14
- Configuration through global variable settings.
- Relaxed requirements for some DICOM attributes.
- Writing BOT and EOT, and reading EOT.
- Pyramid creation.
- save() converts the dataset to TILED_FULL.
- Using null path as output path for save().
- Fix NumberOfFrames when saving.
0.1.0 - 2021-11-26
- Initial release of wsidicom