
Β cuCIM
RAPIDS cuCIM is an open-source, accelerated computer vision and image processing software library for multidimensional images used in biomedical, geospatial, material and life science, and remote sensing use cases.
cuCIM offers:
- Enhanced Image Processing Capabilities for large and n-dimensional tag image file format (TIFF) files
- Accelerated performance through Graphics Processing Unit (GPU)-based image processing and computer vision primitives
- A Straightforward Pythonic Interface with Matching Application Programming Interface (API) for Openslide
cuCIM supports the following formats:
- Aperio ScanScope Virtual Slide (SVS)
- Philips TIFF
- Generic Tiled, Multi-resolution RGB TIFF files with the following compression schemes:
- No Compression
- JPEG
- JPEG2000
- Lempel-Ziv-Welch (LZW)
- Deflate
NOTE: For the latest stable README.md ensure you are on the main
branch.
Developer Page
Blogs
Webinars
Documentation
Release notes are available on our wiki page.
Install cuCIM
Conda
conda create -n cucim -c rapidsai -c conda-forge cucim cudatoolkit=<CUDA version>
<CUDA version>
should be 11.0+ (e.g., 11.0
, 11.2
, etc.)
conda create -n cucim -c rapidsai-nightly -c conda-forge cucim cudatoolkit=<CUDA version>
<CUDA version>
should be 11.0+ (e.g., 11.0
, 11.2
, etc)
pip install cucim
pip install scipy scikit-image cupy-cuda110
Notebooks
Please check out our Welcome notebook (NBViewer)
Downloading sample images
To download images used in the notebooks, please execute the following commands from the repository root folder to copy sample input images into notebooks/input
folder:
(You will need Docker installed in your system)
./run download_testdata
or
mkdir -p notebooks/input
tmp_id=$(docker create gigony/svs-testdata:little-big)
docker cp $tmp_id:/input notebooks
docker rm -v ${tmp_id}
Build/Install from Source
See build instructions.
Contributing Guide
Contributions to cuCIM are more than welcome!
Please review the CONTRIBUTING.md file for information on how to contribute code and issues to the project.
Acknowledgments
Without awesome third-party open source software, this project wouldn't exist.
Please find LICENSE-3rdparty.md to see which third-party open source software
is used in this project.
License
Apache-2.0 License (see LICENSE file).
Copyright (c) 2020-2022, NVIDIA CORPORATION.
cuCIM 23.10.00 (11 Oct 2023)
π Bug Fixes
- Use
conda mambabuild
not mamba mambabuild
(#607) @bdice
π Documentation
π οΈ Improvements
cuCIM 23.08.00 (9 Aug 2023)
π¨ Breaking Changes
- Sync cuCIM API with scikit-image 0.21 (#573) @grlee77
- The
random_state
argument of medial_axis and unsupervised_wiener is now deprecated and will be removed in the future. The new argument name, seed
, should be used instead. (#573) @grlee77
- The existing function
cucim.skimage.color.get_xyz_coords
has been renamed cucim.skimage.color.xyz_tristimulus_values
. The former function name is deprecated and will be removed in the future. (#573) @grlee77
π Bug Fixes
- Remove libwebp-base upper bound. (#599) @bdice
- Fix ignore_run_exports_from. (#596) @bdice
- Add ignore_run_exports for CUDA 11 (#593) @raydouglass
- Use linalg & inline
_get_manders_overlap_coeff
(#578) @jakirkham
- Fix canny and butterworth (recent CuPy and NumPy compatibility) (#574) @grlee77
- A bug was fixed in 2D shear calculations for AffineTransform. (#573) @grlee77
- A bug was fixed in the energy calculation of
cucim.skimage.segmentation.chan_vese
. This fix may result in different output from previous versions. (#573) @grlee77
π οΈ Improvements
- The formerly private function
_invariant_denoise
has been renamed denoise_invariant
and is now part of the public cucim.skimage.restoration
API (#573) @grlee77
- A new
return_mapping
option was added to cucim.skimage.segmentation.join_segmentations
. This provides an additional output with a mapping between the labels in the joined segmentation and the original ones. (#573) @grlee77
- Added support for y-axis shear to the 2D AffineTransform. (#573) @grlee77
- Postponed the assessment of GPU memory for testing (#601) @gigony
- Do not use x86_64 GDS binaries for aarch64 (#590) @gigony
- remove checks for versions of scikit-image that are no longer supported (#587) @grlee77
- Allow scikit-image 0.21.0 (#580) @jakirkham
- Drop unneeded selector on
libwebp-base
(#579) @jakirkham
- switch from bundled lazy loading code to the public lazy_loader package (#575) @grlee77
- Sync cuCIM API with scikit-image 0.21 (#573) @grlee77
- cuCIM: Build CUDA 12 packages (#572) @jakirkham
- use rapids-upload-docs script (#570) @AyodeAwe
- Remove documentation build scripts for Jenkins (#567) @ajschmidt8
cuCIM 23.06.00 (7 Jun 2023)
π¨ Breaking Changes
π Bug Fixes
- Fix SHA256 check failure in test suite (#564) @grlee77
- Handle space character in ./run download_testdata (#556) @gigony
- Fix
return_error='always'
behavior in phase_cross_correlation (#549) @grlee77
- Only load versioned
libcufile
(#548) @jakirkham
- add a 20 minute timeout for pytest runs on CI (#545) @grlee77
- protect against possible out of bounds memory access in 2D distance transform (#540) @grlee77
π Documentation
- Fix doc building via
run build_package
(#553) @grlee77
- update changelog for release 23.04.00 and 23.04.01 (#552) @grlee77
π οΈ Improvements
cuCIM 23.04.01 (14 Apr 2023)
π οΈ Improvements
cuCIM 23.04.00 (6 Apr 2023)
π¨ Breaking Changes
- Fix inefficiency in handling clipping of image range in
resize
and other transforms (#516) @grlee77
π Bug Fixes
- Fix bug in median filter with non-uniform footprint (#521) @grlee77
- use cp.around instead of cp.round for CuPy 10.x compatiblity (#508) @grlee77
- Fix error in LZ4-compressed Zarr writing demo (#506) @grlee77
- Normalize whitespace. (#474) @bdice
π οΈ Improvements
cuCIM 23.02.00 (9 Feb 2023)
π¨ Breaking Changes
- Add disambiguation option to phase_cross_correlation (skimage 0.20 feature) (#486) @grlee77
π Bug Fixes
π Documentation
π New Features
- Add colocalization measures (#488) @grlee77
- Add disambiguation option to phase_cross_correlation (skimage 0.20 feature) (#486) @grlee77
π οΈ Improvements
cuCIM 22.12.00 (8 Dec 2022)
π¨ Breaking Changes
- Implement additional deprecations carried out for scikit-image 0.20 (#451) @grlee77
- improved implementation of ridge filters (bug fixes and reduced memory footprint) (#423) @grlee77
π Bug Fixes
- pin to cmake !3.25.0 on CI to avoid bug with CUDA+conda during build (#444) @grlee77
- update incorrect argument and deprecated function for tifffile.TiffWriter (#433) @JoohyungLee0106
- Fix rotate behavior for ndim > 2 (#432) @grlee77
π Documentation
- add whole-slide tiled read/write demos for measuring GPUDirect Storage (GDS) I/O performance (#452) @grlee77
- Add demo for distance_transform_edt (#394) @grlee77
π New Features
- Support no-compression method in converter (#443) @gigony
- add three segmentation metrics (#425) @grlee77
- add isotropic binary morphology functions (#421) @grlee77
- Add blob feature detectors (blob_dog, blob_log, blob_doh) (#413) @monzelr
π οΈ Improvements
- additional minor updates (skimage 0.20) (#455) @grlee77
- Implement additional deprecations carried out for scikit-image 0.20 (#451) @grlee77
- Faster
hessian_matrix_*
and structure_tensor_eigvals
via analytical eigenvalues for the 3D case (#434) @grlee77
- use fused kernels to reduce overhead in corner detector implementations (#426) @grlee77
- Misc updates for consistency with scikit-image 0.20 (#424) @grlee77
- improved implementation of ridge filters (bug fixes and reduced memory footprint) (#423) @grlee77
- analytical moments computations, support pixel spacings in moments and regionprops (#422) @grlee77
- Forward merge branch-22.10 to branch-22.12 (#420) @grlee77
- Support
sampling
kwarg for distance_transform_edt
(take pixel/voxel sizes into account) (#407) @grlee77
- Improve performance of Euclidean distance transform (#406) @grlee77
cuCIM 22.10.00 (12 Oct 2022)
π Bug Fixes
- Correctly use dtype when computing shared memory requirements of separable convolution (#409) @grlee77
- Forward-merge branch-22.08 to branch-22.10 (#403) @jakirkham
- Add missing imports of euler_number and perimeter_crofton (#386) @grlee77
π Documentation
π New Features
π οΈ Improvements
cuCIM 22.08.00 (17 Aug 2022)
π¨ Breaking Changes
- Stain extraction: use a less strict condition across channels when thresholding (#316) @grlee77
π Bug Fixes
- create SimilarityTransform using CuPy 9.x-compatible indexing (#365) @grlee77
- Add
__init__.py
in cucim.core
(#359) @jakirkham
- Stain extraction: use a less strict condition across channels when thresholding (#316) @grlee77
- Incorporate bug fixes from skimage 0.19.3 (#312) @grlee77
- fix RawKernel bug for canny filter when quantiles are used (#310) @grlee77
π Documentation
π New Features
- Add segmentation with the Chan-Vese active contours method (#343) @grlee77
- Add cucim.skimage.morphology.medial_axis (#342) @grlee77
- Add cucim.skimage.segmentation.expand_labels (#341) @grlee77
- Add Euclidean distance transform for images/volumes (#318) @grlee77
π οΈ Improvements
cuCIM 22.06.00 (7 Jun 2022)
π¨ Breaking Changes
- Promote small integer types to single rather than double precision (#278) @grlee77
π Bug Fixes
π Documentation
π New Features
- add missing
cucim.skimage.segmentation.clear_border
function (#267) @grlee77
- add
cucim.core.operations.color.stain_extraction_pca
and cucim.core.operations.color.normalize_colors_pca
for digital pathology H&E stain extraction and normalization (#273) @grlee77, @drbeh
π οΈ Improvements
cuCIM 22.04.00 (6 Apr 2022)
π¨ Breaking Changes
- Apply fixes to skimage.transform scheduled for scikit-image 0.19.2 (#208) @grlee77
π Bug Fixes
π Documentation
π οΈ Improvements
cuCIM 22.02.00 (2 Feb 2022)
π¨ Breaking Changes
- Update cucim.skimage API to match scikit-image 0.19 (#190) @glee77
π Bug Fixes
- Fix a bug in v21.12.01 (#191) @gigony
- Fix GPU memory leak when using nvJPEG API (when
device='cuda'
parameter is used in read_region
method).
- Fix segfault for preferred_memory_capacity in Python 3.9+ (#214) @gigony
π Documentation
π New Features
- Update cucim.skimage API to match scikit-image 0.19 (#190) @glee77
- Support multi-threads and batch, and support nvJPEG for JPEG-compressed images (#191) @gigony
- Allow CuPy 10 (#195) @jakikham
π οΈ Improvements
cuCIM 21.12.00 (9 Dec 2021)
π New Features
π Bug Fixes
π Documentation
π οΈ Improvements
cuCIM 21.10.00 (7 Oct 2021)
π Bug Fixes
π Documentation
- Forward-merge branch-21.08 to branch-21.10 (#88) @jakirkham
- Update PyPI cuCIM v21.08.01 README.md and CHANGELOG.md (#87) @gigony
π New Features
- Support raw RGB tiled TIFF (#108) @gigony
- Add a mechanism for user to know the availability of cucim.CuImage (#107) @gigony
- Enable GDS and Support Runtime Context (enter, exit) for CuFileDriver and CuImage (#106) @gigony
- Add transforms for Digital Pathology (#100) @shekhardw
π οΈ Improvements
cuCIM 21.08.00 (4 Aug 2021)
π Bug Fixes
- Remove int-type bug on Windows in skimage.measure.label (#72) @grlee77
- Fix missing array interface for associated_image() (#65) @gigony
- Handle zero-padding version string (#59) @gigony
- Remove invalid conda environment activation (#58) @ajschmidt8
π Documentation
π New Features
π οΈ Improvements
- Add SciPy 2021 to README (#79) @jakirkham
- Use more descriptive ElementwiseKernel names in cucim.skimage (#75) @grlee77
- Add initial Python unit/performance tests for TIFF loader module (#62) @gigony
- Fix
21.08
forward-merge conflicts (#57) @ajschmidt8
cuCIM 21.06.00 (9 Jun 2021)
π Bug Fixes
π οΈ Improvements
cuCIM 0.19.0 (15 Apr 2021)
- Initial release of cuCIM including cuClaraImage and cupyimg.