Skip to content

Releases: scikit-image/scikit-image

v0.23.0

10 Apr 18:11
v0.23.0
Compare
Choose a tag to compare

Warning

Due to an issue with the CI system scikit-image 0.23.0 was never released.
This release is identical to 0.23.1 other than the CI fix and the version number.

v0.23.0rc2

04 Apr 02:57
v0.23.0rc2
Compare
Choose a tag to compare
v0.23.0rc2 Pre-release
Pre-release

scikit-image 0.23.0rc2

We're happy to announce the release of scikit-image 0.23.0rc2!

New Features

  • Add new intensity_std property to skimage.measure.regionprops which computes the standard deviation of the intensity in a region (#6712).
  • Add parameters mode and cval to erosion, dilation, opening, closing, white_tophat, and black_tophat in skimage.morphology. These new parameters determine how array borders are handled (#6695).
  • Add functions mirror_footprint and pad_footprint to skimage.morphology (#6695).
  • Add parameter mode to binary_erosion, binary_dilation, binary_opening and binary_closing in skimage.morphology. These new parameters determine how array borders are handled (#6695).
  • Add new parameter spacing to segmentation.expand_labels to support anisotropic images (#7080).

API Changes

  • Drop support for Python 3.9 (#7217).
  • Parameters shift_x and shift_y in skimage.morphology.erosion and skimage.morphology.dilation are deprecated. Use pad_footprint or modify the footprint manually instead (#6695).
  • Remove unexpected value scaling in skimage.morphology.skeletonize_3d for non-binary input images. skeletonize_3d now always returns a binary array like similar functions (#7095).
  • Deprecate function skimage.feature.plot_matches in favor of skimage.feature.plot_matched_features (#7255).
  • Deprecate skimage.morphology.skeletonize_3d in favor of just skimage.morphology.skeletonize` (#7094).
  • Deprecate parameter output in skimage.filters.gaussian; use out instead (#7225).
  • Change the default value of the parameters shift_x, shift_y and shift_z from False to 0 in the skimage.filters.rank functions. This has not impact on the results. Warn in case boolean shifts are provided from now on (#7320).

Performance

  • Add lazy loading to skimage.metrics module (#7211).
  • Speedup skimage.util.map_array by parallelization with Cython's prange (#7266).

Bug Fixes

  • Add exception to avoid surprising result when image is too small for the given parameters in skimage.feature.hog (#7153).
  • Ensure skimage.morphology.closing and skimage.morphology.opening are extensive and anti-extensive, respectively, if the footprint is not mirror symmetric (#6695).
  • Avoid a TypeError in skimage.registration.phase_cross_correlation when the real-time shift cannot be determined (disambiguate=True). Display a warning instead (#7259).
  • Fix logic in skimage.graph.pixel_graph which raised a TypeError when the parameter edge_function was provided without a mask (#7310).
  • Ensure cache stays empty when cache=False is passed to skimage.measure.regionprops (#7333).

Documentation

  • Update instructions for updating dev environment (#7160).
  • Make titles in RAG gallery examples more explicit (#7202).
  • Add docstring to skimage.graph module (#7192).
  • Use consistent notation for array dimensions in the docstrings (#3031).
  • Specify default markers in watershed docstring (#7154).
  • Stop HTML documentation from intercepting left and right-arrow keys to improve keyboard accessibility (#7226).
  • Fix reference formatting for nitpicky sphinx (#7228).
  • Document how to deal with other array-likes such as xarray.DataArray and pandas.DataFrame in the crash course on NumPy for images (#7159).
  • Fix broken function calls and syntax issues in user guide (#7234).
  • Use correct default mode in docstring of skimage.transform.swirl (#7241).
  • Add missing documentation about spacing parameter in moments_normalized (#7248).
  • Update docstring & example in the hough_ellipse transform (#6893).
  • Point binder tag/branch to commit corresponding to docs/release (#7252).
  • Add example to FundamentalMatrixTransform class (#6863).
  • Adds explanation of what the optional dependency on Matplotlib offers to the install instructions (#7286).
  • Function docstring was changed to follow the conventions adopted in the original paper. τ was replaced with θ (#7314).
  • The description of the parameter cval is modified in "int or float". cval is a numerical value not a string (#7319).
  • Remove obsolete instruction about documenting changes (#7321).
  • Added comment to clarify that dt corresponds to tau, i.e. the time step. Changed gray scale in grayscale in the entire registration module (#7324).
  • Create SECURITY.md (#7230).
  • Remove deprecated parameter coordinates from docstring example of skimage.segmentation.active_contour (#7329).
  • Include dates in release note headings (#7269).
  • Update description of how to document pull requests for inclusion in the release notes (#7267).
  • Clarify description of data_range parameter in skimage.metrics.structural_similarity (#7345).
  • Use object-oriented Matplotlib style in longer gallery examples and demonstrations (doc/examples/applications) (#7346).

Infrastructure

  • Update wording on the stale bot to assume the core team dropped the ball (#7196).
  • Update Azure job name following the drop of Python 3.9 (#7218).
  • Schedule nightly wheel builds at uncommon time (#7254).
  • Build nightly wheels with nightly NumPy 2.0 (#7251).
  • Use pytest-doctestplus instead of classic pytest-doctest (#7289).
  • Update the scientific-python/upload-nightly-action to v0.5.0 for dependency stability and to take advantage of Anaconda Cloud upload bug fixes (#7325).
  • Add assert_stacklevel helper to check stacklevel of captured warnings (#7294).
  • Exclude pre-commit[bot] from changelist's contributor list (#7358).

Maintenance

  • Remove outdated & duplicate "preferred" field in version_switcher.json (#7184).
  • Upgrade to spin 0.7 (#7168).
  • Do not compare types, use isinstance (#7186).
  • [pre-commit.ci] pre-commit autoupdate (#7181).
  • Increase tolerance for moments test for 32 bit floats (#7188).
  • Temporarily pin Cython to <3.0.3 until CI is fixed (#7189).
  • Remove obsolete meson instructions (#7193).
  • Temporarily pin Cython to <3.0.3 until CI is fixed, take 2 (#7201).
  • Fix chocolatey (#7200).
  • Pin Pillow to <10.1.0 until incompatibility with imageio is fixed (#7208).
  • Use Black (#7197).
  • Apply black to _hog.py after previous merge lacking black (#7215).
  • ...
Read more

v0.23.0rc0

22 Mar 22:52
v0.23.0rc0
Compare
Choose a tag to compare
v0.23.0rc0 Pre-release
Pre-release
signed 0.23.0rc0 tag

v0.22.0

03 Oct 21:36
v0.22.0
Compare
Choose a tag to compare
signed 0.22.0 tag

v0.22.0rc1

30 Sep 23:57
v0.22.0rc1
Compare
Choose a tag to compare
v0.22.0rc1 Pre-release
Pre-release

scikit-image 0.22.0rc1

We're happy to announce the release of scikit-image 0.22.0rc1!

New Features

  • Add new image sequence skimage.data.palisades_of_vogt showing in-vivo tissue of the palisades of Vogt (#6858).

Performance

  • Add lazy loading to the skimage.feature module (#6983).
  • Add lazy loading to the skimage.graph submodule (#6985).
  • Add lazy loading to the skimage.measure submodule (#6999).
  • Add lazy loading to the skimage.transform submodule (#7009).
  • Add lazy loading to the skimage.restoration submodule (#7021).
  • Add lazy loading to the skimage.registration submodule (#7032).
  • Avoid unnecessary padding in skimage.measure.block_resize (#7092).

Bug Fixes

  • Add num_pixels and coords_scaled to regionprops_table (#7039).
  • Update video.rst (#7076).
  • For uniform intensity images, return intensity value as threshold (#7098).
  • Fix color conversion error (#7116).
  • Make phase_cross_correlation return ndarray when disambiguate=True (#7112).
  • Allow extra_properties of non equal lengths to be passed correctly to regionprops_table (#7136).

API Changes

  • Make PyWavelets an optional dependency which is only required for skimage.restoration.denoise_wavelet and skimage.restoration.estimate_sigma (#7156).
  • Remove deprecated skimage.filters.inverse. Use skimage.filters.filter_inverse instead (#7161).
  • Remove deprecated function skimage.filters.ridges.compute_hessian_eigenvalues. Use skimage.feature.hessian_matrix_eigvals on the results of skimage.feature.hessian_matrix instead (#7162).
  • Remove deprecated automatic detection of the color channel in skimage.filters.gaussian. channel_axis=None now indicates a grayscale image. Set the color channel with channel_axis=-1 explicitly (#7164).
  • Change number of returned arguments in skimage.registration.phase_cross_correlation. The function now always returns the 3 arguments shift, error, and phasediff (#7166).
  • Deprecate return_error in skimage.registration.phase_cross_correlation (#7174).

Maintenance

  • Don't test numpy prerelease on azure (#6996).
  • Drop Python 3.8 support per SPEC 0 (#6990).
  • Upper pin imageio (#7002).
  • Update core dependencies per SPEC0 (#7005).
  • meson: allow proper selection of NumPy, Pythran in cross builds (#7003).
  • Unpin imageio and add warningfilter (#7006).
  • Update to latest attach-next-milestone action (#7014).
  • Avoid deprecated auto-removal of overlapping axes in thresholding example (#7026).
  • Update lazy_loader (#7043).
  • Remove conflicting setuptools upper pin (#7045).
  • Remove future.graph after v0.21 release (#6899).
  • Cleanup from move to pyproject.toml (#7044).
  • Ignore new matplotlib warning (#7056).
  • Update spin (#7054).
  • Ignore SciPy 1.12.dev0 deprecation warning (#7057).
  • Include expected warning for SciPy 1.12 (#7058).
  • Mark NaN-related deprecation warning from np.clip as optional in tests (#7052).
  • Fix abs value function warnings (#7010).
  • Temporary fix for wheel recipe (#7059).
  • Temporary fix for wheel building (#7060).
  • Remove outdated comment (#7077).
  • Include py.typed file in distribution (PEP 561) (#7073).
  • Transition user guide to import skimage as ski (#7024).
  • Fix for NumPy 1.25 (#6970).
  • Pin sphinx until sphinx-gallery is fixed (#7100).
  • Cleanup old Python 3.11 tests (#7099).
  • Revert "Pin sphinx until sphinx-gallery is fixed (#7100)" (#7102).
  • MNT: Remove np.float_ alias; it is removed in NumPy 2.0 (#7118).
  • Fix for NumPy 1.26 (#7101).
  • Update meson-python (#7120).
  • We now require sklearn 1.1, as per SPEC0 (#7121).
  • Update for NumPy 2 namespace cleanup (#7119).
  • DOC: minor numpydoc syntax update (#7123).
  • Update for NumPy 2 namespace cleanup (#7122).
  • Temporary work-around for NEP 51 numpy scalar reprs + doctests (#7125).
  • Update lazy loader (#7126).
  • Fix PEP 8 issues (#7142).
  • Remove single-threaded dask usage in face detection gallery example which fixes issues with running the example on Windows and CI (#7141).
  • Update spin version to 0.6 (#7150).
  • Match pep8speaks and ruff line lengths to 88 (#7148).
  • Remove last reference to distutils in _build_utils/tempita.py (#7137).
  • Update sphinx, sphinx-gallery & sphinx_design (#7155).
  • Update minimal version of numpydoc to 1.6 (#7106).
  • Build wheels for py3.12 (#7082).
  • Update label and milestone workflows (#7163).
  • Update TODO (see #6899) (#7165).
  • Announce Python 3.12 support (#7167).
  • Remove pep8speaks config (#7172).
  • Filter out expected runtime warnings in registation.phase_cross_correlation when disambiguate=True (#7147).
  • Use pre-commit bot (#7171).
  • Fix missing warnings import in phase_cross_correlation (#7175).
  • Fix release notes error (#7177).
  • Use trusted publisher (#7178).

Documentation

  • Use a more descriptive title for current inpainting example (#6989).
  • Fix URLs to the install page (#6998).
  • Fix equation for Wiener filter in restoration.wiener's docstring (#6987).
  • Fix missing links in INSTALL.rst and simplify language (#6984).
  • Edit installation and contributor guidelines (#6991).
  • Fix URLs that lead to 404 page (#7008).
  • Replace with correct reference to eigenvalues in ridge detection docstrings (#7034).
    ...
Read more

v0.21.0

02 Jun 05:03
Compare
Choose a tag to compare

We're happy to announce the release of scikit-image 0.21.0! scikit-image is an image processing toolbox for SciPy that includes algorithms for segmentation, geometric transformations, color space manipulation, analysis, filtering, morphology, feature detection, and more.

For more information, examples, and documentation, please visit our website: https://scikit-image.org

Highlights

  • Last release to support Python 3.8
  • Unified API for PRNGs

New Features

  • Implement Fisher vectors in scikit-image (#5349).
  • Add support for y-dimensional shear to the AffineTransform (#6752).

API Changes

In this release, we unify the way seeds are specified for algorithms that make use of pseudo-random numbers. Before, various keyword arguments (sample_seed, seed, random_seed, and random_state) served the same purpose in different places. These have all been replaced with a single rng argument, that handles both integer seeds and NumPy Generators. Please see the related SciPy discussion, as well as Scientific Python SPEC 7 that attempts to summarize the argument.

  • Unify API on seed keyword for random seeds / generator (#6258).
  • Refactor _invariant_denoise to denoise_invariant (#6660).
  • Expose color.get_xyz_coords in public API (#6696).
  • Make join_segmentations return array maps from output to input labels (#6786).
  • Unify pseudo-random seeding interface (#6922).
  • Change geometric transform inverse to property (#6926).

Enhancements

  • Bounding box crop (#5499).
  • Add support for y-dimensional shear to the AffineTransform (#6752).
  • Make join_segmentations return array maps from output to input labels (#6786).
  • Check if spacing parameter is tuple in regionprops (#6907).
  • Enable use of rescale_intensity with dask array (#6910).

Performance

  • Add lazy loading to skimage.color submodule (#6967).
  • Add Lazy loading to skimage.draw submodule (#6971).
  • Add Lazy loader to skimage.exposure (#6978).
  • Add lazy loading to skimage.future module (#6981).

Bug Fixes

  • Fix and refactor deprecated decorator to deprecate_func (#6594).
  • Refactor _invariant_denoise to denoise_invariant (#6660).
  • Expose color.get_xyz_coords in public API (#6696).
  • shift and normalize data before fitting circle or ellipse (#6703).
  • Showcase pydata-sphinx-theme (#6714).
  • Fix matrix calculation for shear angle in AffineTransform (#6717).
  • Fix threshold_li(): prevent log(0) on single-value background. (#6745).
  • Fix copy-paste error in footprints.diamond test case (#6756).
  • Update .devpy/cmds.py to match latest devpy (#6789).
  • Avoid installation of rtoml via conda in installation guide (#6792).
  • Raise error in skeletonize for invalid value to method param (#6805).
  • Sign error fix in measure.regionprops for orientations of 45 degrees (#6836).
  • Fix returned data type in segmentation.watershed (#6839).
  • Handle NaNs when clipping in transform.resize (#6852).
  • Fix failing regionprop_table for multichannel properties (#6861).
  • Do not allow 64-bit integer inputs; add test to ensure masked and unmasked modes are aligned (#6875).
  • Fix typo in apply_parallel introduced in #6876 (#6881).
  • Fix LPI filter for data with even dimensions (#6883).
  • Use legacy datasets without creating a data_dir (#6886).
  • Raise error when source_range is not correct (#6898).
  • apply spacing rescaling when computing centroid_weighted (#6900).
  • Corrected energy calculation in Chan Vese (#6902).
  • Add missing backticks to DOI role in docstring of area_opening (#6913).
  • Fix inclusion of random.js in HTML output (#6935).
  • Fix URL of random gallery links (#6937).
  • Use context manager to ensure urlopen buffer is closed (#6942).
  • Fix sparse index type casting in skimage.graph._ncut (#6975).

Maintenance

  • Fix and refactor deprecated decorator to deprecate_func (#6594).
  • allow trivial ransac call (#6755).
  • Fix copy-paste error in footprints.diamond test case (#6756).
  • Use imageio v3 API (#6764).
  • Unpin scipy dependency (#6773).
  • Update .devpy/cmds.py to match latest devpy (#6789).
  • Relicense CLAHE code under BSD-3-Clause (#6795).
  • Relax reproduce section in bug issue template (#6825).
  • Rename devpy to spin (#6842).
  • Speed up threshold_local function by fixing call to _supported_float_type (#6847).
  • Specify kernel for ipywidgets (#6849).
  • Make image_fetcher and create_image_fetcher in data private (#6855).
  • Update references to outdated dev.py with spin (#6856).
  • Bump 0.21 removals to 0.22 (#6868).
  • Update dependencies (#6869).
  • Update pre-commits (#6870).
  • Add test for radon transform on circular phantom (#6873).
  • Do not allow 64-bit integer inputs; add test to ensure masked and unmasked modes are aligned (#6875).
  • Don't use mutable types as default values for arguments (#6876).
  • Point version_switcher.json URL at dev docs (#6882).
  • Add back parallel tests that were removed as part of Meson build (#6884).
  • Use legacy datasets without creating a data_dir (#6886).
  • Remove old doc cruft (#6901).
  • Temporarily pin imageio to <2.28 (#6909).
  • Unify pseudo-random seeding interface follow-up (#6924).
  • Use pytest.warn instead of custom context manager (#6931).
  • Follow-up to move to pydata-sphinx-theme (#6933).
  • Mark functions as noexcept to support Cython 3 (#6936).
  • Skip unstable test in ransac's docstring (#6938).
  • Stabilize EllipseModel fitting parame...
Read more

v0.21.0rc1

18 May 19:04
v0.21.0rc1
Compare
Choose a tag to compare
v0.21.0rc1 Pre-release
Pre-release
v0.21.0rc1

v0.21.0rc0

12 Apr 06:50
v0.21.0rc0
Compare
Choose a tag to compare
v0.21.0rc0 Pre-release
Pre-release
signed 0.21.0rc0 tag

v0.20.0

28 Feb 23:32
v0.20.0
Compare
Choose a tag to compare

Announcement: scikit-image 0.20.0

scikit-image is an image processing toolbox built on SciPy that includes algorithms for segmentation, geometric transformations, color space manipulation, analysis, filtering, morphology, feature detection, and more.

For more information, examples, and documentation, please visit our website: https://scikit-image.org

With this release, many of the functions in skimage.measure now support anisotropic images with different voxel spacings.

Many performance improvements were made, such as support for footprint decomposition in skimage.morphology

Four new gallery examples were added to the documentation, including the new interactive example "Track solidification of a metallic alloy".

This release completes the transition to a more flexible channel_axis parameter for indicating multi-channel images, and includes several other deprecations that make the API more consistent and expressive.

Finally, in preparation for the removal of distutils in the upcoming Python 3.12 release, we replaced our build system with meson and a static pyproject.toml specification.

This release supports Python 3.8--3.11.

New features and improvements

  • Support footprint decomposition to several footprint generating and consuming functions in skimage.morphology. By decomposing a footprint into several smaller ones, morphological operations can potentially be sped up. The decomposed footprint can be generated with the new decomposition parameter of the functions rectangle, diamond, disk, cube, octahedron, ball, and octagon in skimage.morphology. The footprint parameter of the functions binary_erosion, binary_dilation, binary_opening, binary_closing, erosion, dilation, opening, closing, white_tophat, and black_tophat in skimage.morphology now accepts a sequence of 2-element tuples (footprint_i, num_iter_i) where each entry, i, of the sequence contains a footprint and the number of times it should be iteratively applied. This is the form produced by the footprint decompositions mentioned above (#5482, #6151).
  • Support anisotropic images with different voxel spacings. Spacings can be defined with the new parameter spacing of the following functions in skimage.measure: regionprops, regionprops_table, moments, moments_central, moments_normalized, centroid, inertia_tensor, and inertia_tensor_eigvals. Voxel spacing is taken into account for the following existing properties in skimage.measure.regionprops: area, area_bbox, centroid, area_convex, extent, feret_diameter_max, area_filled, inertia_tensor, moments, moments_central, moments_hu, moments_normalized, perimeter, perimeter_crofton, solidity, moments_weighted_central, and moments_weighted_hu. The new properties num_pixels and coords_scaled are available as well. See the respective docstrings for more details (#6296).
  • Add isotropic binary morphological operators isotropic_closing, isotropic_dilation, isotropic_erosion, and isotropic_opening in skimage.morphology. These functions return the same results as their non-isotropic counterparts but perform faster for large circular structuring elements (#6492).
  • Add new colocalization metrics pearson_corr_coeff, manders_coloc_coeff, manders_overlap_coeff and intersection_coeff to skimage.measure (#6189).
  • Support the Modified Hausdorff Distance (MHD) metric in skimage.metrics.hausdorff_distance via the new parameter method. The MHD can be more robust against outliers than the directed Hausdorff Distance (HD) (#5581).
  • Add two datasets skimage.data.protein_transport and skimage.data.nickel_solidification (#6087).
  • Add new parameter use_gaussian_derivatives to skimage.feature.hessian_matrix which allows the computation of the Hessian matrix by convolving with Gaussian derivatives (#6149).
  • Add new parameters squared_butterworth and npad to skimage.filters.butterworth, which support traditional or squared filtering and edge padding, respectively (#6251).
  • Support construction of a skimage.io.ImageCollection from a load_pattern with an arbitrary sequence as long as a matching load_func is provided (#6276).
  • Add new parameter alpha to skimage.metrics.adapted_rand_error allowing control over the weight given to precision and recall (#6472).
  • Add new parameter binarize to skimage.measure.grid_points_in_poly to optionally return labels that tell whether a pixel is inside, outside, or on the border of the polygon (#6515).
  • Add new parameter include_borders to skimage.measure.convex_hull_image to optionally exclude vertices or edges from the final hull mask (#6515).
  • Add new parameter offsets to skimage.measure.regionprops that optionally allows specifying the coordinates of the origin and affects the properties coords_scaled and coords (#3706).
  • Add new parameter disambiguate to skimage.registration.phase_cross_correlation to optionally disambiguate periodic shifts (#6617).
  • Support n-dimensional images in skimage.filters.farid (Farid & Simoncelli filter) (#6257).
  • Support n-dimensional images in skimage.restoration.wiener (#6454).
  • Support three dimensions for the properties rotation and translation in skimage.transform.EuclideanTransform as well as for skimage.transform.SimilarityTransform.scale (#6367).
  • Allow footprints with non-adjacent pixels as neighbors in skimage.morphology.flood_fill (#6236).
  • Support array-likes consistently in AffineTransform, EssentialMatrixTransform, EuclideanTransform, FundamentalMatrixTransform, GeometricTransform, PiecewiseAffineTransform, PolynomialTransform, ProjectiveTransform, SimilarityTransform, estimate_transform, and matrix_transform in skimage.transform (#6270).

Performance

  • Improve performance (~2x speedup) of skimage.feature.canny by porting a part of its implementation to Cython (#6387).
  • Improve performance (~2x speedup) of skimage.feature.hessian_matrix_eigvals and 2D skimage.feature.structure_tensor_eigenvalues (#6441).
  • Improve performance of skimage.measure.moments_central by avoiding redundant computations (#6188).
  • Reduce import time of skimage.io by loading the matplotlib plugin only when required (#6550).
  • Incorporate RANSAC improvements from scikit-learn into skimage.measure.ransac which decrease the number of iterations (#6046).
  • Improve histogram matching performance on unsigned integer data with skimage.exposure.match_histograms. (#6209, #6354).
  • Reduce memory consumption of the ridge filters meijering, sato, frangi, and hessian in skimage.filters (#6509).
  • Reduce memory consumption of blob_dog, blob_log, and blob_doh in skimage.feature (#6597).
  • Use minimal required unsigned integer size internally in skimage.morphology.reconstruction which allows to operate the function with higher precision or on larger arrays. Previously, int32 was used. (#6342).
  • Use minimal required unsigned integer size in skimage.filters.rank_order which allows to operate the function with higher precision or on larger arrays. Previously, the returned labels and original_values were always of type uint32. (#6342).

Changes and new deprecations

  • Set Python 3.8 as the minimal supported version (#6679).
  • Rewrite skimage.filters.meijering, skimage.filters.sato, skimage.filters.frangi, and skimage.filters.hessian to match the published algorithms more closely. This change is backward incompatible and will lead to different output values compared to the previous implementation. The Hessian matrix calculation is now done more accurately. The filters will now be correctly set to zero whenever one of the Hessian eigenvalues has a sign which is incompatible with a ridge of the desired polarity. The gamma constant of the Frangi filter is now set adaptively based on the maximum Hessian norm (#6446).
  • Move functions in skimage.future.graph...
Read more

v0.20.0rc8

20 Feb 16:52
v0.20.0rc8
Compare
Choose a tag to compare
v0.20.0rc8 Pre-release
Pre-release
v0.20.0rc8