Package: cucim
cuCIMRAPIDScuCIM 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) filesAccelerated performance through Graphics Processing Unit (GPU)-based image processing and computer vision primitivesA Straightforward Pythonic Interface with Matching Application Programming Interface (API) for OpenslidecuCIM supports the following formats:Aperio ScanScope Virtual Slide (SVS)Philips TIFFGeneric Tiled, Multi-resolution RGB TIFF files with the following compression schemes:No CompressionJPEGJPEG2000Lempel-Ziv-Welch (LZW)DeflateNOTE:For the latest stableREADME.mdensure you are on themainbranch.GTC 2022 Accelerating Storage IO to GPUs with Magnum IO [S41347]cuCIM's GDS API examples:https://github.com/NVIDIA/MagnumIO/tree/main/gds/readers/cucim-gdsSciPy 2021 cuCIM - A GPU image I/O and processing libraryvideoGTC 2021 cuCIM: A GPU Image I/O and Processing Toolkit [S32194]videoDeveloper PageBlogsEnhanced Image Analysis with Multidimensional Image ProcessingAccelerating Scikit-Image API with cuCIM: n-Dimensional Image Processing and IO on GPUsAccelerating Digital Pathology Pipelines with NVIDIA Clara™ DeployWebinarscuCIM: a GPU Image IO and Processing LibraryDocumentationRelease notesare available on ourwiki page.Install cuCIMCondaConda (stable)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 (nightlies)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)PyPIpipinstallcucim# Install dependencies for `cucim.skimage` (assuming that CUDA 11.0 is used for CuPy)pipinstallscipyscikit-imagecupy-cuda110NotebooksPlease check out ourWelcomenotebook (NBViewer)Downloading sample imagesTo download images used in the notebooks, please execute the following commands from the repository root folder to copy sample input images intonotebooks/inputfolder:(You will needDockerinstalled in your system)./rundownload_testdataormkdir-pnotebooks/inputtmp_id=$(dockercreategigony/svs-testdata:little-big)dockercp$tmp_id:/inputnotebooks
dockerrm-v${tmp_id}Build/Install from SourceSee buildinstructions.Contributing GuideContributions to cuCIM are more than welcome!
Please review theCONTRIBUTING.mdfile for information on how to contribute code and issues to the project.AcknowledgmentsWithout awesome third-party open source software, this project wouldn't exist.Please findLICENSE-3rdparty.mdto see which third-party open source software
is used in this project.LicenseApache-2.0 License (seeLICENSEfile).Copyright (c) 2020-2022, NVIDIA CORPORATION.cuCIM 23.10.00 (11 Oct 2023)🐛 Bug FixesUseconda mambabuildnotmamba mambabuild(#607)@bdice📖 Documentationminor updates to release 23.08 changelog (#605)@grlee77🛠️ ImprovementsUpdate image names (#609)@AyodeAweUsecopy-pr-bot(#606)@ajschmidt8cuCIM 23.08.00 (9 Aug 2023)🚨 Breaking ChangesSync cuCIM API with scikit-image 0.21 (#573)@grlee77Therandom_stateargument 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)@grlee77The existing functioncucim.skimage.color.get_xyz_coordshas been renamedcucim.skimage.color.xyz_tristimulus_values. The former function name is deprecated and will be removed in the future. (#573)@grlee77🐛 Bug FixesRemove libwebp-base upper bound. (#599)@bdiceFix ignore_run_exports_from. (#596)@bdiceAdd ignore_run_exports for CUDA 11 (#593)@raydouglassUse linalg & inline_get_manders_overlap_coeff(#578)@jakirkhamFix canny and butterworth (recent CuPy and NumPy compatibility) (#574)@grlee77A bug was fixed in 2D shear calculations for AffineTransform. (#573)@grlee77A bug was fixed in the energy calculation ofcucim.skimage.segmentation.chan_vese. This fix may result in different output from previous versions. (#573)@grlee77🛠️ ImprovementsThe formerly private function_invariant_denoisehas been renameddenoise_invariantand is now part of the publiccucim.skimage.restorationAPI (#573)@grlee77A newreturn_mappingoption was added tocucim.skimage.segmentation.join_segmentations. This provides an additional output with a mapping between the labels in the joined segmentation and the original ones. (#573)@grlee77Added support for y-axis shear to the 2D AffineTransform. (#573)@grlee77Postponed the assessment of GPU memory for testing (#601)@gigonyDo not use x86_64 GDS binaries for aarch64 (#590)@gigonyremove checks for versions of scikit-image that are no longer supported (#587)@grlee77Allow scikit-image 0.21.0 (#580)@jakirkhamDrop unneeded selector onlibwebp-base(#579)@jakirkhamswitch from bundled lazy loading code to the public lazy_loader package (#575)@grlee77Sync cuCIM API with scikit-image 0.21 (#573)@grlee77cuCIM: Build CUDA 12 packages (#572)@jakirkhamuse rapids-upload-docs script (#570)@AyodeAweRemove documentation build scripts for Jenkins (#567)@ajschmidt8cuCIM 23.06.00 (7 Jun 2023)🚨 Breaking ChangesSupport Python 3.9 build/tests (#547)@shwina🐛 Bug FixesFix SHA256 check failure in test suite (#564)@grlee77Handle space character in ./run download_testdata (#556)@gigonyFixreturn_error=&#39;always&#39;behavior in phase_cross_correlation (#549)@grlee77Only load versionedlibcufile(#548)@jakirkhamadd a 20 minute timeout for pytest runs on CI (#545)@grlee77protect against possible out of bounds memory access in 2D distance transform (#540)@grlee77📖 DocumentationFix doc building viarun build_package(#553)@grlee77update changelog for release 23.04.00 and 23.04.01 (#552)@grlee77🛠️ ImprovementsAllow numpy 1.24. (#563)@bdicerun docs nightly too (#560)@AyodeAweUpdate cupy dependency (#558)@vyasrRemove libjpeg dependency (#557)@gigonyEnable sccache hits from local builds (#551)@AyodeAweRevert shared workflows branch (#550)@ajschmidt8Support Python 3.9 build/tests (#547)@shwinaRemove usage of rapids-get-rapids-version-from-git (#546)@jjacobelliUse ARC V2 self-hosted runners for GPU jobs (#538)@jjacobelliRemove underscore in build string. (#528)@bdicecuCIM 23.04.01 (14 Apr 2023)🛠️ ImprovementsPin libwebp-base (#541)@ajschmidt8cuCIM 23.04.00 (6 Apr 2023)🚨 Breaking ChangesFix inefficiency in handling clipping of image range inresizeand other transforms (#516)@grlee77🐛 Bug FixesFix bug in median filter with non-uniform footprint (#521)@grlee77use cp.around instead of cp.round for CuPy 10.x compatiblity (#508)@grlee77Fix error in LZ4-compressed Zarr writing demo (#506)@grlee77Normalize whitespace. (#474)@bdice🛠️ Improvementsallow scikit-image 0.20 as well (#536)@grlee77PassAWS_SESSION_TOKENandSCCACHE_S3_USE_SSLvars to conda build (#525)@ajschmidt8Update aarch64 to GCC 11 (#524)@bdiceUpdate to GCC 11 (#522)@bdiceUpgrade dockcross and pybind11 (#519)@gigonyBinary morphology: omit weights array when possible (#517)@grlee77Fix inefficiency in handling clipping of image range inresizeand other transforms (#516)@grlee77Fix GHA build workflow (#515)@AjayThorveReduce error handling verbosity in CI tests scripts (#511)@AjayThorveUpdate shared workflow branches (#510)@ajschmidt8Remove gpuCI scripts. (#505)@bdiceMove date to build string incondarecipe (#497)@ajschmidt8cuCIM 23.02.00 (9 Feb 2023)🚨 Breaking ChangesAdd disambiguation option to phase_cross_correlation (skimage 0.20 feature) (#486)@grlee77🐛 Bug Fixesapply bug fix to vendored ndimage code (#494)@grlee77Closes #490 -- fixes bug in hue jitter (#491)@benlansdellFix random seed used in test_3d_similarity_estimation (#472)@grlee77📖 DocumentationFix documentation author (#475)@bdice🚀 New FeaturesAdd colocalization measures (#488)@grlee77Add disambiguation option to phase_cross_correlation (skimage 0.20 feature) (#486)@grlee77🛠️ ImprovementsUpdate shared workflow branches (#501)@ajschmidt8Updateisortversion to 5.12.0 (#492)@ajschmidt8Improve rank filtering performance by removing use of footprint kernel when possible (#485)@grlee77use vendored version of cupy.pad with added performance optimizations (#482)@grlee77add docs builds to Github Actions (#481)@AjayThorveUpdatenumpyversion specifier (#480)@ajschmidt8Build CUDA11.8and Python3.10Packages (#476)@ajschmidt8Add GitHub Actions Workflows. (#471)@bdiceFix conflicts in "Forward-merge branch-22.12 to branch-23.02" (#468)@jakirkhamEnable copy_prs. (#465)@bdicecuCIM 22.12.00 (8 Dec 2022)🚨 Breaking ChangesImplement additional deprecations carried out for scikit-image 0.20 (#451)@grlee77improved implementation of ridge filters (bug fixes and reduced memory footprint) (#423)@grlee77🐛 Bug Fixespin to cmake !3.25.0 on CI to avoid bug with CUDA+conda during build (#444)@grlee77update incorrect argument and deprecated function for tifffile.TiffWriter (#433)@JoohyungLee0106Fix rotate behavior for ndim > 2 (#432)@grlee77📖 Documentationadd whole-slide tiled read/write demos for measuring GPUDirect Storage (GDS) I/O performance (#452)@grlee77Add demo for distance_transform_edt (#394)@grlee77🚀 New FeaturesSupport no-compression method in converter (#443)@gigonyadd three segmentation metrics (#425)@grlee77add isotropic binary morphology functions (#421)@grlee77Add blob feature detectors (blob_dog, blob_log, blob_doh) (#413)@monzelr🛠️ Improvementsadditional minor updates (skimage 0.20) (#455)@grlee77Implement additional deprecations carried out for scikit-image 0.20 (#451)@grlee77Fasterhessian_matrix_*andstructure_tensor_eigvalsvia analytical eigenvalues for the 3D case (#434)@grlee77use fused kernels to reduce overhead in corner detector implementations (#426)@grlee77Misc updates for consistency with scikit-image 0.20 (#424)@grlee77improved implementation of ridge filters (bug fixes and reduced memory footprint) (#423)@grlee77analytical moments computations, support pixel spacings in moments and regionprops (#422)@grlee77Forward merge branch-22.10 to branch-22.12 (#420)@grlee77Supportsamplingkwarg fordistance_transform_edt(take pixel/voxel sizes into account) (#407)@grlee77Improve performance of Euclidean distance transform (#406)@grlee77cuCIM 22.10.00 (12 Oct 2022)🐛 Bug FixesCorrectly use dtype when computing shared memory requirements of separable convolution (#409)@grlee77Forward-merge branch-22.08 to branch-22.10 (#403)@jakirkhamAdd missing imports of euler_number and perimeter_crofton (#386)@grlee77📖 Documentationupdate pypi CHANGELOG.md for releases 22.08.00 and 22.08.01 (#404)@grlee77Update README.md (#396)@HesAnEasyCoder🚀 New FeaturesAllow cupy 11 (#399)@galipremsagarAdd cucim.skimage.feature.match_descriptors (#338)@grlee77🛠️ ImprovementsMerge docs and add links (#415)@jakirkhamAdd benchmarks for scikit-image functions introduced in 22.08 (#378)@grlee77cuCIM 22.08.00 (17 Aug 2022)🚨 Breaking ChangesStain extraction: use a less strict condition across channels when thresholding (#316)@grlee77🐛 Bug Fixescreate SimilarityTransform using CuPy 9.x-compatible indexing (#365)@grlee77Add__init__.pyincucim.core(#359)@jakirkhamStain extraction: use a less strict condition across channels when thresholding (#316)@grlee77Incorporate bug fixes from skimage 0.19.3 (#312)@grlee77fix RawKernel bug for canny filter when quantiles are used (#310)@grlee77📖 DocumentationDefer loading ofcustom.js(#383)@galipremsagaradd cucim.core.morphology to API docs + other docstring fixes (#367)@grlee77Update README.md (#361)@HesAnEasyCoderremove unimplemented functions from See Also and fix version numbers in deprecation warnings (#356)@grlee77Forward-merge branch-22.06 to branch-22.08 (#344)@grlee77Update README.md (#315)@HesAnEasyCoderUpdate index.rst (#314)@HesAnEasyCoderUpdate PyPI package documentation for v22.06.00 (#311)@gigony🚀 New FeaturesAdd segmentation with the Chan-Vese active contours method (#343)@grlee77Add cucim.skimage.morphology.medial_axis (#342)@grlee77Add cucim.skimage.segmentation.expand_labels (#341)@grlee77Add Euclidean distance transform for images/volumes (#318)@grlee77🛠️ ImprovementsRevert "Allow CuPy 11" (#362)@galipremsagarFix issues with day & night modes in python docs (#360)@galipremsagarAllow CuPy 11 (#357)@jakirkhammore efficient separable convolution (#355)@grlee77Support resolution and spacing metadata (#349)@gigonyPerformance optimizations to morphological segmentation functions (#340)@grlee77benchmarks: avoid use of deprecated pandas API (#339)@grlee77Reduce memory overhead and improve performance of normalize_colors_pca (#328)@grlee77Protect against obscure divide by zero error in edge case ofnormalize_colors_pca(#327)@grlee77complete parametrization of cucim.skimage benchmarks (#324)@grlee77parameterization offiltersandfeaturesbenchmarks (v2) (#322)@grlee77Add a fast histogram-based median filter (#317)@grlee77Remove custom compiler environment variables (#307)@ajschmidt8cuCIM 22.06.00 (7 Jun 2022)🚨 Breaking ChangesPromote small integer types to single rather than double precision (#278)@grlee77🐛 Bug FixesPopulate correct channel names for RGBA image (#294)@gigonyMerge branch-22.04 into branch-22.06 (#258)@jakirkham📖 Documentationupdate outdated links to example data (#289)@grlee77Add missing API docs (#275)@grlee77🚀 New Featuresadd missingcucim.skimage.segmentation.clear_borderfunction (#267)@grlee77addcucim.core.operations.color.stain_extraction_pcaandcucim.core.operations.color.normalize_colors_pcafor digital pathology H&E stain extraction and normalization (#273)@grlee77,@drbeh🛠️ ImprovementsUpdate to use DLPack v0.6 (#295)@gigonyRemove plugin-related messages temporarily (#291)@gigonySimplify recipes (#286)@EthylingUse cupy.fuse to improve efficiency hessian_matrix_eigvals (#280)@grlee77Promote small integer types to single rather than double precision (#278)@grlee77improve efficiency of histogram-based thresholding functions (#276)@grlee77Remove unused dependencies in GPU tests job (#268)@EthylingEnable footprint decomposition for morphology (#274)@grlee77Use conda compilers (#232)@EthylingBuild packages using mambabuild (#216)@EthylingcuCIM 22.04.00 (6 Apr 2022)🚨 Breaking ChangesApply fixes to skimage.transform scheduled for scikit-image 0.19.2 (#208)@grlee77🐛 Bug FixesFix ImportError from vendored code (#252)@grlee77Fix wrong dimension in metadata (#248)@gigonyHandle file descriptor ownership and update documents for GDS (#234)@gigonyCheck nullptr of handler in CuFileDriver::close() (#229)@gigonyFix docs builds (#218)@ajschmidt8Apply fixes to skimage.transform scheduled for scikit-image 0.19.2 (#208)@grlee77📖 DocumentationUpdate PyPI cuCIM v22.02.01 CHANGELOG.md (#249)@gigonyUpdate GTC 2021 Spring video links (#227)@gigonyUpdate documents for v22.02.00 (#226)@gigonyMerge branch-22.02 into branch-22.04 (#220)@jakirkham🛠️ ImprovementsExpose data type of CuImage object for interoperability with NumPy (#246)@gigonyTemporarily disable newops-botfunctionality (#239)@ajschmidt8Add.github/ops-bot.yamlconfig file (#236)@ajschmidt8randomization per image per batch (#231)@shekhardwcuCIM 22.02.00 (2 Feb 2022)🚨 Breaking ChangesUpdate cucim.skimage API to match scikit-image 0.19 (#190)@glee77🐛 Bug FixesFix a bug inv21.12.01(#191)@gigonyFix GPU memory leak when using nvJPEG API (whendevice='cuda'parameter is used inread_regionmethod).Fix segfault for preferred_memory_capacity in Python 3.9+ (#214)@gigony📖 DocumentationPyPI v21.12.00 release (#182)@gigony🚀 New FeaturesUpdate cucim.skimage API to match scikit-image 0.19 (#190)@glee77Support multi-threads and batch, and support nvJPEG for JPEG-compressed images (#191)@gigonyAllow CuPy 10 (#195)@jakikham🛠️ ImprovementsAdd missing imports tests (#183)@EthylingAllow installation with CuPy 10 (#197)@glee77Upgrade Numpy to 1.18 for Python 3.9 support (#196)@EthylingUpgrade Numpy to 1.19 for Python 3.9 support (#203)@EthylingcuCIM 21.12.00 (9 Dec 2021)🚀 New FeaturesSupport Aperio SVS with CPU LZW and jpeg2k decoder (#141) [@gigony](https://github.com/gigony](https://github.com/gigony))Add NVTX support for performance analysis (#144) [@gigony](https://github.com/gigony](https://github.com/gigony))Normalize operation (#150) [@shekhardw](https://github.com/shekhardw](https://github.com/shekhardw))🐛 Bug FixesLoad libcufile.so with RTLD_NODELETE flag (#177) [@gigony](https://github.com/gigony](https://github.com/gigony))Remove rmm/nvcc dependencies to fix cudaErrorUnsupportedPtxVersion error (#175) [@gigony](https://github.com/gigony](https://github.com/gigony))Do not compile code with nvcc if no CUDA kernel exists (#171) [@gigony](https://github.com/gigony](https://github.com/gigony))Fix a segmentation fault due to unloaded libcufile (#158) [@gigony](https://github.com/gigony](https://github.com/gigony))Fix thread contention in Cache (#145) [@gigony](https://github.com/gigony](https://github.com/gigony))Build with NumPy 1.17 (#148) [@jakirkham](https://github.com/jakirkham](https://github.com/jakirkham))📖 DocumentationAdd Jupyter notebook for SVS Support (#147) [@gigony](https://github.com/gigony](https://github.com/gigony))Update change log for v21.10.01 (#142) [@gigony](https://github.com/gigony](https://github.com/gigony))update docs theme to pydata-sphinx-theme (#138) [@quasiben](https://github.com/quasiben](https://github.com/quasiben))Update Github links in README.md through script (#132) [@gigony](https://github.com/gigony](https://github.com/gigony))Fix GDS link in Jupyter notebook (#131) [@gigony](https://github.com/gigony](https://github.com/gigony))Update notebook for the interoperability with DALI (#127) [@gigony](https://github.com/gigony](https://github.com/gigony))🛠️ ImprovementsUpdatecondarecipes for Enhanced Compatibility effort by (#164) [@ajschmidt8](https://github.com/ajschmidt8](https://github.com/ajschmidt8))Fix Changelog Merge Conflicts forbranch-21.12(#156) [@ajschmidt8](https://github.com/ajschmidt8](https://github.com/ajschmidt8))Add cucim.kit.cumed plugin with skeleton (#129) [@gigony](https://github.com/gigony](https://github.com/gigony))Update initial cpp unittests (#128) [@gigony](https://github.com/gigony](https://github.com/gigony))Optimize zoom out implementation with separate padding kernel (#125) [@chirayuG-nvidia](https://github.com/chirayuG-nvidia](https://github.com/chirayuG-nvidia))Do not force install linux-64 version of openslide-python (#124) [@Ethyling](https://github.com/Ethyling](https://github.com/Ethyling))cuCIM 21.10.00 (7 Oct 2021)🐛 Bug Fixesfix failing regionprops test cases (#110)@grlee77📖 DocumentationForward-merge branch-21.08 to branch-21.10 (#88)@jakirkhamUpdate PyPI cuCIM v21.08.01 README.md and CHANGELOG.md (#87)@gigony🚀 New FeaturesSupport raw RGB tiled TIFF (#108)@gigonyAdd a mechanism for user to know the availability of cucim.CuImage (#107)@gigonyEnable GDS and Support Runtime Context (enter,exit) for CuFileDriver and CuImage (#106)@gigonyAdd transforms for Digital Pathology (#100)@shekhardw🛠️ ImprovementsENH Replace gpuci_conda_retry with gpuci_mamba_retry (#69)@dillon-cullinancuCIM 21.08.00 (4 Aug 2021)🐛 Bug FixesRemove int-type bug on Windows in skimage.measure.label (#72)@grlee77Fix missing array interface for associated_image() (#65)@gigonyHandle zero-padding version string (#59)@gigonyRemove invalid conda environment activation (#58)@ajschmidt8📖 DocumentationFix a typo in cache document (#66)@gigony🚀 New FeaturesPinisorthook to 5.6.4 (#73)@charlesblucaAdd skimage.morphology.thin (#27)@grlee77🛠️ ImprovementsAdd SciPy 2021 to README (#79)@jakirkhamUse more descriptive ElementwiseKernel names in cucim.skimage (#75)@grlee77Add initial Python unit/performance tests for TIFF loader module (#62)@gigonyFix21.08forward-merge conflicts (#57)@ajschmidt8cuCIM 21.06.00 (9 Jun 2021)🐛 Bug FixesUpdateupdate-version.sh(#42)@ajschmidt8🛠️ ImprovementsUpdate environment variable used to determinecuda_version(#43)@ajschmidt8Update version script to remove bump2version dependency (#41)@gigonyUpdate changelog (#40)@ajschmidt8Update docs build script (#39)@ajschmidt8cuCIM 0.19.0 (15 Apr 2021)Initial release of cuCIM including cuClaraImage andcupyimg.