🚀 scikit-image/scikit-image - Release Notes

v0.25.2 (2025-02-18)

# scikit-image 0.25.2

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

## Bug Fixes

- Handle random degenerate case in `skimage.graph.cut_normalized` gracefully ([#7675](https://github.com/scikit-image/scikit-image/pull/7675)).
- In `skimage.feature.BRIEF`, copy `keypoints` if necessary to preserve contiguity ([#7692](https://github.com/scikit-image/scikit-image/pull/7692)).
- Revert a previous fix to `skimage.segmentation.watershed` that unintentionally changed the algorithm's behavior for markers placed at maxima in the image. We decided that the behavior originally reported as a bug (gh-6632), is not actually one ([#7702](https://github.com/scikit-image/scikit-image/pull/7702)).

## Documentation

- Improve docstring of `skimage.restoration.rolling_ball` ([#7682](https://github.com/scikit-image/scikit-image/pull/7682)).

## Infrastructure

- Only run the job if the PR got merged (vs merely closed) ([#7679](https://github.com/scikit-image/scikit-image/pull/7679)).
- Fix typo in GH workflow ([#7681](https://github.com/scikit-image/scikit-image/pull/7681)).
- Refactor GitHub's CI config and helper scripts ([#7672](https://github.com/scikit-image/scikit-image/pull/7672)).
- Use pytest config in pyproject.toml in CI ([#7555](https://github.com/scikit-image/scikit-image/pull/7555)).
- Lower CI build verbosity ([#7688](https://github.com/scikit-image/scikit-image/pull/7688)).
- Port testing on Windows from Azure CI to GitHub's CI ([#7687](https://github.com/scikit-image/scikit-image/pull/7687)).
- CI cleanup ([#7693](https://github.com/scikit-image/scikit-image/pull/7693)).
- Simultaneously resolve all dependencies; add pip caching ([#7690](https://github.com/scikit-image/scikit-image/pull/7690)).
- Reenable graph reproducibility test ([#7694](https://github.com/scikit-image/scikit-image/pull/7694)).
- Give milestone labeler necessary permissions ([#7695](https://github.com/scikit-image/scikit-image/pull/7695)).
- Milestone labeler permission not needed ([#7696](https://github.com/scikit-image/scikit-image/pull/7696)).
- Fix 313t wheel build ([#7699](https://github.com/scikit-image/scikit-image/pull/7699)).

## Maintenance

- Include a missing image in meson.build so they are included in the wheel ([#7660](https://github.com/scikit-image/scikit-image/pull/7660)).
- Add zizmor to pre-commit; address GH workflow issues raised ([#7662](https://github.com/scikit-image/scikit-image/pull/7662)).

## Contributors

6 authors added to this release (alphabetically):

- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Matthew Brett ([@matthew-brett](https://github.com/matthew-brett))
- Orion Poplawski ([@opoplawski](https://github.com/opoplawski))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

8 reviewers added to this release (alphabetically):

- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Brett ([@matthew-brett](https://github.com/matthew-brett))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.25.2rc0 (2025-02-11)

# scikit-image 0.25.2rc0

We're happy to announce the release of scikit-image 0.25.2rc0!

## Bug Fixes

- Handle random degenerate case in `skimage.graph.cut_normalized` gracefully ([#7675](https://github.com/scikit-image/scikit-image/pull/7675)).
- Copy keypoints if necessary to preserve contiguity ([#7692](https://github.com/scikit-image/scikit-image/pull/7692)).
- Revert a previous fix to `skimage.segmentation.watershed` that unintentionally changed the algorithm's behavior for markers placed at maxima in the image. We decided that the behavior originally reported as a bug (gh-6632), is not actually one ([#7702](https://github.com/scikit-image/scikit-image/pull/7702)).

## Documentation

- Improve docstring for rolling_ball function ([#7682](https://github.com/scikit-image/scikit-image/pull/7682)).

## Infrastructure

- Only run the job if the PR got merged (vs merely closed) ([#7679](https://github.com/scikit-image/scikit-image/pull/7679)).
- Fix typo in GH workflow ([#7681](https://github.com/scikit-image/scikit-image/pull/7681)).
- Refactor GitHub's CI config and helper scripts ([#7672](https://github.com/scikit-image/scikit-image/pull/7672)).
- Use pytest config in pyproject.toml in CI ([#7555](https://github.com/scikit-image/scikit-image/pull/7555)).
- Lower CI build verbosity ([#7688](https://github.com/scikit-image/scikit-image/pull/7688)).
- Port testing on Windows from Azure CI to GitHub's CI ([#7687](https://github.com/scikit-image/scikit-image/pull/7687)).
- CI cleanup ([#7693](https://github.com/scikit-image/scikit-image/pull/7693)).
- Simultaneously resolve all dependencies; add pip caching ([#7690](https://github.com/scikit-image/scikit-image/pull/7690)).
- Reenable graph reproducibility test ([#7694](https://github.com/scikit-image/scikit-image/pull/7694)).
- Give milestone labeler necessary permissions ([#7695](https://github.com/scikit-image/scikit-image/pull/7695)).
- Milestone labeler permission not needed ([#7696](https://github.com/scikit-image/scikit-image/pull/7696)).
- Fix 313t wheel build ([#7699](https://github.com/scikit-image/scikit-image/pull/7699)).

## Maintenance

- Include a missing image in meson.build so they are included in the wheel ([#7660](https://github.com/scikit-image/scikit-image/pull/7660)).
- Add zizmor to pre-commit; address GH workflow issues raised ([#7662](https://github.com/scikit-image/scikit-image/pull/7662)).

## Contributors

6 authors added to this release (alphabetically):

- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Matthew Brett ([@matthew-brett](https://github.com/matthew-brett))
- Orion Poplawski ([@opoplawski](https://github.com/opoplawski))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

8 reviewers added to this release (alphabetically):

- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Brett ([@matthew-brett](https://github.com/matthew-brett))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.25.1 (2025-01-26)

# scikit-image 0.25.1

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

## Bug Fixes

- Include `centroid` in `__all__` of the PYI file in `skimage.measure` ([#7652](https://github.com/scikit-image/scikit-image/pull/7652)).
- Improve numerical stability of `blur_effect` ([#7643](https://github.com/scikit-image/scikit-image/pull/7643)).
- Because under-determined fits are unreliable, `skimage.measure.EllipseModel` will now warn and return `False` (no fit) when fewer than 5 data points are provided ([#7648](https://github.com/scikit-image/scikit-image/pull/7648)).
- Explicitly upcast `data` with dtype `float16` to `float32` in  `skimage.segmentation.random_walker`; this fixes passing `float16` on NumPy 1.26 ([#7655](https://github.com/scikit-image/scikit-image/pull/7655)).

## Documentation

- Don't use removed `QuadContourSet.collections` in gallery example ([#7638](https://github.com/scikit-image/scikit-image/pull/7638)).
- Change old import convention in the gallery examples ([#7630](https://github.com/scikit-image/scikit-image/pull/7630)).

## Infrastructure

- Make apigen.py work with editable hooks ([#7647](https://github.com/scikit-image/scikit-image/pull/7647)).
- Build Linux ARM wheels natively ([#7664](https://github.com/scikit-image/scikit-image/pull/7664)).

## Maintenance

- Infer floating point type for sigma parameter ([#7637](https://github.com/scikit-image/scikit-image/pull/7637)).
- In `skimage.segmentation.active_contour`, change the type of the default argument for `w_line` to indicate it is a float ([#7645](https://github.com/scikit-image/scikit-image/pull/7645)).
- Temporarily disable parallel building of gallery ([#7656](https://github.com/scikit-image/scikit-image/pull/7656)).
- [pre-commit.ci] pre-commit autoupdate ([#7649](https://github.com/scikit-image/scikit-image/pull/7649)).
- Skip flaky test on azure ([#7669](https://github.com/scikit-image/scikit-image/pull/7669)).

## Contributors

8 authors added to this release (alphabetically):

- [@michaelbratsch](https://github.com/michaelbratsch)
- [@scrimpys](https://github.com/scrimpys)
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jigyasu ([@jgyasu](https://github.com/jgyasu))
- kwikwag ([@kwikwag](https://github.com/kwikwag))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

8 reviewers added to this release (alphabetically):

- [@michaelbratsch](https://github.com/michaelbratsch)
- Dan Schult ([@dschult](https://github.com/dschult))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jigyasu ([@jgyasu](https://github.com/jgyasu))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Ruth Comer ([@rcomer](https://github.com/rcomer))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.25.0 (2024-12-13)

# scikit-image 0.25.0

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

## New Features

- Add the new Gray-Level Co-occurrence Matrix (GLCM) properties  "mean", "variance", "standard deviation" and "entropy" to  `skimage.feature.texture.graycoprops` ([#7375](https://github.com/scikit-image/scikit-image/pull/7375)).
- Add the new `skimage.morphology.footprint_rectangle` supporting generation of rectangular or hyper-rectangular footprints in one function ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).

## API Changes

- Complete the deprecation of and remove `skimage.feature.plot_matches`. Use `skimage.feature.plot_matched_features` going forward ([#7487](https://github.com/scikit-image/scikit-image/pull/7487)).
- Deprecate `skimage.io.imshow`, `skimage.io.imshow_collection` and `skimage.io.show`. Please use `matplotlib`, `napari`, etc. to visualize images ([#7508](https://github.com/scikit-image/scikit-image/pull/7508)).
- Remove deprecated `skimage.morphology.skeletonize_3d`;  use `skimage.morphology.skeletonize` instead ([#7572](https://github.com/scikit-image/scikit-image/pull/7572)).
- Deprecate `skimage.io` plugin infrastructure ([#7353](https://github.com/scikit-image/scikit-image/pull/7353)).
- Switched to using the `scipy.sparse` array interface. For more details, see the note about the new `scipy.sparse` array interface [here](https://docs.scipy.org/doc/scipy/reference/sparse.html) ([#7576](https://github.com/scikit-image/scikit-image/pull/7576)).
- Deprecate `skimage.morphology.rectangle` in favor of the new function `skimage.morphology.footprint_rectangle` ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).
- Deprecate `skimage.morphology.square` in favor of the new function `skimage.morphology.footprint_rectangle` ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).
- Deprecate `skimage.morphology.cube` in favor of the new function `skimage.morphology.footprint_rectangle` ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).

## Enhancements

- Improve numerical stability of `skimage.morphology.local_minima` for extremely small floats ([#7534](https://github.com/scikit-image/scikit-image/pull/7534)).
- Make sure that `skimage.feature.plot_matched_features` uses the same random colors, if `matches_color` isn't provided  explicitly ([#7541](https://github.com/scikit-image/scikit-image/pull/7541)).
- Allow passing a sequence of colors to the parameter `matches_color` in `skimage.feature.plot_matched_features` ([#7541](https://github.com/scikit-image/scikit-image/pull/7541)).

## Performance

- `skimage.feature.peak_local_max` will now skip unnecessary distance computations in the case of `min_distance=1`. This results in performance improvements to functions like `skimage.feature.blob_dog`, `skimage.feature.blob_log`,  `skimage.feature.blob_doh` and `skimage.feature.corner_peaks` that call  `peak_local_max` internally ([#7548](https://github.com/scikit-image/scikit-image/pull/7548)).
- In `skimage.featurepeak_local_max`, skip unnecessary check for cases where  `min_distance > 1` is passed ([#7548](https://github.com/scikit-image/scikit-image/pull/7548)).

## Bug Fixes

- Ensure that `skimage.morphology.remove_objects_by_distance` doesn't fail  if the given integer dtype cannot be safely cast to the architecture specific size of `intp`, e.g. on i386 architectures ([#7453](https://github.com/scikit-image/scikit-image/pull/7453)).
- Fix degeneracy in `skimage.draw.ellipsoid_stats` when all semi-axes have the same length ([#7473](https://github.com/scikit-image/scikit-image/pull/7473)).
- Prevent `skimage.morphology.thin` from accidentally  modifying the input image in case it is of dtype uint8 ([#7469](https://github.com/scikit-image/scikit-image/pull/7469)).
- Fix numerical precision error in `skimage.measure.ransac`. In some cases, `ransac` was stopping at the first iteration ([#7065](https://github.com/scikit-image/scikit-image/pull/7065)).
- Fix numerical precision error in `skimage.measure.ransac`;  very small probabilities lead to -0 number of max trials ([#7496](https://github.com/scikit-image/scikit-image/pull/7496)).
- Ensure that `RegionProperties` objects returned by `skimage.measure.regionprops` can be deserialized with pickle ([#7569](https://github.com/scikit-image/scikit-image/pull/7569)).
- Fix edge case where setting `watershed_lines=True` in `skimage.segmentation.watershed` resulted in an incorrect solution ([#7071](https://github.com/scikit-image/scikit-image/pull/7071)).
- Fix the behavior of `skimage.segmentation.watershed` when the markers don't align with local minima by making sure every marker is evaluated before successive pixels ([#7071](https://github.com/scikit-image/scikit-image/pull/7071)).
- Fix dtype promotion in `skimage.segmentation.join_segmentations` if `numpy.uint` is used with NumPy<2 ([#7292](https://github.com/scikit-image/scikit-image/pull/7292)).

## Documentation

- In `skimage.morphology.skeletonize`, clarify the expected image dtypes and how objects of different intensities are handled ([#7456](https://github.com/scikit-image/scikit-image/pull/7456)).
- Fix example section in docstring of `skimage.feature.graycomatrix` ([#7297](https://github.com/scikit-image/scikit-image/pull/7297)).
- Use conda-forge consistently in instructions for setting up the development environment ([#7483](https://github.com/scikit-image/scikit-image/pull/7483)).
- Use new `CITATION.cff` instead of `CITATION.bib` ([#7505](https://github.com/scikit-image/scikit-image/pull/7505)).
- Use correct `spin test --coverage` in contribution guide ([#7515](https://github.com/scikit-image/scikit-image/pull/7515)).
- Tweak advice to new developers; remove AI warning ([#7522](https://github.com/scikit-image/scikit-image/pull/7522)).
- Rework installation instructions ([#7434](https://github.com/scikit-image/scikit-image/pull/7434)).
- Improve the description of the `image` parameter in `skimage.restoration.richardson_lucy` ([#7477](https://github.com/scikit-image/scikit-image/pull/7477)).
- Account for empty arrays when counting segments per contour level in gallery example "Segment human cells (in mitosis)" ([#7551](https://github.com/scikit-image/scikit-image/pull/7551)).
- Fix typo in morphology doc ([#7606](https://github.com/scikit-image/scikit-image/pull/7606)).
- Change type description of parameter `radius` in  `skimage.morphology.ball` from `int` to `float` ([#7627](https://github.com/scikit-image/scikit-image/pull/7627)).

## Infrastructure

- Fix CI tests with minimal dependencies and make dependency resolution more robust ([#7462](https://github.com/scikit-image/scikit-image/pull/7462)).
- Add CI to test scikit-image against free-threaded Python 3.13 ([#7463](https://github.com/scikit-image/scikit-image/pull/7463)).
- Address autosummary.import_cycle warning ([#7486](https://github.com/scikit-image/scikit-image/pull/7486)).
- Temporarily exclude Dask 2024.8.0 to fix CI ([#7493](https://github.com/scikit-image/scikit-image/pull/7493)).
- Uncomment `currentmodule` directive again ([#7492](https://github.com/scikit-image/scikit-image/pull/7492)).
- Add CI to release nightly free-threaded wheels ([#7481](https://github.com/scikit-image/scikit-image/pull/7481)).
- Update deprecated configuration ([#7501](https://github.com/scikit-image/scikit-image/pull/7501)).
- Bump spin version to 0.11 ([#7507](https://github.com/scikit-image/scikit-image/pull/7507)).
- Ensure only a single `type:` label is present in PRs ([#7512](https://github.com/scikit-image/scikit-image/pull/7512)).
- Update pydata-sphinx-theme ([#7511](https://github.com/scikit-image/scikit-image/pull/7511)).
- Fix OpenBLAS `s_cmp` unresolved symbol error, update Emscripten CI testing ([#7525](https://github.com/scikit-image/scikit-image/pull/7525)).
- Render paragraphs in dormant message ([#7549](https://github.com/scikit-image/scikit-image/pull/7549)).
- Build sphinx documentation with parallel jobs ([#7579](https://github.com/scikit-image/scikit-image/pull/7579)).
- Don't check test coverage in CI ([#7594](https://github.com/scikit-image/scikit-image/pull/7594)).
- Explicitly setup conda on macos for wheel building ([#7608](https://github.com/scikit-image/scikit-image/pull/7608)).

## Maintenance

- Verify all artifacts that have been attested by looping over them in CI ([#7447](https://github.com/scikit-image/scikit-image/pull/7447)).
- Update circleci-artifacts-redirector-action that moved to the Scientific Python org ([#7446](https://github.com/scikit-image/scikit-image/pull/7446)).
- Use NumPy 2.0 stable to build packages ([#7451](https://github.com/scikit-image/scikit-image/pull/7451)).
- FIX Use python3 in Meson version script shebang ([#7482](https://github.com/scikit-image/scikit-image/pull/7482)).
- Refactored tests for skeletonize ([#7459](https://github.com/scikit-image/scikit-image/pull/7459)).
- Remove unused and deprecated dependency pytest-runner ([#7495](https://github.com/scikit-image/scikit-image/pull/7495)).
- Exclude imageio 2.35.0 that forces numpy downgrade ([#7502](https://github.com/scikit-image/scikit-image/pull/7502)).
- Don't test thresholding funcs for Dask compatibility ([#7509](https://github.com/scikit-image/scikit-image/pull/7509)).
- Fix build dependency ([#7510](https://github.com/scikit-image/scikit-image/pull/7510)).
- Add sdist check to `spin sdist` ([#7438](https://github.com/scikit-image/scikit-image/pull/7438)).
- Reorder items in TODO list ([#7519](https://github.com/scikit-image/scikit-image/pull/7519)).
- Use `Rotation.from_euler` to compute 3D rotation matrix ([#7503](https://github.com/scikit-image/scikit-image/pull/7503)).
- Update spin (0.12) ([#7532](https://github.com/scikit-image/scikit-image/pull/7532)).
- Import `lazy_loader` as private symbol in top-level namespaces ([#7540](https://github.com/scikit-image/scikit-image/pull/7540)).
- Set -DNPY_NO_DEPRECATED_API=NPY_1_23_API_VERSION on build ([#7538](https://github.com/scikit-image/scikit-image/pull/7538)).
- Update up/download artifact version ([#7545](https://github.com/scikit-image/scikit-image/pull/7545)).
- Don't use deprecated `io.show` and `io.imshow` ([#7556](https://github.com/scikit-image/scikit-image/pull/7556)).
- Hide traceback inside `assert_stacklevel` ([#7558](https://github.com/scikit-image/scikit-image/pull/7558)).
- Update pre-commit versions ([#7560](https://github.com/scikit-image/scikit-image/pull/7560)).
- Drop Python 3.9 support ([#7561](https://github.com/scikit-image/scikit-image/pull/7561)).
- Update minimum dependencies (SPEC 0) ([#7562](https://github.com/scikit-image/scikit-image/pull/7562)).
- Remove unused PYX files in io/_plugins ([#7557](https://github.com/scikit-image/scikit-image/pull/7557)).
- Support Python 3.13 ([#7565](https://github.com/scikit-image/scikit-image/pull/7565)).
- During deprecation cycles, preserve the value of deprecated parameters that don't have a new parameter as a replacement ([#7552](https://github.com/scikit-image/scikit-image/pull/7552)).
- Fix missing minigalleries by using full names in directives ([#7567](https://github.com/scikit-image/scikit-image/pull/7567)).
- Build Python 3.13 wheels ([#7571](https://github.com/scikit-image/scikit-image/pull/7571)).
- Update TODO ([#7573](https://github.com/scikit-image/scikit-image/pull/7573)).
- Remove deprecated gaussian output parameter ([#7574](https://github.com/scikit-image/scikit-image/pull/7574)).
- Test Py3.13 on windows ([#7578](https://github.com/scikit-image/scikit-image/pull/7578)).
- Update ruff linter / formatter ([#7580](https://github.com/scikit-image/scikit-image/pull/7580)).
- Fix formatting issues ([#7581](https://github.com/scikit-image/scikit-image/pull/7581)).
- CI: bump macos image pin from 12 to 13 ([#7582](https://github.com/scikit-image/scikit-image/pull/7582)).
- Update build dependencies ([#7587](https://github.com/scikit-image/scikit-image/pull/7587)).
- Update minimum supported pyamg ([#7586](https://github.com/scikit-image/scikit-image/pull/7586)).
- Update documentation dependencies ([#7590](https://github.com/scikit-image/scikit-image/pull/7590)).
- Bump `changelist` to v0.5 ([#7601](https://github.com/scikit-image/scikit-image/pull/7601)).
- Pin kaleido to 0.2.1 ([#7612](https://github.com/scikit-image/scikit-image/pull/7612)).
- Update upload-nightly-action ([#7609](https://github.com/scikit-image/scikit-image/pull/7609)).
- Update pillow ([#7615](https://github.com/scikit-image/scikit-image/pull/7615)).
- Remove Python 2.7 cruft ([#7616](https://github.com/scikit-image/scikit-image/pull/7616)).
- Use `intersphinx_registry` package in `conf.py` to keep intersphinx urls up to date. This means that building docs now requires the `intersphinx-registry` package ([#7611](https://github.com/scikit-image/scikit-image/pull/7611)).
- Update build dependencies ([#7614](https://github.com/scikit-image/scikit-image/pull/7614)).
- Update file extension and reformat Markdown file ([#7617](https://github.com/scikit-image/scikit-image/pull/7617)).
- Add forgotten TODO about deprecated `square`, `cube` & `rectangle` ([#7624](https://github.com/scikit-image/scikit-image/pull/7624)).
- Upgrade to spin 0.13 ([#7622](https://github.com/scikit-image/scikit-image/pull/7622)).
- Lazy load legacy imports in `skimage` top module ([#6892](https://github.com/scikit-image/scikit-image/pull/6892)).
- CI pre-commit fix ([#7631](https://github.com/scikit-image/scikit-image/pull/7631)).

## Contributors

30 authors added to this release (alphabetically):

- [@aeisenbarth](https://github.com/aeisenbarth)
- [@FedericoWZhaw](https://github.com/FedericoWZhaw)
- [@jakirkham](https://github.com/jakirkham)
- [@michaelbratsch](https://github.com/michaelbratsch)
- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Aditi Juneja ([@Schefflera-Arboricola](https://github.com/Schefflera-Arboricola))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Brigitta Sipőcz ([@bsipocz](https://github.com/bsipocz))
- Dan Schult ([@dschult](https://github.com/dschult))
- Edgar Andrés Margffoy Tuay ([@andfoy](https://github.com/andfoy))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Erik Welch ([@eriknw](https://github.com/eriknw))
- Gianluca ([@geeanlooca](https://github.com/geeanlooca))
- Gregory Lee ([@grlee77](https://github.com/grlee77))
- Hayato Ikoma ([@hayatoikoma](https://github.com/hayatoikoma))
- Henrik Finsberg ([@finsberg](https://github.com/finsberg))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jordão Bragantini ([@JoOkuma](https://github.com/JoOkuma))
- João Seródio ([@SerodioJ](https://github.com/SerodioJ))
- Kushaan Gupta ([@kushaangupta](https://github.com/kushaangupta))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Loïc Estève ([@lesteve](https://github.com/lesteve))
- M Bussonnier ([@Carreau](https://github.com/Carreau))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Paritosh Dahiya ([@hnhparitosh](https://github.com/hnhparitosh))
- Piyush Amitabh ([@pamitabh](https://github.com/pamitabh))
- Ricky Walsh ([@rickymwalsh](https://github.com/rickymwalsh))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

25 reviewers added to this release (alphabetically):

- [@aeisenbarth](https://github.com/aeisenbarth)
- [@FedericoWZhaw](https://github.com/FedericoWZhaw)
- [@jakirkham](https://github.com/jakirkham)
- [@michaelbratsch](https://github.com/michaelbratsch)
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Brigitta Sipőcz ([@bsipocz](https://github.com/bsipocz))
- Dan Schult ([@dschult](https://github.com/dschult))
- Edgar Andrés Margffoy Tuay ([@andfoy](https://github.com/andfoy))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Gianluca ([@geeanlooca](https://github.com/geeanlooca))
- Gregory Lee ([@grlee77](https://github.com/grlee77))
- Hayato Ikoma ([@hayatoikoma](https://github.com/hayatoikoma))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jordão Bragantini ([@JoOkuma](https://github.com/JoOkuma))
- João Seródio ([@SerodioJ](https://github.com/SerodioJ))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Kushaan Gupta ([@kushaangupta](https://github.com/kushaangupta))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Nathan Goldbaum ([@ngoldbaum](https://github.com/ngoldbaum))
- Piyush Amitabh ([@pamitabh](https://github.com/pamitabh))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.25.0rc2 (2024-12-10)

# scikit-image 0.25.0rc2

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

## New Features

- Add the new Gray-Level Co-occurrence Matrix (GLCM) properties  "mean", "variance", "standard deviation" and "entropy" to  `skimage.feature.texture.graycoprops` ([#7375](https://github.com/scikit-image/scikit-image/pull/7375)).
- Add the new `skimage.morphology.footprint_rectangle` supporting generation of rectangular or hyper-rectangular footprints in one function ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).

## API Changes

- Complete the deprecation of and remove `skimage.feature.plot_matches`. Use `skimage.feature.plot_matched_features` going forward ([#7487](https://github.com/scikit-image/scikit-image/pull/7487)).
- Deprecate `skimage.io.imshow`, `skimage.io.imshow_collection` and `skimage.io.show`. Please use `matplotlib`, `napari`, etc. to visualize images ([#7508](https://github.com/scikit-image/scikit-image/pull/7508)).
- Remove deprecated `skimage.morphology.skeletonize_3d`;  use `skimage.morphology.skeletonize` instead ([#7572](https://github.com/scikit-image/scikit-image/pull/7572)).
- Deprecate `skimage.io` plugin infrastructure ([#7353](https://github.com/scikit-image/scikit-image/pull/7353)).
- Switched to using the `scipy.sparse` array interface. For more details, see the note about the new `scipy.sparse` array interface [here](https://docs.scipy.org/doc/scipy/reference/sparse.html) ([#7576](https://github.com/scikit-image/scikit-image/pull/7576)).
- Deprecate `skimage.morphology.rectangle` in favor of the new function `skimage.morphology.footprint_rectangle` ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).
- Deprecate `skimage.morphology.square` in favor of the new function `skimage.morphology.footprint_rectangle` ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).
- Deprecate `skimage.morphology.cube` in favor of the new function `skimage.morphology.footprint_rectangle` ([#7566](https://github.com/scikit-image/scikit-image/pull/7566)).

## Enhancements

- Improve numerical stability of `skimage.morphology.local_minima` for extremely small floats ([#7534](https://github.com/scikit-image/scikit-image/pull/7534)).
- Allow passing a sequence of colors to the parameter `matches_color` in `skimage.feature.plot_matched_features` ([#7541](https://github.com/scikit-image/scikit-image/pull/7541)).
- Make sure that `skimage.feature.plot_matched_features` uses the same random colors, if `matches_color` isn't provided  explicitly ([#7541](https://github.com/scikit-image/scikit-image/pull/7541)).

## Performance

- `skimage.feature.peak_local_max` will now skip unnecessary distance computations in the case of `min_distance=1`. This results in performance improvements to functions like `skimage.feature.blob_dog`, `skimage.feature.blob_log`,  `skimage.feature.blob_doh` and `skimage.feature.corner_peaks` that call  `peak_local_max` internally ([#7548](https://github.com/scikit-image/scikit-image/pull/7548)).
- In `skimage.featurepeak_local_max`, skip unnecessary check for cases where  `min_distance > 1` is passed ([#7548](https://github.com/scikit-image/scikit-image/pull/7548)).

## Bug Fixes

- Ensure that `skimage.morphology.remove_objects_by_distance` doesn't fail  if the given integer dtype cannot be safely cast to the architecture specific size of `intp`, e.g. on i386 architectures ([#7453](https://github.com/scikit-image/scikit-image/pull/7453)).
- Fix degeneracy in `skimage.draw.ellipsoid_stats` when all semi-axes have the same length ([#7473](https://github.com/scikit-image/scikit-image/pull/7473)).
- Prevent `skimage.morphology.thin` from accidentally  modifying the input image in case it is of dtype uint8 ([#7469](https://github.com/scikit-image/scikit-image/pull/7469)).
- Fix numerical precision error in `skimage.measure.ransac`. In some cases, `ransac` was stopping at the first iteration ([#7065](https://github.com/scikit-image/scikit-image/pull/7065)).
- Fix numerical precision error in `skimage.measure.ransac`;  very small probabilities lead to -0 number of max trials ([#7496](https://github.com/scikit-image/scikit-image/pull/7496)).
- Ensure that `RegionProperties` objects returned by `skimage.measure.regionprops` can be deserialized with pickle ([#7569](https://github.com/scikit-image/scikit-image/pull/7569)).
- Fix the behavior of `skimage.segmentation.watershed` when the markers don't align with local minima by making sure every marker is evaluated before successive pixels ([#7071](https://github.com/scikit-image/scikit-image/pull/7071)).
- Fix edge case where setting `watershed_lines=True` in `skimage.segmentation.watershed` resulted in an incorrect solution ([#7071](https://github.com/scikit-image/scikit-image/pull/7071)).
- Fix dtype promotion in `skimage.segmentation.join_segmentations` if `numpy.uint` is used with NumPy<2 ([#7292](https://github.com/scikit-image/scikit-image/pull/7292)).

## Documentation

- In `skimage.morphology.skeletonize`, clarify the expected image dtypes and how objects of different intensities are handled ([#7456](https://github.com/scikit-image/scikit-image/pull/7456)).
- Fix example section in docstring of `skimage.feature.graycomatrix` ([#7297](https://github.com/scikit-image/scikit-image/pull/7297)).
- Use conda-forge consistently in instructions for setting up the development environment ([#7483](https://github.com/scikit-image/scikit-image/pull/7483)).
- Use new `CITATION.cff` instead of `CITATION.bib` ([#7505](https://github.com/scikit-image/scikit-image/pull/7505)).
- Use correct `spin test --coverage` in contribution guide ([#7515](https://github.com/scikit-image/scikit-image/pull/7515)).
- Tweak advice to new developers; remove AI warning ([#7522](https://github.com/scikit-image/scikit-image/pull/7522)).
- Rework installation instructions ([#7434](https://github.com/scikit-image/scikit-image/pull/7434)).
- Improve the description of the `image` parameter in `skimage.restoration.richardson_lucy` ([#7477](https://github.com/scikit-image/scikit-image/pull/7477)).
- Account for empty arrays when counting segments per contour level in gallery example "Segment human cells (in mitosis)" ([#7551](https://github.com/scikit-image/scikit-image/pull/7551)).
- Fix typo in morphology doc ([#7606](https://github.com/scikit-image/scikit-image/pull/7606)).
- Change type description of parameter `radius` in  `skimage.morphology.ball` from `int` to `float` ([#7627](https://github.com/scikit-image/scikit-image/pull/7627)).

## Infrastructure

- Fix CI tests with minimal dependencies and make dependency resolution more robust ([#7462](https://github.com/scikit-image/scikit-image/pull/7462)).
- Add CI to test scikit-image against free-threaded Python 3.13 ([#7463](https://github.com/scikit-image/scikit-image/pull/7463)).
- Address autosummary.import_cycle warning ([#7486](https://github.com/scikit-image/scikit-image/pull/7486)).
- Temporarily exclude Dask 2024.8.0 to fix CI ([#7493](https://github.com/scikit-image/scikit-image/pull/7493)).
- Uncomment `currentmodule` directive again ([#7492](https://github.com/scikit-image/scikit-image/pull/7492)).
- Add CI to release nightly free-threaded wheels ([#7481](https://github.com/scikit-image/scikit-image/pull/7481)).
- Update deprecated configuration ([#7501](https://github.com/scikit-image/scikit-image/pull/7501)).
- Bump spin version to 0.11 ([#7507](https://github.com/scikit-image/scikit-image/pull/7507)).
- Ensure only a single `type:` label is present in PRs ([#7512](https://github.com/scikit-image/scikit-image/pull/7512)).
- Update pydata-sphinx-theme ([#7511](https://github.com/scikit-image/scikit-image/pull/7511)).
- Fix OpenBLAS `s_cmp` unresolved symbol error, update Emscripten CI testing ([#7525](https://github.com/scikit-image/scikit-image/pull/7525)).
- Render paragraphs in dormant message ([#7549](https://github.com/scikit-image/scikit-image/pull/7549)).
- Build sphinx documentation with parallel jobs ([#7579](https://github.com/scikit-image/scikit-image/pull/7579)).
- Don't check test coverage in CI ([#7594](https://github.com/scikit-image/scikit-image/pull/7594)).
- Explicitly setup conda on macos for wheel building ([#7608](https://github.com/scikit-image/scikit-image/pull/7608)).

## Maintenance

- Verify all artifacts that have been attested by looping over them in CI ([#7447](https://github.com/scikit-image/scikit-image/pull/7447)).
- Update circleci-artifacts-redirector-action that moved to the Scientific Python org ([#7446](https://github.com/scikit-image/scikit-image/pull/7446)).
- Use NumPy 2.0 stable to build packages ([#7451](https://github.com/scikit-image/scikit-image/pull/7451)).
- FIX Use python3 in Meson version script shebang ([#7482](https://github.com/scikit-image/scikit-image/pull/7482)).
- Refactored tests for skeletonize ([#7459](https://github.com/scikit-image/scikit-image/pull/7459)).
- Remove unused and deprecated dependency pytest-runner ([#7495](https://github.com/scikit-image/scikit-image/pull/7495)).
- Exclude imageio 2.35.0 that forces numpy downgrade ([#7502](https://github.com/scikit-image/scikit-image/pull/7502)).
- Don't test thresholding funcs for Dask compatibility ([#7509](https://github.com/scikit-image/scikit-image/pull/7509)).
- Fix build dependency ([#7510](https://github.com/scikit-image/scikit-image/pull/7510)).
- Add sdist check to `spin sdist` ([#7438](https://github.com/scikit-image/scikit-image/pull/7438)).
- Reorder items in TODO list ([#7519](https://github.com/scikit-image/scikit-image/pull/7519)).
- Use `Rotation.from_euler` to compute 3D rotation matrix ([#7503](https://github.com/scikit-image/scikit-image/pull/7503)).
- Update spin (0.12) ([#7532](https://github.com/scikit-image/scikit-image/pull/7532)).
- Import `lazy_loader` as private symbol in top-level namespaces ([#7540](https://github.com/scikit-image/scikit-image/pull/7540)).
- Set -DNPY_NO_DEPRECATED_API=NPY_1_23_API_VERSION on build ([#7538](https://github.com/scikit-image/scikit-image/pull/7538)).
- Update up/download artifact version ([#7545](https://github.com/scikit-image/scikit-image/pull/7545)).
- Don't use deprecated `io.show` and `io.imshow` ([#7556](https://github.com/scikit-image/scikit-image/pull/7556)).
- Hide traceback inside `assert_stacklevel` ([#7558](https://github.com/scikit-image/scikit-image/pull/7558)).
- Update pre-commit versions ([#7560](https://github.com/scikit-image/scikit-image/pull/7560)).
- Drop Python 3.9 support ([#7561](https://github.com/scikit-image/scikit-image/pull/7561)).
- Update minimum dependencies (SPEC 0) ([#7562](https://github.com/scikit-image/scikit-image/pull/7562)).
- Remove unused PYX files in io/_plugins ([#7557](https://github.com/scikit-image/scikit-image/pull/7557)).
- Support Python 3.13 ([#7565](https://github.com/scikit-image/scikit-image/pull/7565)).
- During deprecation cycles, preserve the value of deprecated parameters that don't have a new parameter as a replacement ([#7552](https://github.com/scikit-image/scikit-image/pull/7552)).
- Fix missing minigalleries by using full names in directives ([#7567](https://github.com/scikit-image/scikit-image/pull/7567)).
- Build Python 3.13 wheels ([#7571](https://github.com/scikit-image/scikit-image/pull/7571)).
- Update TODO ([#7573](https://github.com/scikit-image/scikit-image/pull/7573)).
- Remove deprecated gaussian output parameter ([#7574](https://github.com/scikit-image/scikit-image/pull/7574)).
- Test Py3.13 on windows ([#7578](https://github.com/scikit-image/scikit-image/pull/7578)).
- Update ruff linter / formatter ([#7580](https://github.com/scikit-image/scikit-image/pull/7580)).
- Fix formatting issues ([#7581](https://github.com/scikit-image/scikit-image/pull/7581)).
- CI: bump macos image pin from 12 to 13 ([#7582](https://github.com/scikit-image/scikit-image/pull/7582)).
- Update build dependencies ([#7587](https://github.com/scikit-image/scikit-image/pull/7587)).
- Update minimum supported pyamg ([#7586](https://github.com/scikit-image/scikit-image/pull/7586)).
- Update documentation dependencies ([#7590](https://github.com/scikit-image/scikit-image/pull/7590)).
- Bump `changelist` to v0.5 ([#7601](https://github.com/scikit-image/scikit-image/pull/7601)).
- Pin kaleido to 0.2.1 ([#7612](https://github.com/scikit-image/scikit-image/pull/7612)).
- Update upload-nightly-action ([#7609](https://github.com/scikit-image/scikit-image/pull/7609)).
- Update pillow ([#7615](https://github.com/scikit-image/scikit-image/pull/7615)).
- Remove Python 2.7 cruft ([#7616](https://github.com/scikit-image/scikit-image/pull/7616)).
- Use `intersphinx_registry` package in `conf.py` to keep intersphinx urls up to date. This means that building docs now requires the `intersphinx-registry` package ([#7611](https://github.com/scikit-image/scikit-image/pull/7611)).
- Update build dependencies ([#7614](https://github.com/scikit-image/scikit-image/pull/7614)).
- Update file extension and reformat Markdown file ([#7617](https://github.com/scikit-image/scikit-image/pull/7617)).
- Add forgotten TODO about deprecated `square`, `cube` & `rectangle` ([#7624](https://github.com/scikit-image/scikit-image/pull/7624)).
- Upgrade to spin 0.13 ([#7622](https://github.com/scikit-image/scikit-image/pull/7622)).
- Lazy load legacy imports in `skimage` top module ([#6892](https://github.com/scikit-image/scikit-image/pull/6892)).

## Contributors

30 authors added to this release (alphabetically):

- [@aeisenbarth](https://github.com/aeisenbarth)
- [@FedericoWZhaw](https://github.com/FedericoWZhaw)
- [@jakirkham](https://github.com/jakirkham)
- [@michaelbratsch](https://github.com/michaelbratsch)
- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Aditi Juneja ([@Schefflera-Arboricola](https://github.com/Schefflera-Arboricola))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Brigitta Sipőcz ([@bsipocz](https://github.com/bsipocz))
- Dan Schult ([@dschult](https://github.com/dschult))
- Edgar Andrés Margffoy Tuay ([@andfoy](https://github.com/andfoy))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Erik Welch ([@eriknw](https://github.com/eriknw))
- Gianluca ([@geeanlooca](https://github.com/geeanlooca))
- Gregory Lee ([@grlee77](https://github.com/grlee77))
- Hayato Ikoma ([@hayatoikoma](https://github.com/hayatoikoma))
- Henrik Finsberg ([@finsberg](https://github.com/finsberg))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jordão Bragantini ([@JoOkuma](https://github.com/JoOkuma))
- João Seródio ([@SerodioJ](https://github.com/SerodioJ))
- Kushaan Gupta ([@kushaangupta](https://github.com/kushaangupta))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Loïc Estève ([@lesteve](https://github.com/lesteve))
- M Bussonnier ([@Carreau](https://github.com/Carreau))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Paritosh Dahiya ([@hnhparitosh](https://github.com/hnhparitosh))
- Piyush Amitabh ([@pamitabh](https://github.com/pamitabh))
- Ricky Walsh ([@rickymwalsh](https://github.com/rickymwalsh))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

25 reviewers added to this release (alphabetically):

- [@aeisenbarth](https://github.com/aeisenbarth)
- [@FedericoWZhaw](https://github.com/FedericoWZhaw)
- [@jakirkham](https://github.com/jakirkham)
- [@michaelbratsch](https://github.com/michaelbratsch)
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Brigitta Sipőcz ([@bsipocz](https://github.com/bsipocz))
- Dan Schult ([@dschult](https://github.com/dschult))
- Edgar Andrés Margffoy Tuay ([@andfoy](https://github.com/andfoy))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Gianluca ([@geeanlooca](https://github.com/geeanlooca))
- Gregory Lee ([@grlee77](https://github.com/grlee77))
- Hayato Ikoma ([@hayatoikoma](https://github.com/hayatoikoma))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jordão Bragantini ([@JoOkuma](https://github.com/JoOkuma))
- João Seródio ([@SerodioJ](https://github.com/SerodioJ))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Kushaan Gupta ([@kushaangupta](https://github.com/kushaangupta))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Nathan Goldbaum ([@ngoldbaum](https://github.com/ngoldbaum))
- Piyush Amitabh ([@pamitabh](https://github.com/pamitabh))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.25.0rc1 (2024-10-07)

# scikit-image 0.25.0rc1

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

## New Features

- Add the new Grey-Level Co-occurrence Matrix (GLCM) properties  "mean", "variance", "standard deviation" and "entropy" to  `skimage.feature.texture.graycoprops` ([#7375](https://github.com/scikit-image/scikit-image/pull/7375)).

## API Changes

- Complete the deprecation of and remove `skimage.feature.plot_matches`. Use `skimage.feature.plot_matched_features` going forward ([#7487](https://github.com/scikit-image/scikit-image/pull/7487)).
- Deprecate `skimage.io.imshow`, `skimage.io.imshow_collection` and `skimage.io.show`. Please use `matplotlib`, `napari`, etc. to visualize images ([#7508](https://github.com/scikit-image/scikit-image/pull/7508)).

## Enhancements

- Improve numerical stability of `skimage.morphology.local_minima` for extremely small floats ([#7534](https://github.com/scikit-image/scikit-image/pull/7534)).

## Bug Fixes

- Ensure that `skimage.morphology.remove_objects_by_distance` doesn't fail  if the given integer dtype cannot be safely cast to the architecture specific size of `intp`, e.g. on i386 architectures ([#7453](https://github.com/scikit-image/scikit-image/pull/7453)).
- Fix degeneracy in `skimage.draw.ellipsoid_stats` when all semi-axes have the same length ([#7473](https://github.com/scikit-image/scikit-image/pull/7473)).
- Prevent `skimage.morphology.thin` from accidentally  modifying the input image in case it is of dtype uint8 ([#7469](https://github.com/scikit-image/scikit-image/pull/7469)).
- Fix numerical precision error in `skimage.measure.ransac`. In some cases, `ransac` was stopping at the first iteration ([#7065](https://github.com/scikit-image/scikit-image/pull/7065)).
- Fix numerical precision error in `skimage.measure.ransac`;  very small probabilities lead to -0 number of max trials ([#7496](https://github.com/scikit-image/scikit-image/pull/7496)).

## Documentation

- In `skimage.morphology.skeletonize`, clarify the expected image dtypes and how objects of different intensities are handled ([#7456](https://github.com/scikit-image/scikit-image/pull/7456)).
- Fix example section in docstring of `skimage.feature.graycomatrix` ([#7297](https://github.com/scikit-image/scikit-image/pull/7297)).
- Use conda-forge consistently in instructions for setting up the development environment ([#7483](https://github.com/scikit-image/scikit-image/pull/7483)).
- Use new `CITATION.cff` instead of `CITATION.bib` ([#7505](https://github.com/scikit-image/scikit-image/pull/7505)).
- Use correct `spin test --coverage` in contribution guide ([#7515](https://github.com/scikit-image/scikit-image/pull/7515)).
- Tweak advice to new developers; remove AI warning ([#7522](https://github.com/scikit-image/scikit-image/pull/7522)).
- Rework installation instructions ([#7434](https://github.com/scikit-image/scikit-image/pull/7434)).
- Improve the description of the `image` parameter in `skimage.restoration.richardson_lucy` ([#7477](https://github.com/scikit-image/scikit-image/pull/7477)).
- Account for empty arrays when counting segments per contour level in gallery example "Segment human cells (in mitosis)" ([#7551](https://github.com/scikit-image/scikit-image/pull/7551)).

## Infrastructure

- Fix CI tests with minimal dependencies and make dependency resolution more robust ([#7462](https://github.com/scikit-image/scikit-image/pull/7462)).
- Add CI to test scikit-image against free-threaded Python 3.13 ([#7463](https://github.com/scikit-image/scikit-image/pull/7463)).
- Address autosummary.import_cycle warning ([#7486](https://github.com/scikit-image/scikit-image/pull/7486)).
- Temporarily exclude Dask 2024.8.0 to fix CI ([#7493](https://github.com/scikit-image/scikit-image/pull/7493)).
- Uncomment `currentmodule` directive again ([#7492](https://github.com/scikit-image/scikit-image/pull/7492)).
- Add CI to release nightly free-threaded wheels ([#7481](https://github.com/scikit-image/scikit-image/pull/7481)).
- Update deprecated configuration ([#7501](https://github.com/scikit-image/scikit-image/pull/7501)).
- Bump spin version to 0.11 ([#7507](https://github.com/scikit-image/scikit-image/pull/7507)).
- Ensure only a single `type:` label is present in PRs ([#7512](https://github.com/scikit-image/scikit-image/pull/7512)).
- Update pydata-sphinx-theme ([#7511](https://github.com/scikit-image/scikit-image/pull/7511)).
- Fix OpenBLAS `s_cmp` unresolved symbol error, update Emscripten CI testing ([#7525](https://github.com/scikit-image/scikit-image/pull/7525)).

## Maintenance

- Verify all artifacts that have been attested by looping over them in CI ([#7447](https://github.com/scikit-image/scikit-image/pull/7447)).
- Update circleci-artifacts-redirector-action that moved to the Scientific Python org ([#7446](https://github.com/scikit-image/scikit-image/pull/7446)).
- Use NumPy 2.0 stable to build packages ([#7451](https://github.com/scikit-image/scikit-image/pull/7451)).
- FIX Use python3 in Meson version script shebang ([#7482](https://github.com/scikit-image/scikit-image/pull/7482)).
- Refactored tests for skeletonize ([#7459](https://github.com/scikit-image/scikit-image/pull/7459)).
- Remove unused and deprecated dependency pytest-runner ([#7495](https://github.com/scikit-image/scikit-image/pull/7495)).
- Exclude imageio 2.35.0 that forces numpy downgrade ([#7502](https://github.com/scikit-image/scikit-image/pull/7502)).
- Don't test thresholding funcs for Dask compatibility ([#7509](https://github.com/scikit-image/scikit-image/pull/7509)).
- Fix build dependency ([#7510](https://github.com/scikit-image/scikit-image/pull/7510)).
- Add sdist check to `spin sdist` ([#7438](https://github.com/scikit-image/scikit-image/pull/7438)).
- Reorder items in TODO list ([#7519](https://github.com/scikit-image/scikit-image/pull/7519)).
- Use `Rotation.from_euler` to compute 3D rotation matrix ([#7503](https://github.com/scikit-image/scikit-image/pull/7503)).
- Update spin (0.12) ([#7532](https://github.com/scikit-image/scikit-image/pull/7532)).
- Import `lazy_loader` as private symbol in top-level namespaces ([#7540](https://github.com/scikit-image/scikit-image/pull/7540)).
- Set -DNPY_NO_DEPRECATED_API=NPY_1_23_API_VERSION on build ([#7538](https://github.com/scikit-image/scikit-image/pull/7538)).
- Update up/download artifact version ([#7545](https://github.com/scikit-image/scikit-image/pull/7545)).
- Don't use deprecated `io.show` and `io.imshow` ([#7556](https://github.com/scikit-image/scikit-image/pull/7556)).
- Hide traceback inside `assert_stacklevel` ([#7558](https://github.com/scikit-image/scikit-image/pull/7558)).
- Update pre-commit versions ([#7560](https://github.com/scikit-image/scikit-image/pull/7560)).
- Drop Python 3.9 support ([#7561](https://github.com/scikit-image/scikit-image/pull/7561)).
- Update minimum dependencies (SPEC 0) ([#7562](https://github.com/scikit-image/scikit-image/pull/7562)).
- Remove unused PYX files in io/_plugins ([#7557](https://github.com/scikit-image/scikit-image/pull/7557)).
- Support Python 3.13 ([#7565](https://github.com/scikit-image/scikit-image/pull/7565)).
- During deprecation cycles, preserve the value of deprecated parameters that don't have a new parameter as a replacement ([#7552](https://github.com/scikit-image/scikit-image/pull/7552)).
- Fix missing minigalleries by using full names in directives ([#7567](https://github.com/scikit-image/scikit-image/pull/7567)).
- Build Python 3.13 wheels ([#7571](https://github.com/scikit-image/scikit-image/pull/7571)).
- Update TODO ([#7573](https://github.com/scikit-image/scikit-image/pull/7573)).
- Remove deprecated skeletonize_3d ([#7572](https://github.com/scikit-image/scikit-image/pull/7572)).
- Remove deprecated gaussian output parameter ([#7574](https://github.com/scikit-image/scikit-image/pull/7574)).

## Contributors

21 authors added to this release (alphabetically):

- [@FedericoWZhaw](https://github.com/FedericoWZhaw)
- [@jakirkham](https://github.com/jakirkham)
- [@michaelbratsch](https://github.com/michaelbratsch)
- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Brigitta Sipőcz ([@bsipocz](https://github.com/bsipocz))
- Edgar Andrés Margffoy Tuay ([@andfoy](https://github.com/andfoy))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Erik Welch ([@eriknw](https://github.com/eriknw))
- Gianluca ([@geeanlooca](https://github.com/geeanlooca))
- Hayato Ikoma ([@hayatoikoma](https://github.com/hayatoikoma))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- João Seródio ([@SerodioJ](https://github.com/SerodioJ))
- Kushaan Gupta ([@kushaangupta](https://github.com/kushaangupta))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Loïc Estève ([@lesteve](https://github.com/lesteve))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Piyush Amitabh ([@pamitabh](https://github.com/pamitabh))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

20 reviewers added to this release (alphabetically):

- [@FedericoWZhaw](https://github.com/FedericoWZhaw)
- [@jakirkham](https://github.com/jakirkham)
- [@michaelbratsch](https://github.com/michaelbratsch)
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Brigitta Sipőcz ([@bsipocz](https://github.com/bsipocz))
- Edgar Andrés Margffoy Tuay ([@andfoy](https://github.com/andfoy))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Gianluca ([@geeanlooca](https://github.com/geeanlooca))
- Hayato Ikoma ([@hayatoikoma](https://github.com/hayatoikoma))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- João Seródio ([@SerodioJ](https://github.com/SerodioJ))
- Kushaan Gupta ([@kushaangupta](https://github.com/kushaangupta))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Nathan Goldbaum ([@ngoldbaum](https://github.com/ngoldbaum))
- Piyush Amitabh ([@pamitabh](https://github.com/pamitabh))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.25.0rc0 (2024-10-06)

No notes available

v0.24.0 (2024-06-18)

# scikit-image 0.24.0

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

## Highlights

- Add new class `skimage.transform.ThinPlateSplineTransform`, which can estimate and model non-linear transforms with thin-plate splines and allows image warping with `skimage.transform.warp` ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).

## New Features

- Add new class `skimage.transform.ThinPlateSplineTransform`, which can estimate and model non-linear transforms with thin-plate splines and allows image warping with `skimage.transform.warp` ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).
- Add `skimage.morphology.remove_objects_by_distance`, which removes labeled objects, ordered by size (default), until the remaining objects are a given distance apart ([#4165](https://github.com/scikit-image/scikit-image/pull/4165)).

## Performance

- In `skimage.feature.corner_fast`, test four directions earlier, which should more than half the computation time for most cases ([#7394](https://github.com/scikit-image/scikit-image/pull/7394)).

## Documentation

- Remove obsolete instruction about documenting changes ([#7321](https://github.com/scikit-image/scikit-image/pull/7321)).
- Clarify description of `data_range` parameter in `skimage.metrics.structural_similarity` ([#7345](https://github.com/scikit-image/scikit-image/pull/7345)).
- Update release process notes ([#7402](https://github.com/scikit-image/scikit-image/pull/7402)).
- Fix typo in docstring of `skimage.measure.regionprops` ([#7405](https://github.com/scikit-image/scikit-image/pull/7405)).
- Fix typos in `skimage.measure.find_contours` ([#7411](https://github.com/scikit-image/scikit-image/pull/7411)).
- Add algorithmic complexity description + suggested alternatives to `skimage.restoration.rolling_ball` docstring ([#7424](https://github.com/scikit-image/scikit-image/pull/7424)).
- Remove ineffective PR contribution clause ([#7429](https://github.com/scikit-image/scikit-image/pull/7429)).
- Clarify objection period for lazy consensus in SKIP 1 ([#7020](https://github.com/scikit-image/scikit-image/pull/7020)).
- Add a new gallery example "Use thin-plate splines for image warping" ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).
- Add a new gallery example on "Removing objects" based on their size or distance ([#4165](https://github.com/scikit-image/scikit-image/pull/4165)).

## Infrastructure

- Escape user-controlled variables in GA workflow ([#7415](https://github.com/scikit-image/scikit-image/pull/7415)).
- Add generation of GitHub artifact attestations to built sdist and wheels before upload to PyPI ([#7427](https://github.com/scikit-image/scikit-image/pull/7427)).
- For publishing actions use the full length commit SHA ([#7433](https://github.com/scikit-image/scikit-image/pull/7433)).
- Be mindful of resources by canceling in-progress workflows ([#7436](https://github.com/scikit-image/scikit-image/pull/7436)).
- Add out-of-tree Pyodide builds in CI for `scikit-image` ([#7350](https://github.com/scikit-image/scikit-image/pull/7350)).

## Maintenance

- Replace deprecated nose style setup/teardown with autouse fixtures ([#7343](https://github.com/scikit-image/scikit-image/pull/7343)).
- Temporarily pin macos-12 runner in CI ([#7408](https://github.com/scikit-image/scikit-image/pull/7408)).
- Fix NumPy2 dtype promotion issues in pywt dependent code ([#7414](https://github.com/scikit-image/scikit-image/pull/7414)).
- In `skimage.util.compare_images`, deprecate the parameter `image2`. Instead use `image0`, `image1` to pass the compared images. Furthermore, all other parameters will be turned into keyword-only parameters once the deprecation is complete ([#7322](https://github.com/scikit-image/scikit-image/pull/7322)).
- Add support back for Python 3.9 to enhance compatibility with Numpy 2 ([#7412](https://github.com/scikit-image/scikit-image/pull/7412)).
- Disable ruff/pyupgrade rule UP038 ([#7430](https://github.com/scikit-image/scikit-image/pull/7430)).
- Stop verifying wheel attestations temporarily ([#7444](https://github.com/scikit-image/scikit-image/pull/7444)).

## Contributors

13 authors added to this release (alphabetically):

- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Curtis Rueden ([@ctrueden](https://github.com/ctrueden))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Pang ([@lartpang](https://github.com/lartpang))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- 武士风度的牛 ([@spdfghi](https://github.com/spdfghi))

15 reviewers added to this release (alphabetically):

- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Curtis Rueden ([@ctrueden](https://github.com/ctrueden))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Riadh Fezzani ([@rfezzani](https://github.com/rfezzani))
- Sebastian Berg ([@seberg](https://github.com/seberg))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- Tyler Reddy ([@tylerjereddy](https://github.com/tylerjereddy))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.24.0rc1 (2024-06-16)

# scikit-image 0.24.0rc1

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

## Highlights

- Add new class `skimage.transform.ThinPlateSplineTransform`, which can estimate and model non-linear transforms with thin-plate splines and allows image warping with `skimage.transform.warp` ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).

## New Features

- Add new class `skimage.transform.ThinPlateSplineTransform`, which can estimate and model non-linear transforms with thin-plate splines and allows image warping with `skimage.transform.warp` ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).
- Add `skimage.morphology.remove_objects_by_distance`, which removes labeled objects, ordered by size (default), until the remaining objects are a given distance apart ([#4165](https://github.com/scikit-image/scikit-image/pull/4165)).

## Performance

- In `skimage.feature.corner_fast`, test four directions earlier, which should more than half the computation time for most cases ([#7394](https://github.com/scikit-image/scikit-image/pull/7394)).

## Documentation

- Remove obsolete instruction about documenting changes ([#7321](https://github.com/scikit-image/scikit-image/pull/7321)).
- Clarify description of `data_range` parameter in `skimage.metrics.structural_similarity` ([#7345](https://github.com/scikit-image/scikit-image/pull/7345)).
- Update release process notes ([#7402](https://github.com/scikit-image/scikit-image/pull/7402)).
- Fix typo in docstring of `skimage.measure.regionprops` ([#7405](https://github.com/scikit-image/scikit-image/pull/7405)).
- Fix typos in `skimage.measure.find_contours` ([#7411](https://github.com/scikit-image/scikit-image/pull/7411)).
- Add algorithmic complexity description + suggested alternatives to `skimage.restoration.rolling_ball` docstring ([#7424](https://github.com/scikit-image/scikit-image/pull/7424)).
- Remove ineffective PR contribution clause ([#7429](https://github.com/scikit-image/scikit-image/pull/7429)).
- Clarify objection period for lazy consensus in SKIP 1 ([#7020](https://github.com/scikit-image/scikit-image/pull/7020)).
- Add a new gallery example "Use thin-plate splines for image warping" ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).
- Add a new gallery example on "Removing objects" based on their size or distance ([#4165](https://github.com/scikit-image/scikit-image/pull/4165)).

## Infrastructure

- Escape user-controlled variables in GA workflow ([#7415](https://github.com/scikit-image/scikit-image/pull/7415)).
- Add generation of GitHub artifact attestations to built sdist and wheels before upload to PyPI ([#7427](https://github.com/scikit-image/scikit-image/pull/7427)).
- For publishing actions use the full length commit SHA ([#7433](https://github.com/scikit-image/scikit-image/pull/7433)).
- Be mindful of resources by canceling in-progress workflows ([#7436](https://github.com/scikit-image/scikit-image/pull/7436)).
- Add out-of-tree Pyodide builds in CI for `scikit-image` ([#7350](https://github.com/scikit-image/scikit-image/pull/7350)).

## Maintenance

- Replace deprecated nose style setup/teardown with autouse fixtures ([#7343](https://github.com/scikit-image/scikit-image/pull/7343)).
- Temporarily pin macos-12 runner in CI ([#7408](https://github.com/scikit-image/scikit-image/pull/7408)).
- Fix NumPy2 dtype promotion issues in pywt dependent code ([#7414](https://github.com/scikit-image/scikit-image/pull/7414)).
- In `skimage.util.compare_images`, deprecate the parameter `image2`. Instead use `image0`, `image1` to pass the compared images. Furthermore, all other parameters will be turned into keyword-only parameters once the deprecation is complete ([#7322](https://github.com/scikit-image/scikit-image/pull/7322)).
- Add support back for Python 3.9 to enhance compatibility with Numpy 2 ([#7412](https://github.com/scikit-image/scikit-image/pull/7412)).
- Disable ruff/pyupgrade rule UP038 ([#7430](https://github.com/scikit-image/scikit-image/pull/7430)).

## Contributors

13 authors added to this release (alphabetically):

- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Curtis Rueden ([@ctrueden](https://github.com/ctrueden))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Pang ([@lartpang](https://github.com/lartpang))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- 武士风度的牛 ([@spdfghi](https://github.com/spdfghi))

15 reviewers added to this release (alphabetically):

- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Curtis Rueden ([@ctrueden](https://github.com/ctrueden))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Riadh Fezzani ([@rfezzani](https://github.com/rfezzani))
- Sebastian Berg ([@seberg](https://github.com/seberg))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- Tyler Reddy ([@tylerjereddy](https://github.com/tylerjereddy))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.24.0rc0 (2024-06-15)

# scikit-image 0.24.0rc0

We're happy to announce the release of scikit-image 0.24.0rc0!

## Highlights

- Add new class `skimage.transform.ThinPlateSplineTransform`, which can estimate and model non-linear transforms with thin-plate splines and allows image warping with `skimage.transform.warp` ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).

## New Features

- Add new class `skimage.transform.ThinPlateSplineTransform`, which can estimate and model non-linear transforms with thin-plate splines and allows image warping with `skimage.transform.warp` ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).
- Add `skimage.morphology.remove_objects_by_distance`, which removes labeled objects, ordered by size (default), until the remaining objects are a given distance apart ([#4165](https://github.com/scikit-image/scikit-image/pull/4165)).

## Performance

- In `skimage.feature.corner_fast`, test four directions earlier, which should more than half the computation time for most cases ([#7394](https://github.com/scikit-image/scikit-image/pull/7394)).

## Documentation

- Remove obsolete instruction about documenting changes ([#7321](https://github.com/scikit-image/scikit-image/pull/7321)).
- Clarify description of `data_range` parameter in `skimage.metrics.structural_similarity` ([#7345](https://github.com/scikit-image/scikit-image/pull/7345)).
- Update release process notes ([#7402](https://github.com/scikit-image/scikit-image/pull/7402)).
- Fix typo in docstring of `skimage.measure.regionprops` ([#7405](https://github.com/scikit-image/scikit-image/pull/7405)).
- Fix typos in `skimage.measure.find_contours` ([#7411](https://github.com/scikit-image/scikit-image/pull/7411)).
- Add algorithmic complexity description + suggested alternatives to `skimage.restoration.rolling_ball` docstring ([#7424](https://github.com/scikit-image/scikit-image/pull/7424)).
- Remove ineffective PR contribution clause ([#7429](https://github.com/scikit-image/scikit-image/pull/7429)).
- Clarify objection period for lazy consensus in SKIP 1 ([#7020](https://github.com/scikit-image/scikit-image/pull/7020)).
- Add a new gallery example "Use thin-plate splines for image warping" ([#7040](https://github.com/scikit-image/scikit-image/pull/7040)).
- Add a new gallery example on "Removing objects" based on their size or distance ([#4165](https://github.com/scikit-image/scikit-image/pull/4165)).

## Infrastructure

- Escape user-controlled variables in GA workflow ([#7415](https://github.com/scikit-image/scikit-image/pull/7415)).
- Add generation of GitHub artifact attestations to built sdist and wheels before upload to PyPI ([#7427](https://github.com/scikit-image/scikit-image/pull/7427)).
- For publishing actions use the full length commit SHA ([#7433](https://github.com/scikit-image/scikit-image/pull/7433)).
- Be mindful of resources by canceling in-progress workflows ([#7436](https://github.com/scikit-image/scikit-image/pull/7436)).
- Add out-of-tree Pyodide builds in CI for `scikit-image` ([#7350](https://github.com/scikit-image/scikit-image/pull/7350)).

## Maintenance

- Replace deprecated nose style setup/teardown with autouse fixtures ([#7343](https://github.com/scikit-image/scikit-image/pull/7343)).
- Temporarily pin macos-12 runner in CI ([#7408](https://github.com/scikit-image/scikit-image/pull/7408)).
- Fix NumPy2 dtype promotion issues in pywt dependent code ([#7414](https://github.com/scikit-image/scikit-image/pull/7414)).
- In `skimage.util.compare_images`, deprecate the parameter `image2`. Instead use `image0`, `image1` to pass the compared images. Furthermore, all other parameters will be turned into keyword-only parameters once the deprecation is complete ([#7322](https://github.com/scikit-image/scikit-image/pull/7322)).
- Add support back for Python 3.9 to enhance compatibility with Numpy 2 ([#7412](https://github.com/scikit-image/scikit-image/pull/7412)).
- Disable ruff/pyupgrade rule UP038 ([#7430](https://github.com/scikit-image/scikit-image/pull/7430)).

## Contributors

13 authors added to this release (alphabetically):

- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Curtis Rueden ([@ctrueden](https://github.com/ctrueden))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Pang ([@lartpang](https://github.com/lartpang))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- 武士风度的牛 ([@spdfghi](https://github.com/spdfghi))

15 reviewers added to this release (alphabetically):

- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Agriya Khetarpal ([@agriyakhetarpal](https://github.com/agriyakhetarpal))
- Curtis Rueden ([@ctrueden](https://github.com/ctrueden))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Ralf Gommers ([@rgommers](https://github.com/rgommers))
- Riadh Fezzani ([@rfezzani](https://github.com/rfezzani))
- Sebastian Berg ([@seberg](https://github.com/seberg))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- Tyler Reddy ([@tylerjereddy](https://github.com/tylerjereddy))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.23.2 (2024-04-20)

# scikit-image 0.23.2

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

## Bug Fixes

- Make sure `skimage.util.img_as_ubyte` supports the edge case where `dtype('uint64').type` of the provided image is `np.ulonglong` instead of `np.uint64` ([#7392](https://github.com/scikit-image/scikit-image/pull/7392)).

## Documentation

- Add date to 0.23.1 release notes ([#7384](https://github.com/scikit-image/scikit-image/pull/7384)).
- Fix docstring of `connectivity` parameter in `skimage.segmentation.watershed` ([#7360](https://github.com/scikit-image/scikit-image/pull/7360)).

## Infrastructure

- Ignore Sphinx warning about unpickable cache ([#7400](https://github.com/scikit-image/scikit-image/pull/7400)).
- Simplify instructions on changelist in PR template ([#7401](https://github.com/scikit-image/scikit-image/pull/7401)).

## Maintenance

- Use `numpy.inf` instead of deprecated `numpy.infty` ([#7386](https://github.com/scikit-image/scikit-image/pull/7386)).
- Update Ruff config ([#7387](https://github.com/scikit-image/scikit-image/pull/7387)).
- Update matrix and names of Azure pipelines configuration ([#7390](https://github.com/scikit-image/scikit-image/pull/7390)).
- Use upload- and download-artifact v4 ([#7389](https://github.com/scikit-image/scikit-image/pull/7389)).
- Ignore arch specific cast warnings originating from `astype` in tests ([#7393](https://github.com/scikit-image/scikit-image/pull/7393)).
- Update link to numpydoc example.py ([#7395](https://github.com/scikit-image/scikit-image/pull/7395)).

## Contributors

4 authors added to this release (alphabetically):

- [@pitkajuh](https://github.com/pitkajuh)
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))

4 reviewers added to this release (alphabetically):

- Egor Panfilov ([@soupault](https://github.com/soupault))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.23.2rc1 (2024-04-14)

# scikit-image 0.23.2rc1

> [!IMPORTANT]
> This is a release candidate for a minor patch release!

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

## Bug Fixes

- Make sure `skimage.util.img_as_ubyte` supports the edge case where `dtype('uint64').type` of the provided image is `np.ulonglong` instead of `np.uint64` ([#7392](https://github.com/scikit-image/scikit-image/pull/7392)).

## Documentation

- Add date to 0.23.1 release notes ([#7384](https://github.com/scikit-image/scikit-image/pull/7384)).
- Fix docstring of `connectivity` parameter in `skimage.segmentation.watershed` ([#7360](https://github.com/scikit-image/scikit-image/pull/7360)).

## Maintenance

- Use `numpy.inf` instead of deprecated `numpy.infty` ([#7386](https://github.com/scikit-image/scikit-image/pull/7386)).
- Update Ruff config ([#7387](https://github.com/scikit-image/scikit-image/pull/7387)).
- Update matrix and names of Azure pipelines configuration ([#7390](https://github.com/scikit-image/scikit-image/pull/7390)).
- Use upload- and download-artifact v4 ([#7389](https://github.com/scikit-image/scikit-image/pull/7389)).
- Ignore arch specific cast warnings originating from `astype` in tests ([#7393](https://github.com/scikit-image/scikit-image/pull/7393)).
- Update link to numpydoc example.py ([#7395](https://github.com/scikit-image/scikit-image/pull/7395)).

## Contributors

4 authors added to this release (alphabetically):

- [@pitkajuh](https://github.com/pitkajuh)
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))

3 reviewers added to this release (alphabetically):

- Egor Panfilov ([@soupault](https://github.com/soupault))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Lars Grüter ([@lagru](https://github.com/lagru))

_These lists are automatically generated, and may not be complete or may contain
duplicates._

v0.23.1 (2024-04-10)

# scikit-image 0.23.1

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

> [!NOTE]
> Due to an issue with the CI system scikit-image 0.23.0 was never released.
> This release is identical to what 0.23.0 would have been other than the CI fix and the version number.

## Highlights

- Ensure `skimage.morphology.closing` and `skimage.morphology.opening` are extensive and anti-extensive, respectively, if the footprint is not mirror symmetric ([#6695](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6695)).
- 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](https://github.com/scikit-image/scikit-image/pull/6695)).
- Speedup `skimage.util.map_array` by parallelization with Cython's `prange` ([#7266](https://github.com/scikit-image/scikit-image/pull/7266)).

## New Features

- Add new `intensity_std` property to `skimage.measure.regionprops` which computes the standard deviation of the intensity in a region ([#6712](https://github.com/scikit-image/scikit-image/pull/6712)).
- 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](https://github.com/scikit-image/scikit-image/pull/6695)).
- Add functions `mirror_footprint` and `pad_footprint` to `skimage.morphology` ([#6695](https://github.com/scikit-image/scikit-image/pull/6695)).
- 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](https://github.com/scikit-image/scikit-image/pull/6695)).
- Add new parameter `spacing` to `segmentation.expand_labels` to support anisotropic images ([#7080](https://github.com/scikit-image/scikit-image/pull/7080)).

## API Changes

- Drop support for Python 3.9 ([#7217](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7095)).
- Deprecate function `skimage.feature.plot_matches` in favor of `skimage.feature.plot_matched_features` ([#7255](https://github.com/scikit-image/scikit-image/pull/7255)).
- Deprecate `skimage.morphology.skeletonize_3d` in favor of just `skimage.morphology.skeletonize` ([#7094](https://github.com/scikit-image/scikit-image/pull/7094)).
- Deprecate parameter `output` in `skimage.filters.gaussian`; use `out` instead ([#7225](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7320)).

## Performance

- Add lazy loading to `skimage.metrics` module ([#7211](https://github.com/scikit-image/scikit-image/pull/7211)).
- Speedup `skimage.util.map_array` by parallelization with Cython's `prange` ([#7266](https://github.com/scikit-image/scikit-image/pull/7266)).

## Bug Fixes

- Add exception to avoid surprising result when image is too small for the given parameters in `skimage.feature.hog` ([#7153](https://github.com/scikit-image/scikit-image/pull/7153)).
- Ensure `skimage.morphology.closing` and `skimage.morphology.opening` are extensive and anti-extensive, respectively, if the footprint is not mirror symmetric ([#6695](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7259)).
- Fix logic in `skimage.graph.pixel_graph` which raised a `TypeError` when the parameter `edge_function` was provided without a `mask` ([#7310](https://github.com/scikit-image/scikit-image/pull/7310)).
- Ensure cache stays empty when `cache=False` is passed to `skimage.measure.regionprops` ([#7333](https://github.com/scikit-image/scikit-image/pull/7333)).

## Documentation

- Update instructions for updating dev environment ([#7160](https://github.com/scikit-image/scikit-image/pull/7160)).
- Make titles in RAG gallery examples more explicit ([#7202](https://github.com/scikit-image/scikit-image/pull/7202)).
- Add docstring to `skimage.graph` module ([#7192](https://github.com/scikit-image/scikit-image/pull/7192)).
- Use consistent notation for array dimensions in the docstrings ([#3031](https://github.com/scikit-image/scikit-image/pull/3031)).
- Specify default markers in watershed docstring ([#7154](https://github.com/scikit-image/scikit-image/pull/7154)).
- Stop HTML documentation from intercepting left and right-arrow keys to improve keyboard accessibility ([#7226](https://github.com/scikit-image/scikit-image/pull/7226)).
- Fix reference formatting for nitpicky sphinx ([#7228](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7159)).
- Fix broken function calls and syntax issues in user guide ([#7234](https://github.com/scikit-image/scikit-image/pull/7234)).
- Use correct default mode in docstring of `skimage.transform.swirl` ([#7241](https://github.com/scikit-image/scikit-image/pull/7241)).
- Add missing documentation about spacing parameter in `moments_normalized` ([#7248](https://github.com/scikit-image/scikit-image/pull/7248)).
- Update docstring & example in the hough_ellipse transform ([#6893](https://github.com/scikit-image/scikit-image/pull/6893)).
- Point binder tag/branch to commit corresponding to docs/release ([#7252](https://github.com/scikit-image/scikit-image/pull/7252)).
- Add example to FundamentalMatrixTransform class ([#6863](https://github.com/scikit-image/scikit-image/pull/6863)).
- Adds explanation of what the optional dependency on Matplotlib offers to the install instructions ([#7286](https://github.com/scikit-image/scikit-image/pull/7286)).
- Use correct symbol θ for tightness in the docstring of  `skimage.registration.optical_flow_tvl1` ([#7314](https://github.com/scikit-image/scikit-image/pull/7314)).
- The description of the parameter cval is modified in "int or float". cval is a numerical value not a string ([#7319](https://github.com/scikit-image/scikit-image/pull/7319)).
- Remove obsolete instruction about documenting changes ([#7321](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7324)).
- Create SECURITY.md ([#7230](https://github.com/scikit-image/scikit-image/pull/7230)).
- Remove deprecated parameter `coordinates` from docstring  example of `skimage.segmentation.active_contour` ([#7329](https://github.com/scikit-image/scikit-image/pull/7329)).
- Include dates in release note headings ([#7269](https://github.com/scikit-image/scikit-image/pull/7269)).
- Update description of how to document pull requests for inclusion in the release notes ([#7267](https://github.com/scikit-image/scikit-image/pull/7267)).
- Clarify description of `data_range` parameter in `skimage.metrics.structural_similarity` ([#7345](https://github.com/scikit-image/scikit-image/pull/7345)).
- Use  object-oriented Matplotlib style in longer gallery examples and demonstrations (doc/examples/applications) ([#7346](https://github.com/scikit-image/scikit-image/pull/7346)).
- In the gallery example on segmenting human cells (in mitosis), include the border when generating basin markers for watershed ([#7362](https://github.com/scikit-image/scikit-image/pull/7362)).
- Add missing minus sign in docstring of `skimage.transform.EuclideanTransform` ([#7097](https://github.com/scikit-image/scikit-image/pull/7097)).

## Infrastructure

- Update wording on the stale bot to assume the core team dropped the ball ([#7196](https://github.com/scikit-image/scikit-image/pull/7196)).
- Update Azure job name following the drop of Python 3.9 ([#7218](https://github.com/scikit-image/scikit-image/pull/7218)).
- Schedule nightly wheel builds at uncommon time ([#7254](https://github.com/scikit-image/scikit-image/pull/7254)).
- Build nightly wheels with nightly NumPy 2.0 ([#7251](https://github.com/scikit-image/scikit-image/pull/7251)).
- Use pytest-doctestplus instead of classic pytest-doctest ([#7289](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7325)).
- Add `assert_stacklevel` helper to check stacklevel of captured warnings ([#7294](https://github.com/scikit-image/scikit-image/pull/7294)).
- Exclude `pre-commit[bot]` from changelist's contributor list ([#7358](https://github.com/scikit-image/scikit-image/pull/7358)).

## Maintenance

- Remove outdated & duplicate "preferred" field in `version_switcher.json` ([#7184](https://github.com/scikit-image/scikit-image/pull/7184)).
- Upgrade to spin 0.7 ([#7168](https://github.com/scikit-image/scikit-image/pull/7168)).
- Do not compare types, use isinstance ([#7186](https://github.com/scikit-image/scikit-image/pull/7186)).
- [pre-commit.ci] pre-commit autoupdate ([#7181](https://github.com/scikit-image/scikit-image/pull/7181)).
- Increase tolerance for moments test for 32 bit floats ([#7188](https://github.com/scikit-image/scikit-image/pull/7188)).
- Temporarily pin Cython to <3.0.3 until CI is fixed ([#7189](https://github.com/scikit-image/scikit-image/pull/7189)).
- Remove obsolete meson instructions ([#7193](https://github.com/scikit-image/scikit-image/pull/7193)).
- Temporarily pin Cython to <3.0.3 until CI is fixed, take 2 ([#7201](https://github.com/scikit-image/scikit-image/pull/7201)).
- Fix chocolatey ([#7200](https://github.com/scikit-image/scikit-image/pull/7200)).
- Pin Pillow to <10.1.0 until incompatibility with imageio is fixed ([#7208](https://github.com/scikit-image/scikit-image/pull/7208)).
- Use Black ([#7197](https://github.com/scikit-image/scikit-image/pull/7197)).
- Apply black to `_hog.py` after previous merge lacking black ([#7215](https://github.com/scikit-image/scikit-image/pull/7215)).
- Unpin Cython after release of Cython 3.0.4 ([#7214](https://github.com/scikit-image/scikit-image/pull/7214)).
- [pre-commit.ci] pre-commit autoupdate ([#7236](https://github.com/scikit-image/scikit-image/pull/7236)).
- Cleanup for Python 3.12 ([#7173](https://github.com/scikit-image/scikit-image/pull/7173)).
- Make Python 3.12 default CI Python ([#7244](https://github.com/scikit-image/scikit-image/pull/7244)).
- Add explicit `noexcept` to address Cython 3.0 warnings ([#7250](https://github.com/scikit-image/scikit-image/pull/7250)).
- Update imageio to fix Pillow incompatibility ([#7245](https://github.com/scikit-image/scikit-image/pull/7245)).
- Upgrade docker/setup-qemu-action to v3 ([#7134](https://github.com/scikit-image/scikit-image/pull/7134)).
- Fix warningfilter for deprecation in SciPy 1.12.0rc1 ([#7275](https://github.com/scikit-image/scikit-image/pull/7275)).
- Update to numpy>=1.23 and matplotlib>=3.6 according to SPEC 0 ([#7284](https://github.com/scikit-image/scikit-image/pull/7284)).
- Add new `deprecate_parameter` helper ([#7256](https://github.com/scikit-image/scikit-image/pull/7256)).
- Update meson and Cython ([#7283](https://github.com/scikit-image/scikit-image/pull/7283)).
- Handle floating point warning for empty images in `skimage.registration.phase_cross_correlation` ([#7287](https://github.com/scikit-image/scikit-image/pull/7287)).
- Update spin (0.8) ([#7285](https://github.com/scikit-image/scikit-image/pull/7285)).
- Complete deprecations that were scheduled for our 0.23 release.  Remove now unused `deprecate_kwarg` and `remove_arg`; they are  entirely succeeded by `deprecate_parameter` ([#7290](https://github.com/scikit-image/scikit-image/pull/7290)).
- For security best practices, use the scientific-python/upload-nightly-action GitHub Action from known commit shas that correspond to tagged releases. These can be updated automatically via Dependabot ([#7306](https://github.com/scikit-image/scikit-image/pull/7306)).
- Update pre-commits repos ([#7303](https://github.com/scikit-image/scikit-image/pull/7303)).
- The test suite can now be run without `numpydoc` installed ([#7307](https://github.com/scikit-image/scikit-image/pull/7307)).
- Deal with parallel write warning from Pydata theme ([#7311](https://github.com/scikit-image/scikit-image/pull/7311)).
- Test nightly wheel build with NumPy 2.0 ([#7288](https://github.com/scikit-image/scikit-image/pull/7288)).
- Make it clear that funcs in `_optical_flow_utils` are private ([#7328](https://github.com/scikit-image/scikit-image/pull/7328)).
- Update dependencies (spec 0) ([#7335](https://github.com/scikit-image/scikit-image/pull/7335)).
- Follow-up cleaning & fixes for compatibility with NumPy 1 & 2 ([#7326](https://github.com/scikit-image/scikit-image/pull/7326)).
- Replace ignored teardown with autouse fixture in `test_fits.py` ([#7340](https://github.com/scikit-image/scikit-image/pull/7340)).
- Address new copy semantics & broadcasting in `np.solve` in NumPy 2 ([#7341](https://github.com/scikit-image/scikit-image/pull/7341)).
- Ignore table of execution times by Sphinx gallery ([#7327](https://github.com/scikit-image/scikit-image/pull/7327)).
- Allow a very small floating point tolerance for pearson test ([#7356](https://github.com/scikit-image/scikit-image/pull/7356)).
- Update numpydoc to version 1.7 ([#7355](https://github.com/scikit-image/scikit-image/pull/7355)).
- [pre-commit.ci] pre-commit autoupdate ([#7365](https://github.com/scikit-image/scikit-image/pull/7365)).
- Simplify warning filters in test suite ([#7349](https://github.com/scikit-image/scikit-image/pull/7349)).
- Build against NumPy >=2.0.0rc1 ([#7367](https://github.com/scikit-image/scikit-image/pull/7367)).
- Remove `ensure_python_version` function ([#7370](https://github.com/scikit-image/scikit-image/pull/7370)).
- Update GitHub actions to `setup-python@v5`, `cache@v4`, `upload-artifact@v4`,  and `download-artifact@v4` ([#7368](https://github.com/scikit-image/scikit-image/pull/7368)).
- Update lazyloader to v0.4 ([#7373](https://github.com/scikit-image/scikit-image/pull/7373)).

## Contributors

29 authors added to this release (alphabetically):

- [@GParolini](https://github.com/GParolini)
- [@tokiAi](https://github.com/tokiAi)
- Adrien Foucart ([@adfoucart](https://github.com/adfoucart))
- Anam Fatima ([@anamfatima1304](https://github.com/anamfatima1304))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Ben Harvie ([@benharvie](https://github.com/benharvie))
- Christian Clauss ([@cclauss](https://github.com/cclauss))
- Cris Luengo ([@crisluengo](https://github.com/crisluengo))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Grzegorz Bokota ([@Czaki](https://github.com/Czaki))
- Jan Lebert ([@sitic](https://github.com/sitic))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jeremy Farrell ([@farrjere](https://github.com/farrjere))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Mao Nishino ([@mao1756](https://github.com/mao1756))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Matthew Vine ([@MattTheCuber](https://github.com/MattTheCuber))
- Maxime Corbé ([@Maxime-corbe](https://github.com/Maxime-corbe))
- Michał Górny ([@mgorny](https://github.com/mgorny))
- Neil Shephard ([@ns-rse](https://github.com/ns-rse))
- Ole Streicher ([@olebole](https://github.com/olebole))
- Peter Suter ([@petsuter](https://github.com/petsuter))
- Robert Haase ([@haesleinhuepf](https://github.com/haesleinhuepf))
- Sean McKinney ([@jouyun](https://github.com/jouyun))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- vfdev ([@vfdev-5](https://github.com/vfdev-5))

21 reviewers added to this release (alphabetically):

- [@GParolini](https://github.com/GParolini)
- Adrien Foucart ([@adfoucart](https://github.com/adfoucart))
- Anam Fatima ([@anamfatima1304](https://github.com/anamfatima1304))
- Ben Harvie ([@benharvie](https://github.com/benharvie))
- Christian Clauss ([@cclauss](https://github.com/cclauss))
- Cris Luengo ([@crisluengo](https://github.com/crisluengo))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Grzegorz Bokota ([@Czaki](https://github.com/Czaki))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jeremy Farrell ([@farrjere](https://github.com/farrjere))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- M Bussonnier ([@Carreau](https://github.com/Carreau))
- Mao Nishino ([@mao1756](https://github.com/mao1756))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Maxime Corbé ([@Maxime-corbe](https://github.com/Maxime-corbe))
- P. L. Lim ([@pllim](https://github.com/pllim))
- Peter Suter ([@petsuter](https://github.com/petsuter))
- Sebastian Berg ([@seberg](https://github.com/seberg))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.23.0 (2024-04-10)

> [!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 (2024-04-04)

# 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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6695)).
- Add functions `mirror_footprint` and `pad_footprint` to `skimage.morphology` ([#6695](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6695)).
- Add new parameter `spacing` to `segmentation.expand_labels` to support anisotropic images ([#7080](https://github.com/scikit-image/scikit-image/pull/7080)).

## API Changes

- Drop support for Python 3.9 ([#7217](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7095)).
- Deprecate function `skimage.feature.plot_matches` in favor of `skimage.feature.plot_matched_features` ([#7255](https://github.com/scikit-image/scikit-image/pull/7255)).
- Deprecate `skimage.morphology.skeletonize_3d` in favor of just skimage.morphology.skeletonize` ([#7094](https://github.com/scikit-image/scikit-image/pull/7094)).
- Deprecate parameter `output` in `skimage.filters.gaussian`; use `out` instead ([#7225](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7320)).

## Performance

- Add lazy loading to `skimage.metrics` module ([#7211](https://github.com/scikit-image/scikit-image/pull/7211)).
- Speedup `skimage.util.map_array` by parallelization with Cython's `prange` ([#7266](https://github.com/scikit-image/scikit-image/pull/7266)).

## Bug Fixes

- Add exception to avoid surprising result when image is too small for the given parameters in `skimage.feature.hog` ([#7153](https://github.com/scikit-image/scikit-image/pull/7153)).
- Ensure `skimage.morphology.closing` and `skimage.morphology.opening` are extensive and anti-extensive, respectively, if the footprint is not mirror symmetric ([#6695](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7259)).
- Fix logic in `skimage.graph.pixel_graph` which raised a `TypeError` when the parameter `edge_function` was provided without a `mask` ([#7310](https://github.com/scikit-image/scikit-image/pull/7310)).
- Ensure cache stays empty when `cache=False` is passed to `skimage.measure.regionprops` ([#7333](https://github.com/scikit-image/scikit-image/pull/7333)).

## Documentation

- Update instructions for updating dev environment ([#7160](https://github.com/scikit-image/scikit-image/pull/7160)).
- Make titles in RAG gallery examples more explicit ([#7202](https://github.com/scikit-image/scikit-image/pull/7202)).
- Add docstring to `skimage.graph` module ([#7192](https://github.com/scikit-image/scikit-image/pull/7192)).
- Use consistent notation for array dimensions in the docstrings ([#3031](https://github.com/scikit-image/scikit-image/pull/3031)).
- Specify default markers in watershed docstring ([#7154](https://github.com/scikit-image/scikit-image/pull/7154)).
- Stop HTML documentation from intercepting left and right-arrow keys to improve keyboard accessibility ([#7226](https://github.com/scikit-image/scikit-image/pull/7226)).
- Fix reference formatting for nitpicky sphinx ([#7228](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7159)).
- Fix broken function calls and syntax issues in user guide ([#7234](https://github.com/scikit-image/scikit-image/pull/7234)).
- Use correct default mode in docstring of `skimage.transform.swirl` ([#7241](https://github.com/scikit-image/scikit-image/pull/7241)).
- Add missing documentation about spacing parameter in `moments_normalized` ([#7248](https://github.com/scikit-image/scikit-image/pull/7248)).
- Update docstring & example in the hough_ellipse transform ([#6893](https://github.com/scikit-image/scikit-image/pull/6893)).
- Point binder tag/branch to commit corresponding to docs/release ([#7252](https://github.com/scikit-image/scikit-image/pull/7252)).
- Add example to FundamentalMatrixTransform class ([#6863](https://github.com/scikit-image/scikit-image/pull/6863)).
- Adds explanation of what the optional dependency on Matplotlib offers to the install instructions ([#7286](https://github.com/scikit-image/scikit-image/pull/7286)).
- Function docstring was changed to follow the conventions adopted in the original paper. τ was replaced with θ ([#7314](https://github.com/scikit-image/scikit-image/pull/7314)).
- The description of the parameter cval is modified in "int or float". cval is a numerical value not a string ([#7319](https://github.com/scikit-image/scikit-image/pull/7319)).
- Remove obsolete instruction about documenting changes ([#7321](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7324)).
- Create SECURITY.md ([#7230](https://github.com/scikit-image/scikit-image/pull/7230)).
- Remove deprecated parameter `coordinates` from docstring  example of `skimage.segmentation.active_contour` ([#7329](https://github.com/scikit-image/scikit-image/pull/7329)).
- Include dates in release note headings ([#7269](https://github.com/scikit-image/scikit-image/pull/7269)).
- Update description of how to document pull requests for inclusion in the release notes ([#7267](https://github.com/scikit-image/scikit-image/pull/7267)).
- Clarify description of `data_range` parameter in `skimage.metrics.structural_similarity` ([#7345](https://github.com/scikit-image/scikit-image/pull/7345)).
- Use  object-oriented Matplotlib style in longer gallery examples and demonstrations (doc/examples/applications) ([#7346](https://github.com/scikit-image/scikit-image/pull/7346)).

## Infrastructure

- Update wording on the stale bot to assume the core team dropped the ball ([#7196](https://github.com/scikit-image/scikit-image/pull/7196)).
- Update Azure job name following the drop of Python 3.9 ([#7218](https://github.com/scikit-image/scikit-image/pull/7218)).
- Schedule nightly wheel builds at uncommon time ([#7254](https://github.com/scikit-image/scikit-image/pull/7254)).
- Build nightly wheels with nightly NumPy 2.0 ([#7251](https://github.com/scikit-image/scikit-image/pull/7251)).
- Use pytest-doctestplus instead of classic pytest-doctest ([#7289](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7325)).
- Add `assert_stacklevel` helper to check stacklevel of captured warnings ([#7294](https://github.com/scikit-image/scikit-image/pull/7294)).
- Exclude `pre-commit[bot]` from changelist's contributor list ([#7358](https://github.com/scikit-image/scikit-image/pull/7358)).

## Maintenance

- Remove outdated & duplicate "preferred" field in `version_switcher.json` ([#7184](https://github.com/scikit-image/scikit-image/pull/7184)).
- Upgrade to spin 0.7 ([#7168](https://github.com/scikit-image/scikit-image/pull/7168)).
- Do not compare types, use isinstance ([#7186](https://github.com/scikit-image/scikit-image/pull/7186)).
- [pre-commit.ci] pre-commit autoupdate ([#7181](https://github.com/scikit-image/scikit-image/pull/7181)).
- Increase tolerance for moments test for 32 bit floats ([#7188](https://github.com/scikit-image/scikit-image/pull/7188)).
- Temporarily pin Cython to <3.0.3 until CI is fixed ([#7189](https://github.com/scikit-image/scikit-image/pull/7189)).
- Remove obsolete meson instructions ([#7193](https://github.com/scikit-image/scikit-image/pull/7193)).
- Temporarily pin Cython to <3.0.3 until CI is fixed, take 2 ([#7201](https://github.com/scikit-image/scikit-image/pull/7201)).
- Fix chocolatey ([#7200](https://github.com/scikit-image/scikit-image/pull/7200)).
- Pin Pillow to <10.1.0 until incompatibility with imageio is fixed ([#7208](https://github.com/scikit-image/scikit-image/pull/7208)).
- Use Black ([#7197](https://github.com/scikit-image/scikit-image/pull/7197)).
- Apply black to `_hog.py` after previous merge lacking black ([#7215](https://github.com/scikit-image/scikit-image/pull/7215)).
- Unpin Cython after release of Cython 3.0.4 ([#7214](https://github.com/scikit-image/scikit-image/pull/7214)).
- [pre-commit.ci] pre-commit autoupdate ([#7236](https://github.com/scikit-image/scikit-image/pull/7236)).
- Cleanup for Python 3.12 ([#7173](https://github.com/scikit-image/scikit-image/pull/7173)).
- Make Python 3.12 default CI Python ([#7244](https://github.com/scikit-image/scikit-image/pull/7244)).
- Add explicit `noexcept` to address Cython 3.0 warnings ([#7250](https://github.com/scikit-image/scikit-image/pull/7250)).
- Update imageio to fix Pillow incompatibility ([#7245](https://github.com/scikit-image/scikit-image/pull/7245)).
- Upgrade docker/setup-qemu-action to v3 ([#7134](https://github.com/scikit-image/scikit-image/pull/7134)).
- Fix warningfilter for deprecation in SciPy 1.12.0rc1 ([#7275](https://github.com/scikit-image/scikit-image/pull/7275)).
- Update to numpy>=1.23 and matplotlib>=3.6 according to SPEC 0 ([#7284](https://github.com/scikit-image/scikit-image/pull/7284)).
- Add new `deprecate_parameter` helper ([#7256](https://github.com/scikit-image/scikit-image/pull/7256)).
- Update meson and Cython ([#7283](https://github.com/scikit-image/scikit-image/pull/7283)).
- Handle floating point warning for empty images in `skimage.registration.phase_cross_correlation` ([#7287](https://github.com/scikit-image/scikit-image/pull/7287)).
- Update spin (0.8) ([#7285](https://github.com/scikit-image/scikit-image/pull/7285)).
- Complete deprecations that were scheduled for our 0.23 release.  Remove now unused `deprecate_kwarg` and `remove_arg`; they are  entirely succeeded by `deprecate_parameter` ([#7290](https://github.com/scikit-image/scikit-image/pull/7290)).
- For security best practices, use the scientific-python/upload-nightly-action GitHub Action from known commit shas that correspond to tagged releases. These can be updated automatically via Dependabot ([#7306](https://github.com/scikit-image/scikit-image/pull/7306)).
- Update pre-commits repos ([#7303](https://github.com/scikit-image/scikit-image/pull/7303)).
- The test suite can now be run without `numpydoc` installed ([#7307](https://github.com/scikit-image/scikit-image/pull/7307)).
- Deal with parallel write warning from Pydata theme ([#7311](https://github.com/scikit-image/scikit-image/pull/7311)).
- Test nightly wheel build with NumPy 2.0 ([#7288](https://github.com/scikit-image/scikit-image/pull/7288)).
- Make it clear that funcs in `_optical_flow_utils` are private ([#7328](https://github.com/scikit-image/scikit-image/pull/7328)).
- Update dependencies (spec 0) ([#7335](https://github.com/scikit-image/scikit-image/pull/7335)).
- Follow-up cleaning & fixes for compatibility with NumPy 1 & 2 ([#7326](https://github.com/scikit-image/scikit-image/pull/7326)).
- Replace ignored teardown with autouse fixture in `test_fits.py` ([#7340](https://github.com/scikit-image/scikit-image/pull/7340)).
- Address new copy semantics & broadcasting in `np.solve` in NumPy 2 ([#7341](https://github.com/scikit-image/scikit-image/pull/7341)).
- Ignore table of execution times by Sphinx gallery ([#7327](https://github.com/scikit-image/scikit-image/pull/7327)).
- Allow a very small floating point tolerance for pearson test ([#7356](https://github.com/scikit-image/scikit-image/pull/7356)).
- Update numpydoc to version 1.7 ([#7355](https://github.com/scikit-image/scikit-image/pull/7355)).
- [pre-commit.ci] pre-commit autoupdate ([#7365](https://github.com/scikit-image/scikit-image/pull/7365)).
- Simplify warning filters in test suite ([#7349](https://github.com/scikit-image/scikit-image/pull/7349)).
- Build against NumPy 2 ([#7367](https://github.com/scikit-image/scikit-image/pull/7367)).

## Contributors

29 authors added to this release (alphabetically):

- [@GParolini](https://github.com/GParolini)
- [@tokiAi](https://github.com/tokiAi)
- Adrien Foucart ([@adfoucart](https://github.com/adfoucart))
- Anam Fatima ([@anamfatima1304](https://github.com/anamfatima1304))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Ben Harvie ([@benharvie](https://github.com/benharvie))
- Christian Clauss ([@cclauss](https://github.com/cclauss))
- Cris Luengo ([@crisluengo](https://github.com/crisluengo))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Grzegorz Bokota ([@Czaki](https://github.com/Czaki))
- Jan Lebert ([@sitic](https://github.com/sitic))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jeremy Farrell ([@farrjere](https://github.com/farrjere))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Mao Nishino ([@mao1756](https://github.com/mao1756))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Matthew Feickert ([@matthewfeickert](https://github.com/matthewfeickert))
- Matthew Vine ([@MattTheCuber](https://github.com/MattTheCuber))
- Maxime Corbé ([@Maxime-corbe](https://github.com/Maxime-corbe))
- Michał Górny ([@mgorny](https://github.com/mgorny))
- Neil Shephard ([@ns-rse](https://github.com/ns-rse))
- Ole Streicher ([@olebole](https://github.com/olebole))
- Peter Suter ([@petsuter](https://github.com/petsuter))
- Robert Haase ([@haesleinhuepf](https://github.com/haesleinhuepf))
- Sean McKinney ([@jouyun](https://github.com/jouyun))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- vfdev ([@vfdev-5](https://github.com/vfdev-5))

21 reviewers added to this release (alphabetically):

- [@GParolini](https://github.com/GParolini)
- Adrien Foucart ([@adfoucart](https://github.com/adfoucart))
- Anam Fatima ([@anamfatima1304](https://github.com/anamfatima1304))
- Ben Harvie ([@benharvie](https://github.com/benharvie))
- Christian Clauss ([@cclauss](https://github.com/cclauss))
- Cris Luengo ([@crisluengo](https://github.com/crisluengo))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Grzegorz Bokota ([@Czaki](https://github.com/Czaki))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Jeremy Farrell ([@farrjere](https://github.com/farrjere))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Lars Grüter ([@lagru](https://github.com/lagru))
- M Bussonnier ([@Carreau](https://github.com/Carreau))
- Mao Nishino ([@mao1756](https://github.com/mao1756))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Maxime Corbé ([@Maxime-corbe](https://github.com/Maxime-corbe))
- P. L. Lim ([@pllim](https://github.com/pllim))
- Peter Suter ([@petsuter](https://github.com/petsuter))
- Sebastian Berg ([@seberg](https://github.com/seberg))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.23.0rc0 (2024-03-22)

No notes available

v0.22.0 (2023-10-03)

No notes available

v0.22.0rc1 (2023-09-30)

# 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](https://github.com/scikit-image/scikit-image/pull/6858)).

## Performance

- Add lazy loading to the `skimage.feature` module ([#6983](https://github.com/scikit-image/scikit-image/pull/6983)).
- Add lazy loading to the `skimage.graph` submodule ([#6985](https://github.com/scikit-image/scikit-image/pull/6985)).
- Add lazy loading to the `skimage.measure` submodule ([#6999](https://github.com/scikit-image/scikit-image/pull/6999)).
- Add lazy loading to the `skimage.transform` submodule ([#7009](https://github.com/scikit-image/scikit-image/pull/7009)).
- Add lazy loading to the `skimage.restoration` submodule ([#7021](https://github.com/scikit-image/scikit-image/pull/7021)).
- Add lazy loading to the `skimage.registration` submodule ([#7032](https://github.com/scikit-image/scikit-image/pull/7032)).
- Avoid unnecessary padding in `skimage.measure.block_resize` ([#7092](https://github.com/scikit-image/scikit-image/pull/7092)).

## Bug Fixes

- Add num_pixels and coords_scaled to regionprops_table ([#7039](https://github.com/scikit-image/scikit-image/pull/7039)).
- Update video.rst ([#7076](https://github.com/scikit-image/scikit-image/pull/7076)).
- For uniform intensity images, return intensity value as threshold ([#7098](https://github.com/scikit-image/scikit-image/pull/7098)).
- Fix color conversion error ([#7116](https://github.com/scikit-image/scikit-image/pull/7116)).
- Make phase_cross_correlation return ndarray when disambiguate=True ([#7112](https://github.com/scikit-image/scikit-image/pull/7112)).
- Allow `extra_properties` of non equal lengths to be passed correctly to `regionprops_table` ([#7136](https://github.com/scikit-image/scikit-image/pull/7136)).

## API Changes

- Make PyWavelets an optional dependency which is only required for  `skimage.restoration.denoise_wavelet` and `skimage.restoration.estimate_sigma` ([#7156](https://github.com/scikit-image/scikit-image/pull/7156)).
- Remove deprecated `skimage.filters.inverse`. Use `skimage.filters.filter_inverse` instead ([#7161](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/7166)).
- Deprecate `return_error` in `skimage.registration.phase_cross_correlation` ([#7174](https://github.com/scikit-image/scikit-image/pull/7174)).

## Maintenance

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

## Documentation

- Use a more descriptive title for current inpainting example ([#6989](https://github.com/scikit-image/scikit-image/pull/6989)).
- Fix URLs to the install page ([#6998](https://github.com/scikit-image/scikit-image/pull/6998)).
- Fix equation for Wiener filter in `restoration.wiener`'s docstring ([#6987](https://github.com/scikit-image/scikit-image/pull/6987)).
- Fix missing links in INSTALL.rst and simplify language ([#6984](https://github.com/scikit-image/scikit-image/pull/6984)).
- Edit installation and contributor guidelines ([#6991](https://github.com/scikit-image/scikit-image/pull/6991)).
- Fix URLs that lead to 404 page ([#7008](https://github.com/scikit-image/scikit-image/pull/7008)).
- Replace with correct reference to eigenvalues in ridge detection docstrings ([#7034](https://github.com/scikit-image/scikit-image/pull/7034)).
- Add inpainting example to gallery ([#6853](https://github.com/scikit-image/scikit-image/pull/6853)).
- Use packaged version of `generate_release_notes.py` (`changelist`) ([#7049](https://github.com/scikit-image/scikit-image/pull/7049)).
- Fix grammar in SKIP 1 ([#7081](https://github.com/scikit-image/scikit-image/pull/7081)).
- Add missing minus in `SimilarityTransform` docstring ([#6840](https://github.com/scikit-image/scikit-image/pull/6840)).
- Add one-line docstring to `skimage.segmentation` ([#6843](https://github.com/scikit-image/scikit-image/pull/6843)).
- Add a short docstring to `skimage.util` ([#6831](https://github.com/scikit-image/scikit-image/pull/6831)).
- Enable version warning banners for docs ([#7139](https://github.com/scikit-image/scikit-image/pull/7139)).
- Clarify order of dimensions in `skimage.transform.EuclideanTransform` ([#7103](https://github.com/scikit-image/scikit-image/pull/7103)).
- Add docstring to the `morphology` module ([#6814](https://github.com/scikit-image/scikit-image/pull/6814)).
- Include Plausible analytics from Scientific Python in our HTML docs ([#7145](https://github.com/scikit-image/scikit-image/pull/7145)).
- Specify coordinate convention in `skimage.draw.polygon2mask` ([#7131](https://github.com/scikit-image/scikit-image/pull/7131)).

## Infrastructure

- Pin milestone labeler to v0.1.0 SHA ([#6982](https://github.com/scikit-image/scikit-image/pull/6982)).
- Ensure existing target directory for `random.js` ([#7015](https://github.com/scikit-image/scikit-image/pull/7015)).
- Assign next milestone only for PRs targeting `main` branch ([#7018](https://github.com/scikit-image/scikit-image/pull/7018)).
- Add missing directories to `spin docs --clean` command ([#7019](https://github.com/scikit-image/scikit-image/pull/7019)).
- Rework `generate_release_notes.py` and add PR summary parsing ([#6961](https://github.com/scikit-image/scikit-image/pull/6961)).
- Generate requirements files from pyproject.toml ([#7085](https://github.com/scikit-image/scikit-image/pull/7085)).
- Update spin to v0.5 ([#7093](https://github.com/scikit-image/scikit-image/pull/7093)).
- Update to LLVM 16 with choco temporarily ([#7109](https://github.com/scikit-image/scikit-image/pull/7109)).
- Update pytest config in `pyproject.toml` with repo-review recommendations ([#7063](https://github.com/scikit-image/scikit-image/pull/7063)).

## Contributors

23 authors added to this release (alphabetically):

- [@akonsk](https://github.com/akonsk)
- [@patquem](https://github.com/patquem)
- [@rraadd88](https://github.com/rraadd88)
- [@scott-vsi](https://github.com/scott-vsi)
- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Amund Vedal ([@vedal](https://github.com/vedal))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Andrew J. Hesford ([@ahesford](https://github.com/ahesford))
- Antony Lee ([@anntzer](https://github.com/anntzer))
- Elena Pascal ([@elena-pascal](https://github.com/elena-pascal))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Kenfack Anafack Alex Bruno ([@Br-Al](https://github.com/Br-Al))
- Larry Bradley ([@larrybradley](https://github.com/larrybradley))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Marvin Albert ([@m-albert](https://github.com/m-albert))
- Matthias Bussonnier ([@Carreau](https://github.com/Carreau))
- Matthias Nwt ([@matthiasnwt](https://github.com/matthiasnwt))
- Mike Taves ([@mwtoews](https://github.com/mwtoews))
- Riadh Fezzani ([@rfezzani](https://github.com/rfezzani))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))
- Talley Lambert ([@tlambert03](https://github.com/tlambert03))

19 reviewers added to this release (alphabetically):

- [@akonsk](https://github.com/akonsk)
- [@scott-vsi](https://github.com/scott-vsi)
- Adeyemi Biola  ([@decorouz](https://github.com/decorouz))
- Ananya Srivastava ([@ana42742](https://github.com/ana42742))
- Andrew J. Hesford ([@ahesford](https://github.com/ahesford))
- Egor Panfilov ([@soupault](https://github.com/soupault))
- Grzegorz Bokota ([@Czaki](https://github.com/Czaki))
- Jarrod Millman ([@jarrodmillman](https://github.com/jarrodmillman))
- Juan Nunez-Iglesias ([@jni](https://github.com/jni))
- Kristen Thyng ([@kthyng](https://github.com/kthyng))
- Larry Bradley ([@larrybradley](https://github.com/larrybradley))
- Lars Grüter ([@lagru](https://github.com/lagru))
- Marianne Corvellec ([@mkcor](https://github.com/mkcor))
- Mark Harfouche ([@hmaarrfk](https://github.com/hmaarrfk))
- Marvin Albert ([@m-albert](https://github.com/m-albert))
- Matthias Bussonnier ([@Carreau](https://github.com/Carreau))
- Maxim ([@koshakOK](https://github.com/koshakOK))
- Mike Taves ([@mwtoews](https://github.com/mwtoews))
- Stefan van der Walt ([@stefanv](https://github.com/stefanv))

_These lists are automatically generated, and may not be complete or may contain duplicates._

v0.21.0 (2023-06-02)

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: 

## Highlights

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

## New Features

-   Implement Fisher vectors in scikit-image ([#5349](https://github.com/scikit-image/scikit-image/pull/5349)).
-   Add support for y-dimensional shear to the AffineTransform ([#6752](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scipy/scipy/issues/14322), as well as [Scientific Python SPEC 7](https://github.com/scientific-python/specs/pull/180) that attempts to summarize the argument.

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

## Enhancements

-   Bounding box crop ([#5499](https://github.com/scikit-image/scikit-image/pull/5499)).
-   Add support for y-dimensional shear to the AffineTransform ([#6752](https://github.com/scikit-image/scikit-image/pull/6752)).
-   Make join_segmentations return array maps from output to input labels ([#6786](https://github.com/scikit-image/scikit-image/pull/6786)).
-   Check if `spacing` parameter is tuple in `regionprops` ([#6907](https://github.com/scikit-image/scikit-image/pull/6907)).
-   Enable use of `rescale_intensity` with dask array ([#6910](https://github.com/scikit-image/scikit-image/pull/6910)).

## Performance

-   Add lazy loading to skimage.color submodule ([#6967](https://github.com/scikit-image/scikit-image/pull/6967)).
-   Add Lazy loading to skimage.draw submodule ([#6971](https://github.com/scikit-image/scikit-image/pull/6971)).
-   Add Lazy loader to skimage.exposure ([#6978](https://github.com/scikit-image/scikit-image/pull/6978)).
-   Add lazy loading to skimage.future module ([#6981](https://github.com/scikit-image/scikit-image/pull/6981)).

## Bug Fixes

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

## Maintenance

-   Fix and refactor `deprecated` decorator to `deprecate_func` ([#6594](https://github.com/scikit-image/scikit-image/pull/6594)).
-   allow trivial ransac call ([#6755](https://github.com/scikit-image/scikit-image/pull/6755)).
-   Fix copy-paste error in `footprints.diamond` test case ([#6756](https://github.com/scikit-image/scikit-image/pull/6756)).
-   Use imageio v3 API ([#6764](https://github.com/scikit-image/scikit-image/pull/6764)).
-   Unpin scipy dependency ([#6773](https://github.com/scikit-image/scikit-image/pull/6773)).
-   Update .devpy/cmds.py to match latest devpy ([#6789](https://github.com/scikit-image/scikit-image/pull/6789)).
-   Relicense CLAHE code under BSD-3-Clause ([#6795](https://github.com/scikit-image/scikit-image/pull/6795)).
-   Relax reproduce section in bug issue template ([#6825](https://github.com/scikit-image/scikit-image/pull/6825)).
-   Rename devpy to spin ([#6842](https://github.com/scikit-image/scikit-image/pull/6842)).
-   Speed up threshold_local function by fixing call to `_supported_float_type` ([#6847](https://github.com/scikit-image/scikit-image/pull/6847)).
-   Specify kernel for ipywidgets ([#6849](https://github.com/scikit-image/scikit-image/pull/6849)).
-   Make `image_fetcher` and `create_image_fetcher` in `data` private ([#6855](https://github.com/scikit-image/scikit-image/pull/6855)).
-   Update references to outdated dev.py with spin ([#6856](https://github.com/scikit-image/scikit-image/pull/6856)).
-   Bump 0.21 removals to 0.22 ([#6868](https://github.com/scikit-image/scikit-image/pull/6868)).
-   Update dependencies ([#6869](https://github.com/scikit-image/scikit-image/pull/6869)).
-   Update pre-commits ([#6870](https://github.com/scikit-image/scikit-image/pull/6870)).
-   Add test for radon transform on circular phantom ([#6873](https://github.com/scikit-image/scikit-image/pull/6873)).
-   Do not allow 64-bit integer inputs; add test to ensure masked and unmasked modes are aligned ([#6875](https://github.com/scikit-image/scikit-image/pull/6875)).
-   Don't use mutable types as default values for arguments ([#6876](https://github.com/scikit-image/scikit-image/pull/6876)).
-   Point `version_switcher.json` URL at dev docs ([#6882](https://github.com/scikit-image/scikit-image/pull/6882)).
-   Add back parallel tests that were removed as part of Meson build ([#6884](https://github.com/scikit-image/scikit-image/pull/6884)).
-   Use legacy datasets without creating a `data_dir` ([#6886](https://github.com/scikit-image/scikit-image/pull/6886)).
-   Remove old doc cruft ([#6901](https://github.com/scikit-image/scikit-image/pull/6901)).
-   Temporarily pin imageio to <2.28 ([#6909](https://github.com/scikit-image/scikit-image/pull/6909)).
-   Unify pseudo-random seeding interface follow-up ([#6924](https://github.com/scikit-image/scikit-image/pull/6924)).
-   Use pytest.warn instead of custom context manager ([#6931](https://github.com/scikit-image/scikit-image/pull/6931)).
-   Follow-up to move to pydata-sphinx-theme ([#6933](https://github.com/scikit-image/scikit-image/pull/6933)).
-   Mark functions as `noexcept` to support Cython 3 ([#6936](https://github.com/scikit-image/scikit-image/pull/6936)).
-   Skip unstable test in `ransac`'s docstring ([#6938](https://github.com/scikit-image/scikit-image/pull/6938)).
-   Stabilize EllipseModel fitting parameters ([#6943](https://github.com/scikit-image/scikit-image/pull/6943)).
-   Point logo in generated HTML docs at scikit-image.org ([#6947](https://github.com/scikit-image/scikit-image/pull/6947)).
-   If user provides RNG, spawn it before deepcopying ([#6948](https://github.com/scikit-image/scikit-image/pull/6948)).
-   Skip ransac doctest ([#6953](https://github.com/scikit-image/scikit-image/pull/6953)).
-   Expose `GeometricTransform.residuals` in HTML doc ([#6968](https://github.com/scikit-image/scikit-image/pull/6968)).
-   Fix NumPy 1.25 deprecation warnings ([#6969](https://github.com/scikit-image/scikit-image/pull/6969)).
-   Revert jupyterlite ([#6972](https://github.com/scikit-image/scikit-image/pull/6972)).
-   Don't test numpy nightlies due to transcendental functions issue ([#6973](https://github.com/scikit-image/scikit-image/pull/6973)).
-   Ignore tight layout warning from matplotlib pre-release ([#6976](https://github.com/scikit-image/scikit-image/pull/6976)).
-   Remove temporary constraint <2.28 for imageio ([#6980](https://github.com/scikit-image/scikit-image/pull/6980)).

## Documentation

-   Document boundary behavior of `draw.polygon` and `draw.polygon2mask` ([#6690](https://github.com/scikit-image/scikit-image/pull/6690)).
-   Showcase pydata-sphinx-theme ([#6714](https://github.com/scikit-image/scikit-image/pull/6714)).
-   Merge duplicate instructions for setting up build environment.  ([#6770](https://github.com/scikit-image/scikit-image/pull/6770)).
-   Add docstring to `skimage.color` module ([#6777](https://github.com/scikit-image/scikit-image/pull/6777)).
-   DOC: Fix underline length in `docstring_add_deprecated` ([#6778](https://github.com/scikit-image/scikit-image/pull/6778)).
-   Link full license to README ([#6779](https://github.com/scikit-image/scikit-image/pull/6779)).
-   Fix conda instructions for dev env setup.  ([#6781](https://github.com/scikit-image/scikit-image/pull/6781)).
-   Update docstring in skimage.future module ([#6782](https://github.com/scikit-image/scikit-image/pull/6782)).
-   Remove outdated build instructions from README ([#6788](https://github.com/scikit-image/scikit-image/pull/6788)).
-   Add docstring to the `transform` module ([#6797](https://github.com/scikit-image/scikit-image/pull/6797)).
-   Handle pip-only dependencies when using conda.  ([#6806](https://github.com/scikit-image/scikit-image/pull/6806)).
-   Added examples to the EssentialMatrixTransform class and its estimation function ([#6832](https://github.com/scikit-image/scikit-image/pull/6832)).
-   Fix returned data type in `segmentation.watershed` ([#6839](https://github.com/scikit-image/scikit-image/pull/6839)).
-   Update references to outdated dev.py with spin ([#6856](https://github.com/scikit-image/scikit-image/pull/6856)).
-   Added example to AffineTransform class ([#6859](https://github.com/scikit-image/scikit-image/pull/6859)).
-   Update `_warps_cy.pyx` ([#6867](https://github.com/scikit-image/scikit-image/pull/6867)).
-   Point `version_switcher.json` URL at dev docs ([#6882](https://github.com/scikit-image/scikit-image/pull/6882)).
-   Fix docstring underline lengths ([#6895](https://github.com/scikit-image/scikit-image/pull/6895)).
-   ENH Add JupyterLite button to gallery examples ([#6911](https://github.com/scikit-image/scikit-image/pull/6911)).
-   Add missing backticks to DOI role in docstring of `area_opening` ([#6913](https://github.com/scikit-image/scikit-image/pull/6913)).
-   Add 0.21 release notes ([#6925](https://github.com/scikit-image/scikit-image/pull/6925)).
-   Simplify installation instruction document ([#6927](https://github.com/scikit-image/scikit-image/pull/6927)).
-   Follow-up to move to pydata-sphinx-theme ([#6933](https://github.com/scikit-image/scikit-image/pull/6933)).
-   Update release notes ([#6944](https://github.com/scikit-image/scikit-image/pull/6944)).
-   MNT Fix typo in JupyterLite comment ([#6945](https://github.com/scikit-image/scikit-image/pull/6945)).
-   Point logo in generated HTML docs at scikit-image.org ([#6947](https://github.com/scikit-image/scikit-image/pull/6947)).
-   Add missing PRs to release notes ([#6949](https://github.com/scikit-image/scikit-image/pull/6949)).
-   fix bad link in CODE_OF_CONDUCT.md ([#6952](https://github.com/scikit-image/scikit-image/pull/6952)).
-   Expose `GeometricTransform.residuals` in HTML doc ([#6968](https://github.com/scikit-image/scikit-image/pull/6968)).

## Infrastructure

-   Showcase pydata-sphinx-theme ([#6714](https://github.com/scikit-image/scikit-image/pull/6714)).
-   Prepare CI configuration for merge queue ([#6771](https://github.com/scikit-image/scikit-image/pull/6771)).
-   Pin to devpy 0.1 tag ([#6816](https://github.com/scikit-image/scikit-image/pull/6816)).
-   Relax reproduce section in bug issue template ([#6825](https://github.com/scikit-image/scikit-image/pull/6825)).
-   Rename devpy to spin ([#6842](https://github.com/scikit-image/scikit-image/pull/6842)).
-   Use lazy loader 0.2 ([#6844](https://github.com/scikit-image/scikit-image/pull/6844)).
-   Cleanup cruft in tools ([#6846](https://github.com/scikit-image/scikit-image/pull/6846)).
-   Update pre-commits ([#6870](https://github.com/scikit-image/scikit-image/pull/6870)).
-   Remove `codecov` dependency which disappeared from PyPI ([#6887](https://github.com/scikit-image/scikit-image/pull/6887)).
-   Add CircleCI API token; fixes status link to built docs ([#6894](https://github.com/scikit-image/scikit-image/pull/6894)).
-   Temporarily pin imageio to <2.28 ([#6909](https://github.com/scikit-image/scikit-image/pull/6909)).
-   Add PR links to release notes generating script ([#6917](https://github.com/scikit-image/scikit-image/pull/6917)).
-   Use official meson-python release ([#6928](https://github.com/scikit-image/scikit-image/pull/6928)).
-   Fix inclusion of `random.js` in HTML output ([#6935](https://github.com/scikit-image/scikit-image/pull/6935)).
-   Fix URL of random gallery links ([#6937](https://github.com/scikit-image/scikit-image/pull/6937)).
-   Respect SPHINXOPTS and add `--install-deps` flags to `spin docs` ([#6940](https://github.com/scikit-image/scikit-image/pull/6940)).
-   Build skimage before generating docs ([#6946](https://github.com/scikit-image/scikit-image/pull/6946)).
-   Enable testing against nightly upstream wheels ([#6956](https://github.com/scikit-image/scikit-image/pull/6956)).
-   Add nightly wheel builder ([#6957](https://github.com/scikit-image/scikit-image/pull/6957)).
-   Run weekly tests on nightly wheels ([#6959](https://github.com/scikit-image/scikit-image/pull/6959)).
-   CI: ensure that a `type: ` label is present on each PR ([#6960](https://github.com/scikit-image/scikit-image/pull/6960)).
-   Add PR milestone labeler ([#6977](https://github.com/scikit-image/scikit-image/pull/6977)).

## 33 authors added to this release (alphabetical)

-   [Adam J.  Stewart (\@adamjstewart)](https://github.com/scikit-image/scikit-image/commits?author=adamjstewart)
-   [Adeyemi Biola (\@decorouz)](https://github.com/scikit-image/scikit-image/commits?author=decorouz)
-   [aeisenbarth (\@aeisenbarth)](https://github.com/scikit-image/scikit-image/commits?author=aeisenbarth)
-   [Ananya Srivastava (\@ana42742)](https://github.com/scikit-image/scikit-image/commits?author=ana42742)
-   [Bohumír Zámečník (\@bzamecnik)](https://github.com/scikit-image/scikit-image/commits?author=bzamecnik)
-   [Carlos Horn (\@carloshorn)](https://github.com/scikit-image/scikit-image/commits?author=carloshorn)
-   [Daniel Angelov (\@23pointsNorth)](https://github.com/scikit-image/scikit-image/commits?author=23pointsNorth)
-   [DavidTorpey (\@DavidTorpey)](https://github.com/scikit-image/scikit-image/commits?author=DavidTorpey)
-   [Dipkumar Patel (\@immortal3)](https://github.com/scikit-image/scikit-image/commits?author=immortal3)
-   [Enrico Tagliavini (\@enricotagliavini)](https://github.com/scikit-image/scikit-image/commits?author=enricotagliavini)
-   [Eric Prestat (\@ericpre)](https://github.com/scikit-image/scikit-image/commits?author=ericpre)
-   [GGoussar (\@GGoussar)](https://github.com/scikit-image/scikit-image/commits?author=GGoussar)
-   [Gregory Lee (\@grlee77)](https://github.com/scikit-image/scikit-image/commits?author=grlee77)
-   [harshitha kolipaka (\@harshithakolipaka)](https://github.com/scikit-image/scikit-image/commits?author=harshithakolipaka)
-   [Hayato Ikoma (\@hayatoikoma)](https://github.com/scikit-image/scikit-image/commits?author=hayatoikoma)
-   [i-aki-y (\@i-aki-y)](https://github.com/scikit-image/scikit-image/commits?author=i-aki-y)
-   [Jake Martin (\@jakeMartin1234)](https://github.com/scikit-image/scikit-image/commits?author=jakeMartin1234)
-   [Jarrod Millman (\@jarrodmillman)](https://github.com/scikit-image/scikit-image/commits?author=jarrodmillman)
-   [Juan Nunez-Iglesias (\@jni)](https://github.com/scikit-image/scikit-image/commits?author=jni)
-   [Kevin MEETOOA (\@kevinmeetooa)](https://github.com/scikit-image/scikit-image/commits?author=kevinmeetooa)
-   [Lars Grüter (\@lagru)](https://github.com/scikit-image/scikit-image/commits?author=lagru)
-   [Loïc Estève (\@lesteve)](https://github.com/scikit-image/scikit-image/commits?author=lesteve)
-   [mahamtariq58 (\@mahamtariq58)](https://github.com/scikit-image/scikit-image/commits?author=mahamtariq58)
-   [Marianne Corvellec (\@mkcor)](https://github.com/scikit-image/scikit-image/commits?author=mkcor)
-   [Mark Harfouche (\@hmaarrfk)](https://github.com/scikit-image/scikit-image/commits?author=hmaarrfk)
-   [Matthias Bussonnier (\@Carreau)](https://github.com/scikit-image/scikit-image/commits?author=Carreau)
-   [Matus Valo (\@matusvalo)](https://github.com/scikit-image/scikit-image/commits?author=matusvalo)
-   [Michael Görner (\@v4hn)](https://github.com/scikit-image/scikit-image/commits?author=v4hn)
-   [Ramyashri Padmanabhakumar (\@rum1887)](https://github.com/scikit-image/scikit-image/commits?author=rum1887)
-   [scott-vsi (\@scott-vsi)](https://github.com/scikit-image/scikit-image/commits?author=scott-vsi)
-   [Sean Quinn (\@seanpquinn)](https://github.com/scikit-image/scikit-image/commits?author=seanpquinn)
-   [Stefan van der Walt (\@stefanv)](https://github.com/scikit-image/scikit-image/commits?author=stefanv)
-   [Tony Reina (\@tonyreina)](https://github.com/scikit-image/scikit-image/commits?author=tonyreina)

## 27 reviewers added to this release (alphabetical)

-   [Adeyemi Biola (\@decorouz)](https://github.com/scikit-image/scikit-image/commits?author=decorouz)
-   [aeisenbarth (\@aeisenbarth)](https://github.com/scikit-image/scikit-image/commits?author=aeisenbarth)
-   [Ananya Srivastava (\@ana42742)](https://github.com/scikit-image/scikit-image/commits?author=ana42742)
-   [Brigitta Sipőcz (\@bsipocz)](https://github.com/scikit-image/scikit-image/commits?author=bsipocz)
-   [Carlos Horn (\@carloshorn)](https://github.com/scikit-image/scikit-image/commits?author=carloshorn)
-   [Cris Luengo (\@crisluengo)](https://github.com/scikit-image/scikit-image/commits?author=crisluengo)
-   [DavidTorpey (\@DavidTorpey)](https://github.com/scikit-image/scikit-image/commits?author=DavidTorpey)
-   [Dipkumar Patel (\@immortal3)](https://github.com/scikit-image/scikit-image/commits?author=immortal3)
-   [Enrico Tagliavini (\@enricotagliavini)](https://github.com/scikit-image/scikit-image/commits?author=enricotagliavini)
-   [Gregory Lee (\@grlee77)](https://github.com/scikit-image/scikit-image/commits?author=grlee77)
-   [Henry Pinkard (\@henrypinkard)](https://github.com/scikit-image/scikit-image/commits?author=henrypinkard)
-   [i-aki-y (\@i-aki-y)](https://github.com/scikit-image/scikit-image/commits?author=i-aki-y)
-   [Jarrod Millman (\@jarrodmillman)](https://github.com/scikit-image/scikit-image/commits?author=jarrodmillman)
-   [Juan Nunez-Iglesias (\@jni)](https://github.com/scikit-image/scikit-image/commits?author=jni)
-   [Kevin MEETOOA (\@kevinmeetooa)](https://github.com/scikit-image/scikit-image/commits?author=kevinmeetooa)
-   [kzuiderveld (\@kzuiderveld)](https://github.com/scikit-image/scikit-image/commits?author=kzuiderveld)
-   [Lars Grüter (\@lagru)](https://github.com/scikit-image/scikit-image/commits?author=lagru)
-   [Marianne Corvellec (\@mkcor)](https://github.com/scikit-image/scikit-image/commits?author=mkcor)
-   [Mark Harfouche (\@hmaarrfk)](https://github.com/scikit-image/scikit-image/commits?author=hmaarrfk)
-   [Ramyashri Padmanabhakumar (\@rum1887)](https://github.com/scikit-image/scikit-image/commits?author=rum1887)
-   [Riadh Fezzani (\@rfezzani)](https://github.com/scikit-image/scikit-image/commits?author=rfezzani)
-   [Sean Quinn (\@seanpquinn)](https://github.com/scikit-image/scikit-image/commits?author=seanpquinn)
-   [Sebastian Berg (\@seberg)](https://github.com/scikit-image/scikit-image/commits?author=seberg)
-   [Sebastian Wallkötter (\@FirefoxMetzger)](https://github.com/scikit-image/scikit-image/commits?author=FirefoxMetzger)
-   [Stefan van der Walt (\@stefanv)](https://github.com/scikit-image/scikit-image/commits?author=stefanv)
-   [Tony Reina (\@tonyreina)](https://github.com/scikit-image/scikit-image/commits?author=tonyreina)
-   [Tony Reina (\@tony-res)](https://github.com/scikit-image/scikit-image/commits?author=tony-res)

v0.21.0rc1 (2023-05-18)

No notes available

v0.21.0rc0 (2023-04-12)

No notes available

v0.20.0 (2023-02-28)

# 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: 

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](https://github.com/scikit-image/scikit-image/pull/5482), [#6151](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6492)).
- Add new colocalization metrics `pearson_corr_coeff`, `manders_coloc_coeff`, `manders_overlap_coeff` and `intersection_coeff` to `skimage.measure` ([#6189](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/5581)).
- Add two datasets `skimage.data.protein_transport` and `skimage.data.nickel_solidification` ([#6087](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6149)).
- Add new parameters `squared_butterworth` and `npad` to `skimage.filters.butterworth`, which support traditional or squared filtering and edge padding, respectively ([#6251](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6276)).
- Add new parameter `alpha` to `skimage.metrics.adapted_rand_error` allowing control over the weight given to precision and recall ([#6472](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6515)).
- Add new parameter `include_borders` to `skimage.measure.convex_hull_image` to optionally exclude vertices or edges from the final hull mask ([#6515](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/3706)).
- Add new parameter `disambiguate` to `skimage.registration.phase_cross_correlation` to optionally disambiguate periodic shifts ([#6617](https://github.com/scikit-image/scikit-image/pull/6617)).
- Support n-dimensional images in `skimage.filters.farid` (Farid & Simoncelli filter) ([#6257](https://github.com/scikit-image/scikit-image/pull/6257)).
- Support n-dimensional images in `skimage.restoration.wiener` ([#6454](https://github.com/scikit-image/scikit-image/pull/6454)).
- Support three dimensions for the properties `rotation` and `translation` in `skimage.transform.EuclideanTransform` as well as for `skimage.transform.SimilarityTransform.scale` ([#6367](https://github.com/scikit-image/scikit-image/pull/6367)).
- Allow footprints with non-adjacent pixels as neighbors in `skimage.morphology.flood_fill` ([#6236](https://github.com/scikit-image/scikit-image/pull/6236)).
- Support array-likes consistently in `AffineTransform`, `EssentialMatrixTransform`, `EuclideanTransform`, `FundamentalMatrixTransform`, `GeometricTransform`, `PiecewiseAffineTransform`, `PolynomialTransform`, `ProjectiveTransform`, `SimilarityTransform`, `estimate_transform`, and `matrix_transform` in `skimage.transform` ([#6270](https://github.com/scikit-image/scikit-image/pull/6270)).

### Performance

- Improve performance (\~2x speedup) of `skimage.feature.canny` by porting a part of its implementation to Cython ([#6387](https://github.com/scikit-image/scikit-image/pull/6387)).
- Improve performance (\~2x speedup) of `skimage.feature.hessian_matrix_eigvals` and 2D `skimage.feature.structure_tensor_eigenvalues` ([#6441](https://github.com/scikit-image/scikit-image/pull/6441)).
- Improve performance of `skimage.measure.moments_central` by avoiding redundant computations ([#6188](https://github.com/scikit-image/scikit-image/pull/6188)).
- Reduce import time of `skimage.io` by loading the matplotlib plugin only when required ([#6550](https://github.com/scikit-image/scikit-image/pull/6550)).
- Incorporate RANSAC improvements from scikit-learn into `skimage.measure.ransac` which decrease the number of iterations ([#6046](https://github.com/scikit-image/scikit-image/pull/6046)).
- Improve histogram matching performance on unsigned integer data with `skimage.exposure.match_histograms`. ([#6209](https://github.com/scikit-image/scikit-image/pull/6209), [#6354](https://github.com/scikit-image/scikit-image/pull/6354)).
- Reduce memory consumption of the ridge filters `meijering`, `sato`, `frangi`, and `hessian` in `skimage.filters` ([#6509](https://github.com/scikit-image/scikit-image/pull/6509)).
- Reduce memory consumption of `blob_dog`, `blob_log`, and `blob_doh` in `skimage.feature` ([#6597](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6342)).

## Changes and new deprecations

- Set Python 3.8 as the minimal supported version ([#6679](https://github.com/scikit-image/scikit-image/pull/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](https://github.com/scikit-image/scikit-image/pull/6446)).
- Move functions in `skimage.future.graph` to `skimage.graph`. This affects `cut_threshold`, `cut_normalized`, `merge_hierarchical`, `rag_mean_color`, `RAG`, `show_rag`, and `rag_boundary` ([#6674](https://github.com/scikit-image/scikit-image/pull/6674)).
- Return `False` in `skimage.measure.LineModelND.estimate` instead of raising an error if the model is under-determined ([#6453](https://github.com/scikit-image/scikit-image/pull/6453)).
- Return `False` in `skimage.measure.CircleModel.estimate` instead of warning if the model is under-determined ([#6453](https://github.com/scikit-image/scikit-image/pull/6453)).
- Rename `skimage.filters.inverse` to `skimage.filters.inverse_filter`. `skimage.filters.inverse` is deprecated and will be removed in the next release ([#6418](https://github.com/scikit-image/scikit-image/pull/6418), [#6701](https://github.com/scikit-image/scikit-image/pull/6701)).
- Update minimal supported dependencies to `numpy>=1.20` ([#6565](https://github.com/scikit-image/scikit-image/pull/6565)).
- Update minimal supported dependencies to `scipy>=1.8` ([#6564](https://github.com/scikit-image/scikit-image/pull/6564)).
- Update minimal supported dependencies to `networkx>=2.8` ([#6564](https://github.com/scikit-image/scikit-image/pull/6564)).
- Update minimal supported dependency to `pillow>=9.0.1` ([#6402](https://github.com/scikit-image/scikit-image/pull/6402)).
- Update minimal supported dependency to `setuptools 67` ([#6754](https://github.com/scikit-image/scikit-image/pull/6754)).
- Update optional, minimal supported dependency to `matplotlib>=3.3` ([#6383](https://github.com/scikit-image/scikit-image/pull/6383)).
- Warn for non-integer image inputs to `skimage.feature.local_binary_pattern`. Applying the function to floating-point images may give unexpected results when small numerical differences between adjacent pixels are present ([#6272](https://github.com/scikit-image/scikit-image/pull/6272)).
- Warn if `skimage.registration.phase_cross_correlation` returns only the shift vector. Starting with the next release this function will always return a tuple of three (shift vector, error, phase difference). Use `return_error="always"` to silence this warning and switch to this new behavior ([#6543](https://github.com/scikit-image/scikit-image/pull/6543)).
- Warn in `skimage.metrics.structural_similarity`, if `data_range` is not specified in case of floating point data ([#6612](https://github.com/scikit-image/scikit-image/pull/6612)).
- Automatic detection of the color channel is deprecated in `skimage.filters.gaussian` and a warning is emitted if the parameter `channel_axis` is not set explicitly ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).

## Completed deprecations

- Remove `skimage.viewer` which was scheduled for removal in the postponed version 1.0 ([#6160](https://github.com/scikit-image/scikit-image/pull/6160)).
- Remove deprecated parameter `indices` from `skimage.feature.peak_local_max` ([#6161](https://github.com/scikit-image/scikit-image/pull/6161)).
- Remove `skimage.feature.structure_tensor_eigvals` (it was replaced by `skimage.feature.structure_tensor_eigenvalues`) and change the default parameter value in `skimage.feature.structure_tensor` to `order="rc"` ([#6162](https://github.com/scikit-image/scikit-image/pull/6162)).
- Remove deprecated parameter `array` in favor of `image` from `skimage.measure.find_contours` ([#6163](https://github.com/scikit-image/scikit-image/pull/6163)).
- Remove deprecated Qt IO plugin and the `skivi` console script ([#6164](https://github.com/scikit-image/scikit-image/pull/6164)).
- Remove deprecated parameter value `method='_lorensen'` in `skimage.measure.marching_cubes` ([#6230](https://github.com/scikit-image/scikit-image/pull/6230)).
- Remove deprecated parameter `multichannel`; use `channel_axis` instead. This affects `skimage.draw.random_shapes`, `skimage.exposure.match_histograms`, `skimage.feature.multiscale_basic_features`, `skimage.feature.hog`, `skimage.feature.difference_of_gaussians`, `skimage.filters.unsharp_mask`, and `skimage.metrics.structural_similarity`. In `skimage.restoration`, this affects `cycle_spin`, `denoise_bilateral`, `denoise_tv_bregman`, `denoise_tv_chambolle`, `denoise_wavelet`, `estimate_sigma`, `inpaint_biharmonic`, and `denoise_nl_means`. In `skimage.segmentation`, this affects `felzenszwalb`, `random_walker`, and `slic`. In `skimage.transform`, this affects `rescale`, `warp_polar`, `pyramid_reduce`, `pyramid_expand`, `pyramid_gaussian`, and `pyramid_laplacian`. In `skimage.util`, this affects `montage` and `apply_parallel` ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `selem`; use `footprint` instead. In `skimage.filters`, this affects `median`, `autolevel_percentile`, `gradient_percentile`, `mean_percentile`, `subtract_mean_percentile`, `enhance_contrast_percentile`, `percentile`, `pop_percentile`, `sum_percentile`, `threshold_percentile`, `mean_bilateral`, `pop_bilateral`, `sum_bilateral`, `autolevel`, `equalize`, `gradient`, `maximum`, `mean`, `geometric_mean`, `subtract_mean`, `median`, `minimum`, `modal`, `enhance_contrast`, `pop`, `sum`, `threshold`, `noise_filter`, `entropy`, `otsu`, `windowed_histogram`, and `majority`. In `skimage.morphology`, this affects `flood_fill`, `flood`, `binary_erosion`, `binary_dilation`, `binary_opening`, `binary_closing`, `h_maxima`, `h_minima`, `local_maxima`, `local_minima`, `erosion`, `dilation`, `opening`, `closing`, `white_tophat`, `black_tophat`, and `reconstruction` ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `max_iter` from `skimage.filters.threshold_minimum`, `skimage.morphology.thin`, and `skimage.segmentation.chan_vese`; use `max_num_iter` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `max_iterations` from `skimage.segmentation.active_contour`; use `max_num_iter` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `input` from `skimage.measure.label`; use `label_image` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `coordinates` from `skimage.measure.regionprops` and `skimage.segmentation.active_contour` ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `neighbourhood` from `skimage.measure.perimeter`; use `neighborhood` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameters `height` and `width` from `skimage.morphology.rectangle`; use `ncols` and `nrows` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `in_place` from `skimage.morphology.remove_small_objects`, `skimage.morphology.remove_small_holes`, and `skimage.segmentation.clear_border`; use `out` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated parameter `iterations` from `skimage.restoration.richardson_lucy`, `skimage.segmentation.morphological_chan_vese`, and `skimage.segmentation.morphological_geodesic_active_contour`; use `num_iter` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove support for deprecated keys `"min_iter"` and `"max_iter"` in `skimage.restoration.unsupervised_wiener`\'s parameter `user_params`; use `"min_num_iter"` and `"max_num_iter"` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated functions `greycomatrix` and `greycoprops` from `skimage.feature` ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated submodules `skimage.morphology.grey` and `skimage.morphology.greyreconstruct`; use `skimage.morphology` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated submodule `skimage.morphology.selem`; use `skimage.morphology.footprints` instead ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Remove deprecated `skimage.future.graph.ncut` (it was replaced by `skimage.graph.cut_normalized`) ([#6685](https://github.com/scikit-image/scikit-image/pull/6685)).

## Bug fixes

- Fix round-off error in `skimage.exposure.adjust_gamma` ([#6285](https://github.com/scikit-image/scikit-image/pull/6285)).
- Round and convert output coordinates of `skimage.draw.rectangle` to `int` even if the input coordinates use `float`. This fix ensures that the output can be used for indexing similar to other draw functions ([#6501](https://github.com/scikit-image/scikit-image/pull/6501)).
- Avoid unexpected exclusion of peaks near the image border in `skimage.feature.peak_local_max` if the peak value is smaller 0 ([#6502](https://github.com/scikit-image/scikit-image/pull/6502)).
- Avoid anti-aliasing in `skimage.transform.resize` by default when using nearest neighbor interpolation (`order == 0`) with an integer input data type ([#6503](https://github.com/scikit-image/scikit-image/pull/6503)).
- Use mask during rescaling in `skimage.segmentation.slic`. Previously, the mask was ignored when rescaling the image to make choice of compactness insensitive to the image values. The new behavior makes it possible to mask values such as `numpy.nan` or `numpy.infinity`. Additionally, raise an error if the input `image` has two dimensions and a `channel_axis` is specified - indicating that the image is multi-channel ([#6525](https://github.com/scikit-image/scikit-image/pull/6525)).
- Fix unexpected error when passing a tuple to the parameter `exclude_border` in `skimage.feature.blog_dog` and `skimage.feature.blob_log` ([#6533](https://github.com/scikit-image/scikit-image/pull/6533)).
- Raise a specific error message in `skimage.segmentation.random_walker` if no seeds are provided as positive values in the parameter `labels` ([#6562](https://github.com/scikit-image/scikit-image/pull/6562)).
- Raise a specific error message when accessing region properties from `skimage.measure.regionprops` when the required `intensity_image` is unavailable ([#6584](https://github.com/scikit-image/scikit-image/pull/6584)).
- Avoid errors in `skimage.feature.ORB.detect_and_extract` by breaking early if the octave image is too small ([#6590](https://github.com/scikit-image/scikit-image/pull/6590)).
- Fix `skimage.restoration.inpaint_biharmonic` for images with Fortran-ordered memory layout ([#6263](https://github.com/scikit-image/scikit-image/pull/6263)).
- Fix automatic detection of the color channel in `skimage.filters.gaussian` (this behavior is deprecated, see new deprecations) ([#6583](https://github.com/scikit-image/scikit-image/pull/6583)).
- Fix stacklevel of warning in `skimage.color.lab2rgb` ([#6616](https://github.com/scikit-image/scikit-image/pull/6616)).
- Fix the order of return values for `skimage.feature.hessian_matrix` and raise an error if `order='xy'` is requested for images with more than 2 dimensions ([#6624](https://github.com/scikit-image/scikit-image/pull/6624)).
- Fix misleading exception in functions in `skimage.filters.rank` that did not mention that 2D images are also supported ([#6666](https://github.com/scikit-image/scikit-image/pull/6666)).
- Fix in-place merging of wheights in `skimage.graph.RAG.merge_nodes` ([#6692](https://github.com/scikit-image/scikit-image/pull/6692)).
- Fix growing memory error and silence compiler warning in internal `heappush` function ([#6727](https://github.com/scikit-image/scikit-image/pull/6727)).
- Fix compiliation warning about struct initialization in `Cascade.detect_multi_scale` ([#6728](https://github.com/scikit-image/scikit-image/pull/6728)).

## Documentation

### New

- Add gallery example \"Decompose flat footprints (structuring elements)\" ([#6151](https://github.com/scikit-image/scikit-image/pull/6151)).
- Add gallery example \"Butterworth Filters\" and improve docstring of `skimage.filters.butterworth` ([#6251](https://github.com/scikit-image/scikit-image/pull/6251)).
- Add gallery example \"Render text onto an image\" ([#6431](https://github.com/scikit-image/scikit-image/pull/6431)).
- Add gallery example \"Track solidification of a metallic alloy\" ([#6469](https://github.com/scikit-image/scikit-image/pull/6469)).
- Add gallery example \"Colocalization metrics\" ([#6189](https://github.com/scikit-image/scikit-image/pull/6189)).
- Add support page (`.github/SUPPORT.md`) to help users from GitHub find appropriate support resources ([#6171](https://github.com/scikit-image/scikit-image/pull/6171), [#6575](https://github.com/scikit-image/scikit-image/pull/6575)).
- Add `CITATION.bib` to repository to help with citing scikit-image ([#6195](https://github.com/scikit-image/scikit-image/pull/6195)).
- Add usage instructions for new Meson-based build system with `dev.py` ([#6600](https://github.com/scikit-image/scikit-image/pull/6600)).

### Improved & updated

- Improve gallery example \"Measure perimeters with different estimators\" ([#6200](https://github.com/scikit-image/scikit-image/pull/6200), [#6121](https://github.com/scikit-image/scikit-image/pull/6121)).
- Adapt gallery example \"Build image pyramids\" to more diversified shaped images and downsample factors ([#6293](https://github.com/scikit-image/scikit-image/pull/6293)).
- Adapt gallery example \"Explore 3D images (of cells)\" with interactive slice explorer using plotly ([#4953](https://github.com/scikit-image/scikit-image/pull/4953)).
- Clarify meaning of the `weights` term and rewrite docstrings of `skimage.restoration.denoise_tv_bregman` and `skimage.restoration.denoise_tv_chambolle` ([#6544](https://github.com/scikit-image/scikit-image/pull/6544)).
- Describe the behavior of `skimage.io.MultiImage` more precisely in its docstring ([#6290](https://github.com/scikit-image/scikit-image/pull/6290), [#6292](https://github.com/scikit-image/scikit-image/pull/6292)).
- Clarify that the enabled `watershed_line` parameter will not catch borders between adjacent marker regions in `skimage.segmentation.watershed` ([#6280](https://github.com/scikit-image/scikit-image/pull/6280)).
- Clarify that `skimage.morphology.skeletonize` accepts an `image` of any input type ([#6322](https://github.com/scikit-image/scikit-image/pull/6322)).
- Use gridded thumbnails in our gallery to demonstrate the different images and datasets available in `skimage.data` ([#6298](https://github.com/scikit-image/scikit-image/pull/6298), [#6300](https://github.com/scikit-image/scikit-image/pull/6300), [#6301](https://github.com/scikit-image/scikit-image/pull/6301)).
- Tweak `balance` in the docstring example of `skimage.restoration.wiener` for a less blurry result ([#6265](https://github.com/scikit-image/scikit-image/pull/6265)).
- Document support for Path objects in `skimage.io.imread` and `skimage.io.imsave` ([#6361](https://github.com/scikit-image/scikit-image/pull/6361)).
- Improve error message in `skimage.filters.threshold_multiotsu` if the discretized image cannot be thresholded ([#6375](https://github.com/scikit-image/scikit-image/pull/6375)).
- Show original unlabeled image as well in the gallery example \"Expand segmentation labels without overlap\" ([#6396](https://github.com/scikit-image/scikit-image/pull/6396)).
- Document refactoring of `grey*` to `skimage.feature.graymatrix` and `skimage.feature.graycoprops` in the release 0.19 ([#6420](https://github.com/scikit-image/scikit-image/pull/6420)).
- Document inclusion criteria for new functionality in core developer guide ([#6488](https://github.com/scikit-image/scikit-image/pull/6488)).
- Print the number of segments after applying the Watershed in the gallery example \"Comparison of segmentation and superpixel algorithms\" ([#6535](https://github.com/scikit-image/scikit-image/pull/6535)).
- Replace issue templates with issue forms ([#6554](https://github.com/scikit-image/scikit-image/pull/6554), [#6576](https://github.com/scikit-image/scikit-image/pull/6576)).
- Expand reviewer guidelines in pull request template ([#6208](https://github.com/scikit-image/scikit-image/pull/6208)).
- Provide pre-commit PR instructions in pull request template ([#6578](https://github.com/scikit-image/scikit-image/pull/6578)).
- Warn about and explain the handling of floating-point data in the docstring of `skimage.metricts.structural_similarity` ([#6595](https://github.com/scikit-image/scikit-image/pull/6595)).
- Fix intensity autoscaling in animated `imshow` in gallery example \"Measure fluorescence intensity at the nuclear envelope\" ([#6599](https://github.com/scikit-image/scikit-image/pull/6599)).
- Clarify dependency on `scikit-image[data]` and pooch in `INSTALL.rst` ([#6619](https://github.com/scikit-image/scikit-image/pull/6619)).
- Don\'t use confusing loop in installation instructions for conda ([#6672](https://github.com/scikit-image/scikit-image/pull/6672)).
- Document value ranges of L\*a\*b\* and L\*Ch in `lab2xyz`, `rgb2lab`, `lab2lch`, and `lch2lab` in `skimage.color` ([#6688](https://github.com/scikit-image/scikit-image/pull/6688), [#6697](https://github.com/scikit-image/scikit-image/pull/6697), [#6719](https://github.com/scikit-image/scikit-image/pull/6719)).
- Use more consistent style in docstring of `skimage.feature.local_binary_pattern` ([#6736](https://github.com/scikit-image/scikit-image/pull/6736)).

### Fixes, spelling & minor tweaks

- Remove deprecated reference and use `skimage.measure.marching_cubes` in gallery example \"Marching Cubes\" ([#6377](https://github.com/scikit-image/scikit-image/pull/6377)).
- List only the two primary OS-independent methods of installing scikit-image ([#6557](https://github.com/scikit-image/scikit-image/pull/6557), [#6560](https://github.com/scikit-image/scikit-image/pull/6560)).
- Fix description of `connectivity` parameter in the docstring of `skimage.morphology.flood` ([#6534](https://github.com/scikit-image/scikit-image/pull/6534)).
- Fix formatting in the docstring of `skimage.metrics.hausdorff_distance` ([#6203](https://github.com/scikit-image/scikit-image/pull/6203)).
- Fix typo in docstring of `skimage.measure.moments_hu` ([#6016](https://github.com/scikit-image/scikit-image/pull/6016)).
- Fix formatting of mode parameter in `skimage.util.random_noise` ([#6532](https://github.com/scikit-image/scikit-image/pull/6532)).
- Fix broken links in SKIP 3 ([#6445](https://github.com/scikit-image/scikit-image/pull/6445)).
- Fix broken link in docstring of `skimage.filters.sobel` ([#6474](https://github.com/scikit-image/scikit-image/pull/6474)).
- Change \"neighbour\" to EN-US spelling \"neighbor\" ([#6204](https://github.com/scikit-image/scikit-image/pull/6204)).
- Add missing copyrights to LICENSE.txt and use formatting according to SPDX identifiers ([#6419](https://github.com/scikit-image/scikit-image/pull/6419)).
- Include `skimage.morphology.footprint_from_sequence` in the public API documentation ([#6555](https://github.com/scikit-image/scikit-image/pull/6555)).
- Correct note about return type in the docstring of `skimage.exposure.rescale_intensity` ([#6582](https://github.com/scikit-image/scikit-image/pull/6582)).
- Stop using the `git://` connection protocol and remove references to it ([#6201](https://github.com/scikit-image/scikit-image/pull/6201), [#6283](https://github.com/scikit-image/scikit-image/pull/6283)).
- Update scikit-image\'s mailing addresses to the new domain discuss.scientific-python.org ([#6255](https://github.com/scikit-image/scikit-image/pull/6255)).
- Remove references to deprecated mailing list in `doc/source/user_guide/getting_help.rst` ([#6575](https://github.com/scikit-image/scikit-image/pull/6575)).
- Use \"center\" in favor of \"centre\", and \"color\" in favor of \"colour\" gallery examples ([#6421](https://github.com/scikit-image/scikit-image/pull/6421), [#6422](https://github.com/scikit-image/scikit-image/pull/6422)).
- Replace reference to `api_changes.rst` with `release_dev.rst` ([#6495](https://github.com/scikit-image/scikit-image/pull/6495)).
- Clarify header pointing to notes for latest version released ([#6508](https://github.com/scikit-image/scikit-image/pull/6508)).
- Add missing spaces to error message in `skimage.measure.regionprops` ([#6545](https://github.com/scikit-image/scikit-image/pull/6545)).
- Apply codespell to fix common spelling mistakes ([#6537](https://github.com/scikit-image/scikit-image/pull/6537)).
- Add missing space in math directive in normalized_mutual_information\'s docstring ([#6549](https://github.com/scikit-image/scikit-image/pull/6549)).
- Fix lengths of docstring heading underline in `skimage.morphology.isotropic_` functions ([#6628](https://github.com/scikit-image/scikit-image/pull/6628)).
- Fix plot order due to duplicate examples with the file name `plot_thresholding.py` ([#6644](https://github.com/scikit-image/scikit-image/pull/6644)).
- Get rid of numpy deprecation warning in gallery example `plot_equalize` ([#6650](https://github.com/scikit-image/scikit-image/pull/6650)).
- Fix swapping of opening and closing in gallery example `plot_rank_filters` ([#6652](https://github.com/scikit-image/scikit-image/pull/6652)).
- Get rid of numpy deprecation warning in gallery example `in plot_log_gamma.py` ([#6655](https://github.com/scikit-image/scikit-image/pull/6655)).
- Remove warnings and unnecessary messages in gallery example \"Tinting gray-scale images\" ([#6656](https://github.com/scikit-image/scikit-image/pull/6656)).
- Update the contribution guide to recommend creating the virtualenv outside the source tree ([#6675](https://github.com/scikit-image/scikit-image/pull/6675)).
- Fix typo in docstring of `skimage.data.coffee` ([#6740](https://github.com/scikit-image/scikit-image/pull/6740)).
- Add missing backtick in docstring of `skimage.graph.merge_nodes` ([#6741](https://github.com/scikit-image/scikit-image/pull/6741)).
- Fix typo in `skimage.metrics.variation_of_information` ([#6768](https://github.com/scikit-image/scikit-image/pull/6768)).

## Other and development related updates

### Governance & planning

- Add draft of SKIP 4 \"Transitioning to scikit-image 2.0\" ([#6339](https://github.com/scikit-image/scikit-image/pull/6339), [#6353](https://github.com/scikit-image/scikit-image/pull/6353)).

### Maintenance

- Prepare release notes for v0.20.0 ([#6556](https://github.com/scikit-image/scikit-image/pull/6556), [#6766](https://github.com/scikit-image/scikit-image/pull/6766)).
- Add and test alternative build system based on Meson as an alternative to the deprecated distutils system ([#6536](https://github.com/scikit-image/scikit-image/pull/6536)).
- Use `cnp.float32_t` and `cnp.float64_t` over `float` and `double` in Cython code ([#6303](https://github.com/scikit-image/scikit-image/pull/6303)).
- Move `skimage/measure/mc_meta` folder into `tools/precompute/` folder to avoid its unnecessary distribution to users ([#6294](https://github.com/scikit-image/scikit-image/pull/6294)).
- Remove unused function `getLutNames` in `tools/precompute/mc_meta/createluts.py` ([#6294](https://github.com/scikit-image/scikit-image/pull/6294)).
- Point urls for data files to a specific commit ([#6297](https://github.com/scikit-image/scikit-image/pull/6297)).
- Drop Codecov badge from project README ([#6302](https://github.com/scikit-image/scikit-image/pull/6302)).
- Remove undefined reference to `'python_to_notebook'` in `doc/ext/notebook_doc.py` ([#6307](https://github.com/scikit-image/scikit-image/pull/6307)).
- Parameterize tests in `skimage.measure.tests.test_moments` ([#6323](https://github.com/scikit-image/scikit-image/pull/6323)).
- Avoid unnecessary copying in `skimage.morphology.skeletonize` and update code style and tests ([#6327](https://github.com/scikit-image/scikit-image/pull/6327)).
- Fix typo in `_probabilistic_hough_line` ([#6373](https://github.com/scikit-image/scikit-image/pull/6373)).
- Derive OBJECT_COLUMNS from COL_DTYPES in `skimage.measure._regionprops` ([#6389](https://github.com/scikit-image/scikit-image/pull/6389)).
- Support `loadtxt` of NumPy 1.23 with `skimage/feature/orb_descriptor_positions.txt` ([#6400](https://github.com/scikit-image/scikit-image/pull/6400)).
- Exclude pillow 9.1.1 from supported requirements ([#6384](https://github.com/scikit-image/scikit-image/pull/6384)).
- Use the same numpy version dependencies for building as used by default ([#6409](https://github.com/scikit-image/scikit-image/pull/6409)).
- Forward-port v0.19.1 and v0.19.2 release notes ([#6253](https://github.com/scikit-image/scikit-image/pull/6253)).
- Forward-port v0.19.3 release notes ([#6416](https://github.com/scikit-image/scikit-image/pull/6416)).
- Exclude submodules of `doc.*` from package install ([#6428](https://github.com/scikit-image/scikit-image/pull/6428)).
- Substitute deprecated `vertices` with `simplices` in `skimage.transform._geometric` ([#6430](https://github.com/scikit-image/scikit-image/pull/6430)).
- Fix minor typo in `skimage.filters.sato` ([#6434](https://github.com/scikit-image/scikit-image/pull/6434)).
- Simplify sort-by-absolute-value in ridge filters ([#6440](https://github.com/scikit-image/scikit-image/pull/6440)).
- Removed completed items in `TODO.txt` ([#6442](https://github.com/scikit-image/scikit-image/pull/6442)).
- Remove duplicate import in `skimage.feature._canny` ([#6457](https://github.com/scikit-image/scikit-image/pull/6457)).
- Use `with open(...) as f` instead of `f = open(...)` ([#6458](https://github.com/scikit-image/scikit-image/pull/6458)).
- Use context manager when possible ([#6484](https://github.com/scikit-image/scikit-image/pull/6484)).
- Use `broadcast_to` instead of `as_strided` to generate broadcasted arrays ([#6476](https://github.com/scikit-image/scikit-image/pull/6476)).
- Use `moving_image` in docstring of `skimage.registration._optical_flow._tvl1` ([#6480](https://github.com/scikit-image/scikit-image/pull/6480)).
- Use `pyplot.get_cmap` instead of deprecated `cm.get_cmap` in `skimage.future.graph.show_rag` for compatibility with matplotlib 3.3 to 3.6 ([#6483](https://github.com/scikit-image/scikit-image/pull/6483), [#6490](https://github.com/scikit-image/scikit-image/pull/6490)).
- Update `plot_euler_number.py` for maplotlib 3.6 compatibility ([#6522](https://github.com/scikit-image/scikit-image/pull/6522)).
- Make non-functional change to build.txt to fix cache issue on CircleCI ([#6528](https://github.com/scikit-image/scikit-image/pull/6528)).
- Update deprecated field `license_file` to `license_files` in `setup.cfg` ([#6529](https://github.com/scikit-image/scikit-image/pull/6529)).
- Ignore codespell fixes with git blame ([#6539](https://github.com/scikit-image/scikit-image/pull/6539)).
- Remove `FUNDING.yml` in preference of org version ([#6553](https://github.com/scikit-image/scikit-image/pull/6553)).
- Handle pending changes to `tifffile.imwrite` defaults and avoid test warnings ([#6460](https://github.com/scikit-image/scikit-image/pull/6460)).
- Handle deprecation by updating to `networkx.to_scipy_sparse_array` ([#6564](https://github.com/scikit-image/scikit-image/pull/6564)).
- Update minimum supported numpy, scipy, and networkx ([#6385](https://github.com/scikit-image/scikit-image/pull/6385)).
- Apply linting results after enabling pre-commit in CI ([#6568](https://github.com/scikit-image/scikit-image/pull/6568)).
- Refactor lazy loading to use stubs & lazy_loader package ([#6577](https://github.com/scikit-image/scikit-image/pull/6577)).
- Update sphinx configuration ([#6579](https://github.com/scikit-image/scikit-image/pull/6579)).
- Update `pyproject.toml` to support Python 3.11 and to fix 32-bit pinned packages on Windows ([#6519](https://github.com/scikit-image/scikit-image/pull/6519)).
- Update primary email address in mailmap entry for grlee77 ([#6639](https://github.com/scikit-image/scikit-image/pull/6639)).
- Handle new warnings introduced in NumPy 1.24 ([#6637](https://github.com/scikit-image/scikit-image/pull/6637)).
- Remove unnecessary dependency on ninja in `pyproject.toml` ([#6634](https://github.com/scikit-image/scikit-image/pull/6634)).
- Pin to latest meson-python `>=0.11.0` ([#6627](https://github.com/scikit-image/scikit-image/pull/6627)).
- Increase warning stacklevel by 1 in `skimage.color.lab2xyz` ([#6613](https://github.com/scikit-image/scikit-image/pull/6613)).
- Update OpenBLAS to v0.3.17 ([#6607](https://github.com/scikit-image/scikit-image/pull/6607), [#6610](https://github.com/scikit-image/scikit-image/pull/6610)).
- Fix Meson build on windows in sync with SciPy ([#6609](https://github.com/scikit-image/scikit-image/pull/6609)).
- Set `check: true` for `run_command` in `skimage/meson.build` ([#6606](https://github.com/scikit-image/scikit-image/pull/6606)).
- Add `dev.py` and setup commands ([#6600](https://github.com/scikit-image/scikit-image/pull/6600)).
- Organize `dev.py` commands into sections ([#6629](https://github.com/scikit-image/scikit-image/pull/6629)).
- Remove thumbnail_size in config since sphinx-gallery\>=0.9.0 ([#6647](https://github.com/scikit-image/scikit-image/pull/6647)).
- Add new test cases for `skimage.transform.resize` ([#6669](https://github.com/scikit-image/scikit-image/pull/6669)).
- Use meson-python main branch ([#6671](https://github.com/scikit-image/scikit-image/pull/6671)).
- Simplify QhullError import ([#6677](https://github.com/scikit-image/scikit-image/pull/6677)).
- Remove old SciPy cruft ([#6678](https://github.com/scikit-image/scikit-image/pull/6678), [#6681](https://github.com/scikit-image/scikit-image/pull/6681)).
- Remove old references to imread package ([#6680](https://github.com/scikit-image/scikit-image/pull/6680)).
- Remove pillow cruft (and a few other cleanups) ([#6683](https://github.com/scikit-image/scikit-image/pull/6683)).
- Remove leftover `gtk_plugin.ini` ([#6686](https://github.com/scikit-image/scikit-image/pull/6686)).
- Prepare v0.20.0rc0 ([#6706](https://github.com/scikit-image/scikit-image/pull/6706)).
- Remove pre-release suffix for for Python 3.11 ([#6709](https://github.com/scikit-image/scikit-image/pull/6709)).
- Loosen tests for SciPy 1.10 ([#6715](https://github.com/scikit-image/scikit-image/pull/6715)).
- Specify C flag only if supported by compiler ([#6716](https://github.com/scikit-image/scikit-image/pull/6716)).
- Extract version info from `skimage/__init__.py` in `skimage/meson.build` ([#6723](https://github.com/scikit-image/scikit-image/pull/6723)).
- Fix Cython errors/warnings ([#6725](https://github.com/scikit-image/scikit-image/pull/6725)).
- Generate pyproject deps from requirements ([#6726](https://github.com/scikit-image/scikit-image/pull/6726)).
- MAINT: Use `uintptr_t` to calculate new heap ptr positions ([#6734](https://github.com/scikit-image/scikit-image/pull/6734)).
- Bite the bullet: remove distutils and setup.py ([#6738](https://github.com/scikit-image/scikit-image/pull/6738)).
- Use meson-python developer version ([#6753](https://github.com/scikit-image/scikit-image/pull/6753)).
- Require `setuptools` 65.6+ ([#6751](https://github.com/scikit-image/scikit-image/pull/6751)).
- Remove `setup.cfg`, use `pyproject.toml` instead ([#6758](https://github.com/scikit-image/scikit-image/pull/6758)).
- Update `pyproject.toml` to use `meson-python>=0.13.0rc0` ([#6759](https://github.com/scikit-image/scikit-image/pull/6759)).

### Benchmarks

- Add benchmarks for `morphology.local_maxima` ([#3255](https://github.com/scikit-image/scikit-image/pull/3255)).
- Add benchmarks for `skimage.morphology.reconstruction` ([#6342](https://github.com/scikit-image/scikit-image/pull/6342)).
- Update benchmark environment to Python 3.10 and NumPy 1.23 ([#6511](https://github.com/scikit-image/scikit-image/pull/6511)).

### CI & automation

- Add Github `actions/stale` to label \"dormant\" issues and PRs ([#6506](https://github.com/scikit-image/scikit-image/pull/6506), [#6546](https://github.com/scikit-image/scikit-image/pull/6546), [#6552](https://github.com/scikit-image/scikit-image/pull/6552)).
- Fix the autogeneration of API docs for lazy loaded subpackages ([#6075](https://github.com/scikit-image/scikit-image/pull/6075)).
- Checkout gh-pages with a shallow clone ([#6085](https://github.com/scikit-image/scikit-image/pull/6085)).
- Fix dev doc build ([#6091](https://github.com/scikit-image/scikit-image/pull/6091)).
- Fix CI by excluding Pillow 9.1.0 ([#6315](https://github.com/scikit-image/scikit-image/pull/6315)).
- Pin pip pip to \<22.1 in `tools/github/before_install.sh` ([#6379](https://github.com/scikit-image/scikit-image/pull/6379)).
- Update GH actions from v2 to v3 ([#6382](https://github.com/scikit-image/scikit-image/pull/6382)).
- Update to supported CircleCI images ([#6401](https://github.com/scikit-image/scikit-image/pull/6401)).
- Use artifact-redirector ([#6407](https://github.com/scikit-image/scikit-image/pull/6407)).
- Forward-port gh-6369: Fix windows wheels: use vsdevcmd.bat to make sure rc.exe is on the path ([#6417](https://github.com/scikit-image/scikit-image/pull/6417)).
- Restrict GitHub Actions permissions to required ones ([#6426](https://github.com/scikit-image/scikit-image/pull/6426), [#6504](https://github.com/scikit-image/scikit-image/pull/6504)).
- Update to Ubuntu LTS version on Actions workflows ([#6478](https://github.com/scikit-image/scikit-image/pull/6478)).
- Relax label name comparison in `benchmarks.yaml` workflow ([#6520](https://github.com/scikit-image/scikit-image/pull/6520)).
- Add linting via pre-commit ([#6563](https://github.com/scikit-image/scikit-image/pull/6563)).
- Add CI tests for Python 3.11 ([#6566](https://github.com/scikit-image/scikit-image/pull/6566)).
- Fix CI for Scipy 1.9.2 ([#6567](https://github.com/scikit-image/scikit-image/pull/6567)).
- Test optional Py 3.10 dependencies on MacOS ([#6580](https://github.com/scikit-image/scikit-image/pull/6580)).
- Pin setuptools in GHA MacOS workflow and `azure-pipelines.yml` ([#6626](https://github.com/scikit-image/scikit-image/pull/6626)).
- Build Python 3.11 wheels ([#6581](https://github.com/scikit-image/scikit-image/pull/6581)).
- Fix doc build on CircleCI and add ccache ([#6646](https://github.com/scikit-image/scikit-image/pull/6646)).
- Build wheels on CI via branch rather than tag ([#6668](https://github.com/scikit-image/scikit-image/pull/6668)).
- Do not build wheels on pushes to main ([#6673](https://github.com/scikit-image/scikit-image/pull/6673)).
- Use `tools/github/before_install.sh` wheels workflow ([#6718](https://github.com/scikit-image/scikit-image/pull/6718)).
- Use Ruff for linting ([#6729](https://github.com/scikit-image/scikit-image/pull/6729)).
- Use test that can fail for sdist ([#6731](https://github.com/scikit-image/scikit-image/pull/6731)).
- Fix fstring in `skimage._shared._warnings.expected_warnings` ([#6733](https://github.com/scikit-image/scikit-image/pull/6733)).
- Build macosx/py38 wheel natively ([#6743](https://github.com/scikit-image/scikit-image/pull/6743)).
- Remove CircleCI URL check ([#6749](https://github.com/scikit-image/scikit-image/pull/6749)).
- CI Set MACOSX_DEPLOYMENT_TARGET=10.9 for Wheels ([#6750](https://github.com/scikit-image/scikit-image/pull/6750)).
- Add temporary workaround until new meson-python release ([#6757](https://github.com/scikit-image/scikit-image/pull/6757)).
- Update action to use new environment file ([#6762](https://github.com/scikit-image/scikit-image/pull/6762)).
- Autogenerate pyproject.toml ([#6763](https://github.com/scikit-image/scikit-image/pull/6763)).

## 71 authors contributed to this release \[alphabetical by first name or login\]

- Adeel Hassan
- Albert Y. Shih
- AleixBP (AleixBP)
- Alex (sashashura)
- Alexandr Kalinin
- Alexandre de Siqueira
- Amin (MOAMSA)
- Antony Lee
- Balint Varga
- Ben Greiner
- bsmietanka (bsmietanka)
- Chris Roat
- Chris Wood
- Daria
- Dave Mellert
- Dudu Lasry
- Elena Pascal
- Eli Schwartz
- Fabian Schneider
- forgeRW (forgeRW)
- Frank A. Krueger
- Gregory Lee
- Gus Becker
- Hande Gözükan
- Jacob Rosenthal
- James Gao
- Jan Kadlec
- Jan-Hendrik Müller
- Jan-Lukas Wynen
- Jarrod Millman
- Jeremy Muhlich
- johnthagen (johnthagen)
- Joshua Newton
- Juan DF
- Juan Nunez-Iglesias
- Judd Storrs
- Larry Bradley
- Lars Grüter
- lihaitao (li1127217ye)
- Lucas Johnson
- Malinda (maldil)
- Marianne Corvellec
- Mark Harfouche
- Martijn Courteaux
- Marvin Albert
- Matthew Brett
- Matthias Bussonnier
- Miles Lucas
- Nathan Chan
- Naveen
- OBgoneSouth (OBgoneSouth)
- Oren Amsalem
- Preston Buscay
- Peter Sobolewski
- Peter Bell
- Ray Bell
- Riadh Fezzani
- Robin Thibaut
- Ross Barnowski
- samtygier (samtygier)
- Sandeep N Menon
- Sanghyeok Hyun
- Sebastian Berg
- Sebastian Wallkötter
- Simon-Martin Schröder
- Stefan van der Walt
- Teemu Kumpumäki
- Thanushi Peiris
- Thomas Voigtmann
- Tim-Oliver Buchholz
- Tyler Reddy

## 42 reviewers contributed to this release \[alphabetical by first name or login\]

- Abhijeet Parida
- Albert Y. Shih
- Alex (sashashura)
- Alexandre de Siqueira
- Antony Lee
- Ben Greiner
- Carlo Dri
- Chris Roat
- Daniele Nicolodi
- Daria
- Dudu Lasry
- Eli Schwartz
- François Boulogne
- Gregory Lee
- Gus Becker
- Jacob Rosenthal
- James Gao
- Jan-Hendrik Müller
- Jarrod Millman
- Juan DF
- Juan Nunez-Iglesias
- Lars Grüter
- Malinda (maldil)
- Marianne Corvellec
- Mark Harfouche
- Martijn Courteaux
- Marvin Albert
- Matthias Bussonnier
- Oren Amsalem
- Ralf Gommers
- Riadh Fezzani
- Robert Haase
- Robin Thibaut
- Sandeep N Menon
- Sanghyeok Hyun
- Sebastian Berg
- Sebastian Wallkötter
- Simon-Martin Schröder
- Stefan van der Walt
- Thanushi Peiris
- Thomas Voigtmann

v0.20.0rc8 (2023-02-20)

No notes available

v0.20.0rc7 (2023-02-17)

No notes available

v0.20.0rc6 (2023-02-16)

No notes available

v0.20.0rc5 (2023-02-13)

No notes available

v0.20.0rc4 (2023-02-07)

No notes available

v0.19.3 (2022-06-12)

Announcement: scikit-image 0.19.3
=================================

We're happy to announce the release of scikit-image v0.19.3!

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

Bugs Fixed
----------
- Revert unintentional change to default multichannel behavior introduced in v0.19.0 for ``skimage.restoration.cycle_spin`` (now defaults to single channel again)
- Fix corner case with an optimal angle of 0 degrees in hough_line_peaks
- Fixed the gallery example involving registration with log-polar transformations
- Update test suite for compatibility with the most recent ``tifffile`` release.
- warp/rotate: fixed a bug with clipping when cval is not in the input range
- Fix computation of histogram bins for multichannel integer-valued images

General Maintenance
-------------------
- Update ``skimage.future.manual_polygon_segmentation`` to work with Matplotlib 3.5.
- Update ``skimage.io.imread`` to avoid warnings when using ``imageio``>=2.16.2.
- Now compatible with Pillow >= 9.1 (palette may contain <256 entries)
- Added support for NumPy 1.23

Pull Requests Included
----------------------
- Backport PR #6306 on branch v0.19.x (Fix for error in 'Using Polar and Log-Polar Transformations for Registration') (#6312)
- Backport PR #6271 on branch v0.19.x (hough_line_peaks fix for corner case with optimal angle=0) (#6313)
- Backport PR #6261 on branch v0.19.x (Ignore sparse matrix deprecation warning) (#6316)
- backport PR 6328: Fix issue with newer versions of matplotlib in manual segmentation (#6334)
- Backport PR #6343 on branch v0.19.x (avoid warnings about change to v3 API from imageio) (#6344)
- Backport PR #6355 on branch v0.19.x (remove use of deprecated kwargs from `test_tifffile_kwarg_passthrough`) (#6357)
- Backport PR #6352 on branch v0.19.x (Fix channel_axis default for cycle_spin) (#6358)
- Backport PR #6348 on branch v0.19.x (Fix smoothed image computation when mask is None in canny) (#6359)
- Backport PR #6361 on branch v0.19.x (Document support for Path objects in io functions) (#6363)
- Backport PR #6400 on branch v0.19.x (Add support for NumPy 1.23) (#6403)
- Backport PR #6335 on branch v0.19.x (warp/rotate: fixed a bug with clipping when cval is not in the input range) (#6411)
- Backport PR #6413 on branch v0.19.x (Fix computation of histogram bins for multichannel integer-valued images) (#6414)

10 authors added to this release [alphabetical by first name or login]
----------------------------------------------------------------------
- Albert Y. Shih
- Bartłomiej Śmietanka
- Dave Mellert
- Gregory Lee
- Graham Inggs
- Jarrod Millman
- John Hagen
- Mark Harfouche
- Riadh Fezzani
- Stefan van der Walt

7 reviewers added to this release [alphabetical by first name or login]
-----------------------------------------------------------------------
- Alexandre de Siqueira
- Gregory Lee
- Jarrod Millman
- Juan Nunez-Iglesias
- Lars Grüter
- Mark Harfouche
- Riadh Fezzani

v0.19.2 (2022-02-17)

scikit-image 0.19.2
===================

We're happy to announce the release of scikit-image v0.19.2! This is primarily
a bug fix release, although there is one new gallery example related to
detection of fluorescence at the nuclear envelope of mammalian cells.

Pull Requests Included
----------------------
- fix mistake in tests.yml made during backport (gh-6129)
- Backport PR #6145 on branch v0.19.x (Fix channel_axis handling in pyramid_gaussian and pyramid_laplace) (gh-6155)
- Backport PR #6130 on branch v0.19.x (bump deprecated Azure windows environment) (gh-6131)
- Backport PR #6148 on branch v0.19.x (deprecate n_iter_max (should be max_num_iter)) (gh-6156)
- Backport PR #6152 on branch v0.19.x (specify python version used by mybinder.org for gallery demos) (gh-6157)
- Backport PR #6139 on branch v0.19.x (fix phase_cross_correlation typo) (gh-6158)
- Backport PR #6133 on branch v0.19.x (Update user warning message for viewer module.) (gh-6159)
- Backport PR #6169 on branch v0.19.x (Fix unintended change to output dtype of match_histograms) (gh-6172)
- Backport PR #6184 on branch v0.19.x (Fix SIFT wrong octave indices + typo) (gh-6186)
- Backport PR #6191 on branch v0.19.x (Fix issue6190 - inconsistent default parameters in pyramids.py) (gh-6193)
- Backport PR #6207 on branch v0.19.x (Always set params to nan when ProjectiveTransform.estimate fails) (gh-6210)
- Backport PR #5262 on branch v0.19.x (Add textbook-like tutorial on measuring fluorescence at nuclear envelope.) (gh-6213)
- Backport PR #6087 on branch v0.19.x (Add two datasets for use in upcoming scientific tutorials.) (gh-6215)
- Backport PR #6214 on branch v0.19.x (EuclideanTransform.estimate should return False when NaNs are present) (gh-6221)
- Backport PR #6219 on branch v0.19.x (Allow the output_shape argument to be any iterable for resize and resize_local_mean) (gh-6222)
- Backport PR #6223 on branch v0.19.x (Update filename in testing instructions.) (gh-6225)
- Backport PR #6231 on branch v0.19.x (Update imports/refs from deprecated scipy.ndimage.filters namespace) (gh-6233)
- Backport PR #6229 on branch v0.19.x (Remove redundant testing on Appveyor) (gh-6234)
- Backport PR #6183 on branch v0.19.x (Fix decorators warnings stacklevel) (gh-6238)
- Backport PR #6239 on branch v0.19.x (DOC: fix SciPy intersphinx) (gh-6241)
- Backport PR #6232 on branch v0.19.x (Include Cython sources via package_data) (gh-6244)
- Backport PR #6227 on branch v0.19.x (Fix calculation of Z normal in marching cubes) (gh-6245)
- Backport PR #6242 on branch v0.19.x (Fix bug in SLIC superpixels with `enforce_connectivity=True` and `start_label > 0`) (gh-6246)
- Backport PR #6211 on branch v0.19.x (PiecewiseAffineTransform.estimate return should reflect underlying transforms) gh-6247
- update MacOS libomp installation in wheel building script (gh-6249)


9 authors added to this release [alphabetical by first name or login]
---------------------------------------------------------------------
- Chris Roat
- Fabian Schneider
- Gregory Lee
- Hande Gözükan
- Larry Bradley
- Marianne Corvellec
- Mark Harfouche
- Miles Lucas
- Riadh Fezzani

8 reviewers added to this release [alphabetical by first name or login]
-----------------------------------------------------------------------
- Alexandre de Siqueira
- Gregory Lee
- Juan Nunez-Iglesias
- Marianne Corvellec
- Mark Harfouche
- Riadh Fezzani
- Robert Haase
- Stefan van der Walt

v0.19.1 (2021-12-15)

scikit-image 0.19.1
===================

We're happy to announce the release of scikit-image v0.19.1!

This is a small bug fix release that resolves a couple of backwards compatibility issues and a couple of issues with the wheels on PyPI. Specifically, MacOS wheels for Apple M1 (arm64) on PyPI were broken in 0.19.0, but should now be repaired. The arm64 wheels are for MacOs >= 12 only. Wheel sizes are also greatly reduced relative to 0.19.0 by stripping debug symbols from the binaries and making sure that Cython-generated source files are not bundled in the wheels.


Pull Requests Included
----------------------
- Backport PR #6097 on branch v0.19.x (Restore non-underscore functions in skimage.data) (gh-6099)
- Backport PR #6095 on branch v0.19.x (Preserve backwards compatibility for `channel_axis` parameter in transform functions) (gh-6100)
- Backport PR #6103 on branch v0.19.x (Make rank filter test comparisons robust across architectures) (gh-6106)
- Backport PR #6105 on branch v0.19.x (Pass a specific random_state into ransac in test_ransac_geometric) (gh-6107)
- Fix two equality comparison bugs in the wheel build script (gh-6098)
- Backport of gh-6109 (Add linker flags to strip debug symbols during wheel building) (gh-6110)
- Pin setuptools maximum in v0.19.x to avoid breaking on planned distutils API changes (gh-6112)
- Avoid potential circular import of rgb2gray (gh-6113)
- Backport PR #6089 on branch v0.19.x (Skip tests requiring fetched data) (gh-6115)
- Backport PR #6118 on branch v0.19.x (Fixes to tests.yml and fixes for expected warnings) (gh-6127)
- Backport PR #6114 on branch v0.19.x (Relax test condition to make it more robust to variable CI load) (gh-6128)


3 authors added to this release [alphabetical by first name or login]
---------------------------------------------------------------------
- Gregory R. Lee
- Joshua Newton
- Mark Harfouche

5 reviewers added to this release [alphabetical by first name or login]
-----------------------------------------------------------------------
- Gregory R. Lee
- Juan Nunez-Iglesias
- Marianne Corvellec
- Mark Harfouche
- Stefan van der Walt