Skip to content

release_notes_v22.12.00

Gregory Lee edited this page Dec 9, 2022 · 2 revisions

cuCIM 22.12.00 (9 Dec 2022)

🚨 Breaking Changes

  • The implementation of ridge filters (cucim.skimage.filters.frangi, cucim.skimage.filters.hessian, cucim.skimage.filters.meijering, cucim.skimage.filters.sato) has been overhauled to better match their descriptions in the literature. These behave qualitatively the same, but will return quantitatively different results than in previous versions. This reflects upstream changes in behavior introduced for scikit-image 0.20. (#423) @grlee77

  • The minimum required version of the optional matplotlib dependency has been bumped from 3.0.3 to 3.3.

  • cucim.skimage.feature.structure_tensor now defaults to order='rc' instead of order='xy' for 2D inputs. The prior warning about the pending changing has been removed. (#423) @grlee77

  • The deprecated indices keyword argument to cucim.skimage.feature.peak_local_max has now been removed. (#423) @grlee77

  • The function cucim.skimage.filter.inverse has been renamed to cucim.skimage.filter.filter_inverse. The former name is now deprected. (#423) @grlee77

  • The previously deprecated multichannel parameter, present in many functions across the library, has been removed. channel_axis must be used instead. (#451) @grlee77

  • The previously renamed width and height parameters of cucim.skimage.morphology.rectangle have been removed. The new names are nrows and ncols. (#451) @grlee77

  • The previously deprecated in_place parameter has been removed from both cucim.skimage.morphology.remove_small_holes and cucim.skimage.morphology.remove_small_objects. The out parameter can be used instead to specify an output array. (#451) @grlee77

  • The previously deprecated input parameter to cucim.skimage.measure.label has been removed. The first argument is now named label_image instead (#451) @grlee77

  • The previously deprecated coordinates parameter in cucim.skimage.measure.regionprops has been removed. The library convention of rc (row-column order) is assumed. (#451) @grlee77

  • cucim.skimage.metrics.structural_similarity now requires explicitly providing data_range for floating-point inputs. (#455) @grlee77

🐛 Bug Fixes

  • Fix behavior of cucim.skimage.transform.rotate when the data has more than two dimensions and the user specified resize=True. (#432) @grlee77

  • Update tiff.py TIFF file writer for compatibility with recent tifffile releases. (#433) @JoohyungLee0106, @gigony

  • A bug in boundary handling behavior in cucim.skimage.feature.peak_local_max was addressed (internally replication of the border value is now used rather than a constant of zero). (#423) @grlee77

  • cucim.skimage.transform.resize now disables anti-aliasing by default if the image has an integer dtype and nearest neighbor (order=0) interpolation was requested. (#423) @grlee77

  • Avoid use of CMake 3.25.0 on CI builds to avoid failures during build due to a known bug. (#444) @grlee77, @ajschmidt8

  • A bug where the order of the terms returned by cucim.skimage.feature.hessian_matrix has been fixed. (#455) @grlee77

  • Fix stacklevel of warning raised by cucim.skimage.color.lab2xyz. (#455) @grlee77

  • Fix docstring example for cucim.skimage.util.lookfor. (#455) @grlee77

📖 Documentation

  • a new demo for use of the Euclidean distance transform has been added to the repository (examples/python/distance_transform_edt_demo.py) (#394) @grlee77

  • a proof-of-concept script for testing tiled array processing using GPUDirect Storage was added (see files and README.md in examples/python/gds_whole_slide/) (#452) @grlee77, @gigony

🚀 New Features

  • Newly implemented multidimensional blob detection functions from the scikit-image API: cucim.skimage.feature.blob_dog, cucim.skimage.feature.blob_log, cucim.skimage.filters.blob_doh. (#413) @monzelr, @annendominik, @grlee77

  • Three new segmentation metrics were ported from scikit-image: cucim.skimage.metrics.adapted_rand_error, cucim.skimage.metrics.contingency_table, cucim.skimage.metrics.variation_of_information. (#432) @grlee77

  • New functions for isotropic binary morphology based on use of the Euclidean distance transform: cucim.skimage.morphology.isotropic_dilation, cucim.skimage.morphology.isotropic_erosion, cucim.skimage.morphology.isotropic_opening, cucim.skimage.morphology.isotropic_closing. These behave the same as the corresponding binary morphology functions, but only support disk, spherical or ellipsoidal footprints. The benefit over their binary_* counterparts is that they are substantially faster when the footprint size is large. (#421) @grlee77

  • The existing Euclidean distance transform function, cucim.core.morphology.distance_transform_edt, has been updated to support the sampling, distance and indices keyword arguments. The sampling arguments allows accounting for physical grid spacing in distance computations (e.g. for anisotropic pixel/voxel size). The distance and indices arguments allow users to pass in pre-allocated output arrays. (#407) @grlee77

  • The cucim convert command line utility now supports using --compression RAW to convert a file without compression. The default is --compression JPEG. (#443) @gigony

🛠️ Improvements

  • Faster 2D and 3D pixelwise eigenvalue computations for hessian_matrix_eigvals and structure_tensor_eigvals. These should be 1.5-2x faster than previously for 2D images and 30-100x faster for 3D images. Peak memory usage is also reduced by more than 10x in the 3D case. Other functions benefitting from this change include (cucim.skimage.feature.shape_index, cucim.skimage.feature.multiscale_basic_features, cucim.skimage.filters.meijering, cucim.skimage.filters.sato, cucim.skimage.filters.frangi, cucim.skimage.filters.hessian). (#434) @grlee77

  • cucim.skimage.measure.inertia_tensor_eigvals and cucim.skimage.feature.hessian_matrix_det no longer rely on host-side computations for 2D or 3D images. (#434) @grlee77

  • Faster Hessian determinants in cucim.skimage.feature.hessian_matrix_det via dedicated 2D and 3D kernels. (#455) @grlee77

  • The performance of the existing Euclidean distance transform function, cucim.core.morphology.distance_transform_edt for 2D and 3D images has been substantially improved (2x-4x decrease in run time). (#406) @grlee77

  • Avoid redundant computations when determining central moments. This improves the performance of cucim.skimage.measure.moments_central by approximately 2x. This also helps with performance of the corresponding property when used via cucim.skimage.measure.regionprops_table. (#422) @grlee77

  • The performance of some corner detectors has been improved: cucim.skimage.feature.corner_foerstner, cucim.skimage.feature.corner_harris, cucim.skimage.feature.corner_kitchen_rosenfeld, cucim.skimage.feature.corner_shi_tomasi. (#426) @grlee77

  • cucim.skimage.exposure.histogram_matching now has a faster code path for images with unsigned integer dtype. (#424) @grlee77

  • The function cucim.skimage.filters.butterworth has two new, optional keyword arguments: squared_butterworth and npad. The squared_butterworth argument can be set to False to give a version of the filter consistent with the original literature definition. The npad argument can be set to a value > 0 to reduce any boundary artifacts due to periodic boundary conditions imposed by Fourier-domain filtering. (#423) @grlee77

  • The function cucim.skimage.filters.rank_order now uses an adjustable integer size for the labels rather than always using 32-bit labels. This reduces memory usage when the number of labels is small enough to be represented by an unsigned 8 or 16-bit integer. (#423) @grlee77

  • The function cucim.skimage.filters.farid has been extended from 2D only to a general multidimensional implementation. (#423) @grlee77

  • Performance improvement (by 20-30%) to cucim.skimage.metrics.structural_similarity via CUDA kernel fusion. (#423) @grlee77

  • cucim.skimage.morphology.reconstruction can now operate using 64-bit indices in the case of large images with size exceding 32-bit integer range. (#423) @grlee77

  • cucim.skimage.restoration.wiener and cucim.skimage.restoration.unsupervised_wiener have been extended from 2D only to general multidimensional support. (#423) @grlee77

  • cucim.skimage.transform.EuclideanTransform's rotation method handles 3D rotations in addition to 2D ones. cucim.skimage.transform.SimilarityTransform now supports both 3D and 2D data. (#423) @grlee77

  • cucim.skimage.metrics.structural_similarity can now also accept a device scalar (0-dimensional CuPy array) for the data_range argument. (#455) @grlee77