Releases: scikit-image/scikit-image
v0.23.0
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
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 toskimage.measure.regionprops
which computes the standard deviation of the intensity in a region (#6712). - Add parameters
mode
andcval
toerosion
,dilation
,opening
,closing
,white_tophat
, andblack_tophat
inskimage.morphology
. These new parameters determine how array borders are handled (#6695). - Add functions
mirror_footprint
andpad_footprint
toskimage.morphology
(#6695). - Add parameter
mode
tobinary_erosion
,binary_dilation
,binary_opening
andbinary_closing
inskimage.morphology
. These new parameters determine how array borders are handled (#6695). - Add new parameter
spacing
tosegmentation.expand_labels
to support anisotropic images (#7080).
API Changes
- Drop support for Python 3.9 (#7217).
- Parameters
shift_x
andshift_y
inskimage.morphology.erosion
andskimage.morphology.dilation
are deprecated. Usepad_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 ofskimage.feature.plot_matched_features
(#7255). - Deprecate
skimage.morphology.skeletonize_3d
in favor of just skimage.morphology.skeletonize` (#7094). - Deprecate parameter
output
inskimage.filters.gaussian
; useout
instead (#7225). - Change the default value of the parameters
shift_x
,shift_y
andshift_z
fromFalse
to0
in theskimage.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'sprange
(#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
andskimage.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 aTypeError
when the parameteredge_function
was provided without amask
(#7310). - Ensure cache stays empty when
cache=False
is passed toskimage.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
andpandas.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 ofskimage.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 inskimage.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). - ...
v0.23.0rc0
signed 0.23.0rc0 tag
v0.22.0
signed 0.22.0 tag
v0.22.0rc1
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 toregionprops_table
(#7136).
API Changes
- Make PyWavelets an optional dependency which is only required for
skimage.restoration.denoise_wavelet
andskimage.restoration.estimate_sigma
(#7156). - Remove deprecated
skimage.filters.inverse
. Useskimage.filters.filter_inverse
instead (#7161). - Remove deprecated function
skimage.filters.ridges.compute_hessian_eigenvalues
. Useskimage.feature.hessian_matrix_eigvals
on the results ofskimage.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 withchannel_axis=-1
explicitly (#7164). - Change number of returned arguments in
skimage.registration.phase_cross_correlation
. The function now always returns the 3 argumentsshift
,error
, andphasediff
(#7166). - Deprecate
return_error
inskimage.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).
...
v0.21.0
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 inregionprops
(#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 todeprecate_func
(#6594). - Refactor
_invariant_denoise
todenoise_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 todeprecate_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
andcreate_image_fetcher
indata
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...
v0.21.0rc1
v0.21.0rc1
v0.21.0rc0
signed 0.21.0rc0 tag
v0.20.0
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 newdecomposition
parameter of the functionsrectangle
,diamond
,disk
,cube
,octahedron
,ball
, andoctagon
inskimage.morphology
. Thefootprint
parameter of the functionsbinary_erosion
,binary_dilation
,binary_opening
,binary_closing
,erosion
,dilation
,opening
,closing
,white_tophat
, andblack_tophat
inskimage.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 inskimage.measure
:regionprops
,regionprops_table
,moments
,moments_central
,moments_normalized
,centroid
,inertia_tensor
, andinertia_tensor_eigvals
. Voxel spacing is taken into account for the following existing properties inskimage.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
, andmoments_weighted_hu
. The new propertiesnum_pixels
andcoords_scaled
are available as well. See the respective docstrings for more details (#6296). - Add isotropic binary morphological operators
isotropic_closing
,isotropic_dilation
,isotropic_erosion
, andisotropic_opening
inskimage.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
andintersection_coeff
toskimage.measure
(#6189). - Support the Modified Hausdorff Distance (MHD) metric in
skimage.metrics.hausdorff_distance
via the new parametermethod
. The MHD can be more robust against outliers than the directed Hausdorff Distance (HD) (#5581). - Add two datasets
skimage.data.protein_transport
andskimage.data.nickel_solidification
(#6087). - Add new parameter
use_gaussian_derivatives
toskimage.feature.hessian_matrix
which allows the computation of the Hessian matrix by convolving with Gaussian derivatives (#6149). - Add new parameters
squared_butterworth
andnpad
toskimage.filters.butterworth
, which support traditional or squared filtering and edge padding, respectively (#6251). - Support construction of a
skimage.io.ImageCollection
from aload_pattern
with an arbitrary sequence as long as a matchingload_func
is provided (#6276). - Add new parameter
alpha
toskimage.metrics.adapted_rand_error
allowing control over the weight given to precision and recall (#6472). - Add new parameter
binarize
toskimage.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
toskimage.measure.convex_hull_image
to optionally exclude vertices or edges from the final hull mask (#6515). - Add new parameter
offsets
toskimage.measure.regionprops
that optionally allows specifying the coordinates of the origin and affects the propertiescoords_scaled
andcoords
(#3706). - Add new parameter
disambiguate
toskimage.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
andtranslation
inskimage.transform.EuclideanTransform
as well as forskimage.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
, andmatrix_transform
inskimage.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 2Dskimage.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
, andhessian
inskimage.filters
(#6509). - Reduce memory consumption of
blob_dog
,blob_log
, andblob_doh
inskimage.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 returnedlabels
andoriginal_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
, andskimage.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
...
v0.20.0rc8
v0.20.0rc8