Skip to main content

Whole Slide Image (WSI) conversion for brightfield histology images

Project description

wsic

Gitmoji image image

Python application Documentation Status

image image image

Whole Slide Image (WSI) conversion for brightfield histology images.

Note: This is in early development and there will likely be frequent and breaking changes.

Provides a command line interface (CLI) for easy convertion between formats:

Usage: wsic convert [OPTIONS]

  Convert a WSI.

Options:
  -i, --in-path PATH              Path to WSI to read from.
  -o, --out-path PATH             The path to output to.
  -t, --tile-size <INTEGER INTEGER>...
                                  The size of the tiles to write.
  -rt, --read-tile-size <INTEGER INTEGER>...
                                  The size of the tiles to read.
  -w, --workers INTEGER           The number of workers to use.
  -c, --compression [blosc|deflate|jpeg xl|jpeg-ls|jpeg|jpeg2000|lzw|png|webp|zstd]
                                  The compression to use.
  -cl, --compression-level INTEGER
                                  The compression level to use.
  -d, --downsample INTEGER        The downsample factor to use.
  -mpp, --microns-per-pixel <FLOAT FLOAT>...
                                  The microns per pixel to use.
  -ome, --ome / --no-ome          Save with OME-TIFF metadata (OME-TIFF and
                                  NGFF).
  --overwrite / --no-overwrite    Whether to overwrite the output file.
  -to, --timeout FLOAT            Timeout in seconds for reading a tile.
  -W, --writer [auto|jp2|svs|tiff|zarr]
                                  The writer to use. Overrides writer detected
                                  by output file extension.
  -s, --store [dir|ndir|zip|sqlite]
                                  The store to use (zarr/NGFF only). Defaults
                                  to ndir (nested directory).
  -h, --help                      Show this message and exit.

A demonstration of converting a JP2 file to a pyramid TIFF.

Getting Started

For basic usage see the documentation page "How do I...?".

Features

  • Reading and writing several container formats.
  • Support for a wide range of compression codecs.
  • Custom tile size
  • Lossless repackaging / transcoding (to zarr/NGFF or TIFF) from:
    • SVS (JPEG compressed)
    • OME-TIFF (single image, JPEG and JPEG2000 (J2K) compressed)
    • Generic Tiled TIFF (JPEG, JPEG2000, and WebP compressed)
    • DICOM WSI (JPEG and JPEG2000 (J2K) compressed)

Read Container Formats

  • OpenSlide Formats:
    • Aperio SVS (.svs)
    • Hamamatsu (.vms, .vmu, .ndpi)
    • Leica (.scn)
    • Mirax MRXS (.mrxs)
    • Sakura (.svslide)
    • Trestle (.tif)
    • Ventana (.bif, .tif)
    • Generic tiled TIFF (.tif; DEFLATE, JPEG, and Webp compressed)
  • Other Tiled TIFFs (tifffile supported formats)
    • Tiled with various codecs: e.g. JPEG XL, JPEG 2000, WebP, and zstd.
    • RGB/brightfield OME-TIFF.
  • JP2 (via glymur and OpenJPEG)
    • Including Omnyx JP2 files.
  • Zarr
    • Single array.
    • Group of (multiresolution) arrays.
    • NGFF v0.4.
  • DICOM WSI (via wsidicom)

Write Container Formats

  • TIFF
    • Generic Tiled / Pyramid TIFF
    • OME-TIFF
    • SVS
  • JP2
  • Zarr (NGFF v0.4)
  • DICOM (.dcm)

Other Tools

There are many other great tools in this space. Below are some other tools for converting WSIs.

bfconvert

Part of the Bio-Formats command line tools. Uses bioformats to convert from many formats to OME-TIFF.

https://www.openmicroscopy.org/bio-formats/downloads/

biofromats2raw

Convert from Bio-Formats formats to zarr.

https://github.com/glencoesoftware/bioformats2raw

isyntax2raw

Convert from Philips' iSyntax format to a zarr.

https://github.com/glencoesoftware/isyntax2raw

wsidicomiser

Convert OpenSlide images to WSI DICOM.

https://github.com/sectra-medical/wsidicomizer

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.9.0 (2023-05-25)

  • Update documentation.
  • Bump dependencies.
  • Improved validation of TIFF write arguments.
  • Add ability to speciy store when writing Zarr e.g. zarr.SQliteStore.
  • Update CLI:
    • New -s argment for convert to specify store for zarr.
  • Bug fixes:
    • Fix MPP writing for .dcm files.
    • Fix parsing of NGFF metadata (zattrs JSON), including getting MPP.

0.8.2 (2023-04-02)

  • Bug fixes:
    • Fix issue where DICOMWSIReader required user input at init.
    • Fix level offset when printing the level number during TIFFWriter pyramid building.
    • Refactor slow DICOMWSIReader init warning and only warn from the main process.

0.8.0 (2023-04-01)

  • Add DICOM writer.
  • Avoid decoding entire TIFF before conversion starts.
  • TIFFReader can now expose a dask array view (using tiffile Zarr view underneath).
  • Add overwrite option to transcode CLI mode.
  • Refactor to use persistent worker subprocesses. This avoids recreating the reader object for each region read. For some reader such as DICOMWSIReader this significantly improves performance.
  • General refactoring and code cleanup.
  • Bug fixes:
    • Fix writing MPP for SVSWriter.
    • Remove OpenSlide thumbnail generation method. This would cause the process to run out of memory for some files and the base implementation works just as well without this memory issue.

0.7.0 (2022-12-15)

  • Normalise TIFF array axes (to YXC order) when reading using tiffile.
  • Bug fixes:
    • Fix reading/writing JP2 resoluion metadata (vres/hres are in m not cm).
    • Join child processes when finishing writing / exiting.
    • Copy the reader tile size for transcode mode.
    • Return None for MPP when JP2 has no resolution box.
    • Set resolution units to cm when writing TIFFs.
    • Use the MPP from the reader when writing JP2.
    • Add a zarr intermediate for JP2 writing (allows different read and write tile sizes).

0.6.1 (2022-10-21)

  • Select Writer class based on file extension from CLI.
  • Bug fixes:
    • Fix writing MPP to NGFF v0.4.
    • Change coordinate transformation ordering.
    • Fix reading TIFF resolution tag. Previously only the numerator of the resolution fraction was being read.
    • Other minor bug fixes.

0.6.0 (2022-10-03)

  • Add ability to write resolution metadata to JP2. Thanks to @quintusdias for helping get this implemented in glymur.
  • Remove QOI codec code as this is not included in imagecodes. Thanks to Christoph Gohlke for adding this.
  • Add a "How do I?" documentation page.

0.5.1 (2022-06-27)

  • Bug fixes:
    • Fix parsing of OpenSlide MPP to float.

0.5.0 (2022-06-25)

  • Add ability to transcode/repackage to a TIFF file (from DICOM or SVS).
  • Refactor ZarrReaderWriter to seperate ZarrWriter and ZarrReader.
  • Bug fixes:
    • Fix thumbnaiul generation for zarr.
    • Fix NGFF metadata CoordinateTransformation field default factor.

0.4.0 (2022-06-20)

  • Add ability to write JPEG compressed SVS files.
  • Add support for thumbnail generation and a CLI command.
  • Swap from strings to enums for codecs and color spaces.

0.3.0 (2022-05-13)

  • Remove unused CLI debug option.
  • Add generation of OME-NGFF metadata (JSON .zattrs file).
  • Add timeout when copying tiles to prevent indefinite hanging.
  • Improve joining/termination of child processes at shutdown.
  • Use the TIFF resolution tag if present.
  • Add get_tile method to all Reader classes.
  • Update supported Python versions to 3.8, 3.9, 3.10.
  • Bug fixes:
    • Fix and issue with concatenation of pyramid downsamples.
    • Add a custom Queue class for multiprocessing on macOS.
    • Fix handling of pyramid_downsamples argument when None.

0.2.0 (2022-03-22)

  • Add Support To Read DICOM WSI and transform to zarr.

0.1.0 (2022-02-22)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wsic-0.9.0.tar.gz (22.2 MB view details)

Uploaded Source

Built Distribution

wsic-0.9.0-py2.py3-none-any.whl (118.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file wsic-0.9.0.tar.gz.

File metadata

  • Download URL: wsic-0.9.0.tar.gz
  • Upload date:
  • Size: 22.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for wsic-0.9.0.tar.gz
Algorithm Hash digest
SHA256 faff711b893978444a671ebd28c8397af872897f3e2957622323d7f7d31bd9a8
MD5 c939a9feb9cd71132435ed46e2953e9e
BLAKE2b-256 0975fdd7733fea111045a5250352b90cb6e04b3edf73f6464a2d9d4a4a596a46

See more details on using hashes here.

File details

Details for the file wsic-0.9.0-py2.py3-none-any.whl.

File metadata

  • Download URL: wsic-0.9.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 118.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for wsic-0.9.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 95df7618858e7901db8197adcc569511fbfbad87c0d688f9ef46cc6d5fbced67
MD5 573dfdd907d36c1d796e4678bc184567
BLAKE2b-256 8d354c23eb5c8ff3eff293eb2f4fa7dd1feb32ae34840e5f555864c2d5fe972e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page