doc/source/release_notes/release_0.26.rst
We're happy to announce the release of scikit-image 0.26.0!
max_step_cost to skimage.graph.MCP.find_costs which allows limiting the maximal stepping cost between points (#7625 <https://github.com/scikit-image/scikit-image/pull/7625>_).skimage.transform, add the identity class constructor to all geometric transforms. For example, you can now use skimage.transform.PolynomialTransform(dimensionality=2) (#7754 <https://github.com/scikit-image/scikit-image/pull/7754>_).intensity_median to skimage.measure.regionprops (#7745 <https://github.com/scikit-image/scikit-image/pull/7745>_).binary_blobs now supports a mode parameter for the Gaussian filter, allowing periodic boundary conditions with mode="wrap" (#7909 <https://github.com/scikit-image/scikit-image/pull/7909>_).skimage.morphology, deprecate binary_erosion, binary_dilation, binary_opening, and binary_closing in favor of erosion, dilation, opening, and closing respectively. The binary versions weren't actually significantly faster than their non-binary counterparts and sometimes significantly slower. In the future, we might add optimizations internally to the remaining (general, non-binary) functions for when they're used with binary inputs (#7665 <https://github.com/scikit-image/scikit-image/pull/7665>_).max_cost in skimage.graph.MCP.find_costs which previously did nothing. Use the new parameter max_step_cost instead (#7625 <https://github.com/scikit-image/scikit-image/pull/7625>_).max_cumulative_cost in skimage.graph.MCP.find_costs which did nothing (#7625 <https://github.com/scikit-image/scikit-image/pull/7625>_).skimage.morphology.remove_small_holes, deprecate the area_threshold parameter in favor of the new max_size parameter to make API and behavior clearer. This new threshold removes holes smaller than or equal to its value, while the previous parameter only removed smaller ones (#7739 <https://github.com/scikit-image/scikit-image/pull/7739>_).skimage.morphology.remove_small_objects, deprecate the min_size parameter in favor of the new max_size parameter to make API and behavior clearer. This new threshold removes objects smaller than or equal to its value, while the previous parameter only removed smaller ones (#7739 <https://github.com/scikit-image/scikit-image/pull/7739>_).skimage.transform, deprecate the use of scalar scale, with dimensionality=3 where this can be passed to a geometric transform contructor. This allows us to generalize the use of the constructors to the case where the parameters must specify the dimensionality, unless you mean to construct an identity transform (#7754 <https://github.com/scikit-image/scikit-image/pull/7754>_).skimage.transform, turn all input parameters to transform constructors keyword-only (other than matrix). This avoids confusion due to the positional parameter order being different from the order by which they are applied in AffineTransform (#7754 <https://github.com/scikit-image/scikit-image/pull/7754>_).num_threads in skimage.restoration.rolling_ball; use workers instead (#7302 <https://github.com/scikit-image/scikit-image/pull/7302>_).num_workers in skimage.restoration.cycle_spin; use workers instead (#7302 <https://github.com/scikit-image/scikit-image/pull/7302>_).skimage.measure.regionprops and related functions. While we removed the documentation for these some time ago, they where still accessible as keys (via __get_item__) or attributes. Going forward, using deprecated keys or attributes, will emit an appropriate warning (#7778 <https://github.com/scikit-image/scikit-image/pull/7778>_).skimage.measure, add a new class method and constructor from_estimate for LineModelND, CircleModel, and EllipseModel. This replaces the old API—the now deprecated estimate method—which required initalizing a model with undefined parameters before calling estimate (#7771 <https://github.com/scikit-image/scikit-image/pull/7771>_).skimage.transform, add a new class method and constructor from_estimate for AffineTransform, EssentialMatrixTransform, EuclideanTransform, FundamentalMatrixTransform, PiecewiseAffineTransform, PolynomialTransform, ProjectiveTransform, SimilarityTransform, and ThinPlateSplineTransform. This replaces the old API—the now deprecated estimate method—which required initializing an undefined transform before calling estimate (#7771 <https://github.com/scikit-image/scikit-image/pull/7771>_).skimage.measure.fit.BaseModel; after we expire the other *Model* deprecations, there is no work for an ancestor class to do (#7789 <https://github.com/scikit-image/scikit-image/pull/7789>_).skimage.measure, deprecate .params attributes of the models CircleModel, EllipseModel, and LineModelND. Instead set model-specific attributes: origin, direction for LineModelND; center, radius for CircleModel, center, ax_lens, theta for EllipseModel (#7789 <https://github.com/scikit-image/scikit-image/pull/7789>_).skimage.measure, deprecate use of model constructor calls without arguments leaving an uninitialized instance (for example CircleModel()). This applies to CircleModel, EllipseModel, and LineModelND. Instead prefer input arguments to define instances (for example CircleModel(center, radius)). This follows on from prior deprecation of the estimate method, which had implied the need for the no-argument constructor, of form cm = CircleMoldel(); cm.estimate(data) (#7789 <https://github.com/scikit-image/scikit-image/pull/7789>_).skimage.measure, deprecate use of params arguments to predict* calls of model objects. This applies to CircleModel, EllipseModel, and LineModelND. We now ask instead that the user provide initialization equivalent to the params content in the class construction. For example, prefer cm = CircleModel((2, 3), 4); x = cm.predict_x(t) to cm = CircleMoldel(); x = cm.predict_x(t, params=(2, 3, 4))) (#7789 <https://github.com/scikit-image/scikit-image/pull/7789>_).ValueError instead of a TypeError in CircleModel, EllipseModel, and LineModelND in skimage.measure. This applies when failing to pass a value for params (or passing params=None) to predict methods of an uninitialized transform (#7789 <https://github.com/scikit-image/scikit-image/pull/7789>_).skimage.measure, the RegionProperties class that is returned by regionprops, now has a formatted string representation (__repr__). This representation includes the label of the region and its bounding box (#7887 <https://github.com/scikit-image/scikit-image/pull/7887>_).skimage.measure.moments_central (#7947 <https://github.com/scikit-image/scikit-image/pull/7947>_).#7035 <https://github.com/scikit-image/scikit-image/pull/7035>_).#7589 <https://github.com/scikit-image/scikit-image/pull/7589>_).skimage.filters.sobel/scharr/prewitt/farid, when mode="constant" is used ensure that cval has an effect. It didn't previously (#7826 <https://github.com/scikit-image/scikit-image/pull/7826>_).skimage.graph.cut_normalized is deterministic when seeded with the rng parameter and when SciPy 1.17.0.dev0 or newer is installed. With earlier SciPy versions the internally used function scipy.linalg.eigsh is not deterministic and can lead to different results (#7912 <https://github.com/scikit-image/scikit-image/pull/7912>_).skimage.morphology.reconstruction (#7938 <https://github.com/scikit-image/scikit-image/pull/7938>_).axis_major_length and axis_minor_length properties of skimage.measure.regionprops (#7916 <https://github.com/scikit-image/scikit-image/pull/7916>_).skimage.util.random_noise, ensure that clip argument is handled consistently for various modes (#7924 <https://github.com/scikit-image/scikit-image/pull/7924>_).#7974 <https://github.com/scikit-image/scikit-image/pull/7974>_).#7710 <https://github.com/scikit-image/scikit-image/pull/7710>_).#7706 <https://github.com/scikit-image/scikit-image/pull/7706>_).#7531 <https://github.com/scikit-image/scikit-image/pull/7531>_).#7716 <https://github.com/scikit-image/scikit-image/pull/7716>_).#7721 <https://github.com/scikit-image/scikit-image/pull/7721>_).#7737 <https://github.com/scikit-image/scikit-image/pull/7737>_).#7517 <https://github.com/scikit-image/scikit-image/pull/7517>_).import skimage as ski in the docstrings of ski.measure.euler_number, ski.measure.perimeter and ski.measure.perimeter_crofton (#7741 <https://github.com/scikit-image/scikit-image/pull/7741>_).skimage.metrics.normalized_mutual_information (#7750 <https://github.com/scikit-image/scikit-image/pull/7750>_).#7760 <https://github.com/scikit-image/scikit-image/pull/7760>_).#7518 <https://github.com/scikit-image/scikit-image/pull/7518>_).#7780 <https://github.com/scikit-image/scikit-image/pull/7780>_).#7763 <https://github.com/scikit-image/scikit-image/pull/7763>_).#7792 <https://github.com/scikit-image/scikit-image/pull/7792>_).#7804 <https://github.com/scikit-image/scikit-image/pull/7804>_).#7785 <https://github.com/scikit-image/scikit-image/pull/7785>_).#7764 <https://github.com/scikit-image/scikit-image/pull/7764>_).#7753 <https://github.com/scikit-image/scikit-image/pull/7753>_).skimage.measure.ransac in the gallery example "Assemble images with simple image stitching" deterministic. This avoids random non-deterministic failures (#7851 <https://github.com/scikit-image/scikit-image/pull/7851>_).#7523 <https://github.com/scikit-image/scikit-image/pull/7523>_).#7857 <https://github.com/scikit-image/scikit-image/pull/7857>_).#7865 <https://github.com/scikit-image/scikit-image/pull/7865>_).#7899 <https://github.com/scikit-image/scikit-image/pull/7899>_).skimage.feature, clarify the description of the parameter num_sigma in blob_log and blob_doh (#7774 <https://github.com/scikit-image/scikit-image/pull/7774>_).#7928 <https://github.com/scikit-image/scikit-image/pull/7928>_).#7929 <https://github.com/scikit-image/scikit-image/pull/7929>_).#7910 <https://github.com/scikit-image/scikit-image/pull/7910>_).#7950 <https://github.com/scikit-image/scikit-image/pull/7950>_).#7953 <https://github.com/scikit-image/scikit-image/pull/7953>_).#7956 <https://github.com/scikit-image/scikit-image/pull/7956>_).#7907 <https://github.com/scikit-image/scikit-image/pull/7907>_).#7957 <https://github.com/scikit-image/scikit-image/pull/7957>_).#7968 <https://github.com/scikit-image/scikit-image/pull/7968>_).#7987 <https://github.com/scikit-image/scikit-image/pull/7987>_).#7990 <https://github.com/scikit-image/scikit-image/pull/7990>_).#7520 <https://github.com/scikit-image/scikit-image/pull/7520>_).#7758 <https://github.com/scikit-image/scikit-image/pull/7758>_).#7752 <https://github.com/scikit-image/scikit-image/pull/7752>_).#7786 <https://github.com/scikit-image/scikit-image/pull/7786>_).pyodide-build==0.30.0, and ensure that the correct xbuildenvs are used (#7788 <https://github.com/scikit-image/scikit-image/pull/7788>_).cibuildwheel to build WASM/Pyodide wheels for scikit-image, push nightlies to Anaconda.org (#7440 <https://github.com/scikit-image/scikit-image/pull/7440>_).#7793 <https://github.com/scikit-image/scikit-image/pull/7793>_).#7806 <https://github.com/scikit-image/scikit-image/pull/7806>_).#7835 <https://github.com/scikit-image/scikit-image/pull/7835>_).#7802 <https://github.com/scikit-image/scikit-image/pull/7802>_).#7852 <https://github.com/scikit-image/scikit-image/pull/7852>_).#7870 <https://github.com/scikit-image/scikit-image/pull/7870>_).#7882 <https://github.com/scikit-image/scikit-image/pull/7882>_).#7905 <https://github.com/scikit-image/scikit-image/pull/7905>_).#7895 <https://github.com/scikit-image/scikit-image/pull/7895>_).#7915 <https://github.com/scikit-image/scikit-image/pull/7915>_).#7901 <https://github.com/scikit-image/scikit-image/pull/7901>_).pyproject.toml configuration (#7877 <https://github.com/scikit-image/scikit-image/pull/7877>_).#7807 <https://github.com/scikit-image/scikit-image/pull/7807>_).#7937 <https://github.com/scikit-image/scikit-image/pull/7937>_).#7940 <https://github.com/scikit-image/scikit-image/pull/7940>_).#7847 <https://github.com/scikit-image/scikit-image/pull/7847>_).#7949 <https://github.com/scikit-image/scikit-image/pull/7949>_).#7963 <https://github.com/scikit-image/scikit-image/pull/7963>_).#7969 <https://github.com/scikit-image/scikit-image/pull/7969>_).#7965 <https://github.com/scikit-image/scikit-image/pull/7965>_).#7958 <https://github.com/scikit-image/scikit-image/pull/7958>_).#7962 <https://github.com/scikit-image/scikit-image/pull/7962>_).#7978 <https://github.com/scikit-image/scikit-image/pull/7978>_).#7646 <https://github.com/scikit-image/scikit-image/pull/7646>_).#7673 <https://github.com/scikit-image/scikit-image/pull/7673>_).#7713 <https://github.com/scikit-image/scikit-image/pull/7713>_).#7714 <https://github.com/scikit-image/scikit-image/pull/7714>_).#7712 <https://github.com/scikit-image/scikit-image/pull/7712>_).#7715 <https://github.com/scikit-image/scikit-image/pull/7715>_).#7719 <https://github.com/scikit-image/scikit-image/pull/7719>_).#7720 <https://github.com/scikit-image/scikit-image/pull/7720>_).#7705 <https://github.com/scikit-image/scikit-image/pull/7705>_).#7787 <https://github.com/scikit-image/scikit-image/pull/7787>_).legacy_datasets, legacy_registry vars (#7677 <https://github.com/scikit-image/scikit-image/pull/7677>_).#7828 <https://github.com/scikit-image/scikit-image/pull/7828>_).#7839 <https://github.com/scikit-image/scikit-image/pull/7839>_).mask argument in _generic_edge_filter (#7827 <https://github.com/scikit-image/scikit-image/pull/7827>_).skimage.transform.FundamentalMatrixTransform, refactor scaling calculation to make algorithm clearer, and allow original Hartley algorithm if preferred (#7767 <https://github.com/scikit-image/scikit-image/pull/7767>_).#7854 <https://github.com/scikit-image/scikit-image/pull/7854>_).#7855 <https://github.com/scikit-image/scikit-image/pull/7855>_).#7853 <https://github.com/scikit-image/scikit-image/pull/7853>_).#7871 <https://github.com/scikit-image/scikit-image/pull/7871>_).#7875 <https://github.com/scikit-image/scikit-image/pull/7875>_).#7881 <https://github.com/scikit-image/scikit-image/pull/7881>_).#7884 <https://github.com/scikit-image/scikit-image/pull/7884>_).#7874 <https://github.com/scikit-image/scikit-image/pull/7874>_).#7891 <https://github.com/scikit-image/scikit-image/pull/7891>).#7894 <https://github.com/scikit-image/scikit-image/pull/7894>_).#7898 <https://github.com/scikit-image/scikit-image/pull/7898>_)._built_utils/version.py (#7904 <https://github.com/scikit-image/scikit-image/pull/7904>_).test_rag.py::test_reproducibility as flaky for current versions of SciPy (< 1.17.0.dev0) (#7912 <https://github.com/scikit-image/scikit-image/pull/7912>_).divmod in montage index computation (#7914 <https://github.com/scikit-image/scikit-image/pull/7914>_).#7922 <https://github.com/scikit-image/scikit-image/pull/7922>_).#7927 <https://github.com/scikit-image/scikit-image/pull/7927>_).#7933 <https://github.com/scikit-image/scikit-image/pull/7933>_).#7931 <https://github.com/scikit-image/scikit-image/pull/7931>_).#7930 <https://github.com/scikit-image/scikit-image/pull/7930>_).#7932 <https://github.com/scikit-image/scikit-image/pull/7932>_).#7944 <https://github.com/scikit-image/scikit-image/pull/7944>_).#7942 <https://github.com/scikit-image/scikit-image/pull/7942>_).#7959 <https://github.com/scikit-image/scikit-image/pull/7959>_).#7966 <https://github.com/scikit-image/scikit-image/pull/7966>_).test_wrap_around as xfail on macOS until 2026-02-01 (#7985 <https://github.com/scikit-image/scikit-image/pull/7985>_).40 authors added to this release (alphabetically):
@dependabot[bot] <https://github.com/apps/dependabot>_@EdytaRz <https://github.com/EdytaRz>_@jakirkham <https://github.com/jakirkham>_@jdarena66 <https://github.com/jdarena66>_@jmtayloruk <https://github.com/jmtayloruk>_@michaelbratsch <https://github.com/michaelbratsch>_@Schefflera-Arboricola <https://github.com/Schefflera-Arboricola>_)@agriyakhetarpal <https://github.com/agriyakhetarpal>_)@AlexLouk <https://github.com/AlexLouk>_)@ana42742 <https://github.com/ana42742>_)@bsipocz <https://github.com/bsipocz>_)@emmanuel-ferdman <https://github.com/emmanuel-ferdman>_)@PinkShnack <https://github.com/PinkShnack>_)@GParolini <https://github.com/GParolini>_)@Czaki <https://github.com/Czaki>_)@jimustafa <https://github.com/jimustafa>_)@imagejan <https://github.com/imagejan>_)@jarrodmillman <https://github.com/jarrodmillman>_)@jmuhlich <https://github.com/jmuhlich>_)@jonathimer <https://github.com/jonathimer>_)@JoOkuma <https://github.com/JoOkuma>_)@jni <https://github.com/jni>_)@apetizerr <https://github.com/apetizerr>_)@K-Meech <https://github.com/K-Meech>_)@larrybradley <https://github.com/larrybradley>_)@lagru <https://github.com/lagru>_)@mkcor <https://github.com/mkcor>_)@hmaarrfk <https://github.com/hmaarrfk>_)@mdhaber <https://github.com/mdhaber>_)@matthew-brett <https://github.com/matthew-brett>_)@matthewfeickert <https://github.com/matthewfeickert>_)@Greenie0701 <https://github.com/Greenie0701>_)@clacrow <https://github.com/clacrow>_)@seberg <https://github.com/seberg>_)@Tensorboy2 <https://github.com/Tensorboy2>_)@stefanv <https://github.com/stefanv>_)@betatim <https://github.com/betatim>_)@vallsv <https://github.com/vallsv>_)@hellerve <https://github.com/hellerve>_)@vcasellesb <https://github.com/vcasellesb>_)25 reviewers added to this release (alphabetically):
@jakirkham <https://github.com/jakirkham>_@jmtayloruk <https://github.com/jmtayloruk>_@michaelbratsch <https://github.com/michaelbratsch>_@Schefflera-Arboricola <https://github.com/Schefflera-Arboricola>_)@agriyakhetarpal <https://github.com/agriyakhetarpal>_)@AlexLouk <https://github.com/AlexLouk>_)@bsipocz <https://github.com/bsipocz>_)@grlee77 <https://github.com/grlee77>_)@Czaki <https://github.com/Czaki>_)@imagejan <https://github.com/imagejan>_)@jarrodmillman <https://github.com/jarrodmillman>_)@jni <https://github.com/jni>_)@larrybradley <https://github.com/larrybradley>_)@lagru <https://github.com/lagru>_)@mkcor <https://github.com/mkcor>_)@hmaarrfk <https://github.com/hmaarrfk>_)@m-albert <https://github.com/m-albert>_)@matthew-brett <https://github.com/matthew-brett>_)@Greenie0701 <https://github.com/Greenie0701>_)@clacrow <https://github.com/clacrow>_)@seberg <https://github.com/seberg>_)@Tensorboy2 <https://github.com/Tensorboy2>_)@stefanv <https://github.com/stefanv>_)@betatim <https://github.com/betatim>_)@vcasellesb <https://github.com/vcasellesb>_)These lists are automatically generated, and may not be complete or may contain duplicates.