Image processing in Python

Overview

scikit-image: Image processing in Python

Image.sc forum Stackoverflow project chat codecov.io

Installation from binaries

  • Debian/Ubuntu: sudo apt-get install python-skimage
  • OSX: pip install scikit-image
  • Anaconda: conda install -c conda-forge scikit-image
  • Windows: Download Windows binaries

Also see installing scikit-image.

Installation from source

Install dependencies using:

pip install -r requirements.txt

Then, install scikit-image using:

$ pip install .

If you plan to develop the package, you may run it directly from source:

$ pip install -e .  # Do this once to add package to Python path

Every time you modify Cython files, also run:

$ python setup.py build_ext -i  # Build binary extensions

License (Modified BSD)

Copyright (C) 2011, the scikit-image team All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of skimage nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Citation

If you find this project useful, please cite:

Stéfan van der Walt, Johannes L. Schönberger, Juan Nunez-Iglesias, François Boulogne, Joshua D. Warner, Neil Yager, Emmanuelle Gouillart, Tony Yu, and the scikit-image contributors. scikit-image: Image processing in Python. PeerJ 2:e453 (2014) https://doi.org/10.7717/peerj.453

Comments
  • Segmentation: Implemention of a simple Chan-Vese Algorithm

    Segmentation: Implemention of a simple Chan-Vese Algorithm

    I have implemented a simple Chan-Vese Algorithm in the segmentation module based mostly on matlab code by Yue Wu freely available at http://www.mathworks.com/matlabcentral/fileexchange/23445-chan-vese-active-contours-without-edges

    Let me know what needs to be changed, improved or corrected and whether I have made any mistakes in the actual implementation of the algorithm.

    This is part of a student project supervised by Olivier Debeir who is a contributor for this library. This is also my first time contributing to such a project, so please bear with me. .

    :pray: Feature request 
    opened by GGoussar 127
  • subpixel shift registration addition

    subpixel shift registration addition

    For the sake of keeping a more readily accessibly reference to this controversial addition, here's a PR.

    Discussion has thus far been at: https://groups.google.com/forum/#!topic/scikit-image/fDbdOgHgolI

    This PR should not be merged until licensing issues discussed in that email thread have been addressed.

    opened by msarahan 97
  • Blob Detection ( DoG )

    Blob Detection ( DoG )

    Example Code

    from skimage.feature import get_blobs
    from skimage import data
    from matplotlib import pyplot as plt
    import math
    
    img = data.coins()
    blobs = get_blobs(img)
    
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    plt.imshow(img,cmap='gray')
    
    
    for b in blobs:
        x,y = b[0],b[1]
        r = math.sqrt( b[2]/math.pi )
        c = plt.Circle((y,x),r,color='#ff0000',lw = 2,fill = False)
        ax.add_patch(c)
    
    plt.show()
    

    Results

    coins

    space

    This is my first PR to scikit-image. I would be glad if someone could go through it and suggest improvements

    I haven't used Cython before.Could re writing _blob_overlap in Cython provide speed improvements ? The main bottle neck in this case is computing the Gaussian Filter.

    @cdeil , @adonath Please share your thoughts.

    LoG will be just minor additions to this. Once this is accepted I'll move onto that and the remaining ones.

    opened by vighneshbirodkar 97
  • Add Pythran support to build, convert two functions

    Add Pythran support to build, convert two functions

    Description

    Use Pythran instead of cython to compile several kernels, while keeping somewhat high level and pythonic code.

    Checklist

    [It's fine to submit PRs which are a work in progress! But before they are merged, all PRs should provide:]

    • [x] Clean style in the spirit of PEP8
    • [x] Docstrings for all functions
    • [ ] Gallery example in ./doc/examples (new features only)
    • [x] Benchmark in ./benchmarks, if your changes aren't covered by an existing benchmark
    • [x] Unit tests

    [For detailed information on these and other aspects see scikit-image contribution guidelines]

    References

    #2956

    For reviewers

    (Don't remove the checklist below.)

    • [ ] Check that the PR title is short, concise, and will make sense 1 year later.
    • [ ] Check that new functions are imported in corresponding __init__.py.
    • [ ] Check that new features, API changes, and deprecations are mentioned in doc/release/release_dev.rst.
    • [ ] Consider backporting the PR with @meeseeksdev backport to v0.14.x
    :bar_chart: run-benchmark 
    opened by serge-sans-paille 93
  • Major Overhaul of Travis Build

    Major Overhaul of Travis Build

    • Test against python 2.6, 2.7, 3.2, 3.3, and 3.4 on Travis. All but 3.2 use Anaconda environments.
    • Make networkx and matplotlib optional dependencies for testing. Test first without, and then with them.
    • Make PIL a required dependency - we could optionally allow one of a number of io plugins to be installed and make the tests pass with each
    • Make compatible with numpy 1.6 - no np.pad and astype() takes not arguments.
    • Make compatible py2.6: removed dict generators, could not use masked arrays as a Cython buffer in restoration\unwrap.
    • Add version_requirements helpers in skimage._shared, with tests
    • Bump required version of Cython to 0.19 due to relative imports error (see below)
    • imread and pyfits do not support py3.2, so they are not included in that test.

    Cython Error that required Cython >= 0.19:

    Traceback (most recent call last):
      File "setup.py", line 151, in <module>
        cmdclass={'build_py': build_py},
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/core.py", line 152, in setup
        config = configuration()
      File "setup.py", line 52, in configuration
        config.add_subpackage('skimage')
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/misc_util.py", line 1002, in add_subpackage
        caller_level = 2)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/misc_util.py", line 971, in get_subpackage
        caller_level = caller_level + 1)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/misc_util.py", line 908, in _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "skimage/setup.py", line 16, in configuration
        config.add_subpackage('filter')
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/misc_util.py", line 1002, in add_subpackage
        caller_level = 2)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/misc_util.py", line 971, in get_subpackage
        caller_level = caller_level + 1)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/numpy/distutils/misc_util.py", line 908, in _get_configuration_from_setup_py
        config = setup_module.configuration(*args)
      File "skimage/filter/setup.py", line 18, in configuration
        cython(['rank/generic_cy.pyx'], working_path=base_path)
      File "/home/silvester/workspace/scikit-image/skimage/_build.py", line 41, in cython
        cythonize(pyxfile)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 603, in cythonize
        aliases=aliases)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 546, in create_extension_list
        kwds = deps.distutils_info(file, aliases, base).values
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 457, in distutils_info
        return (self.transitive_merge(filename, self.distutils_info0, DistutilsInfo.merge)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 467, in transitive_merge
        node, extract, merge, seen, {}, self.cimported_files)[0]
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 478, in transitive_merge_helper
        for next in outgoing(node):
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Utils.py", line 29, in wrapper
        res = cache[args] = f(self, *args)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 406, in cimported_files
        pxd_file = self.find_pxd(module, filename)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Utils.py", line 29, in wrapper
        res = cache[args] = f(self, *args)
      File "/home/silvester/anaconda/envs/py26test/lib/python2.6/site-packages/Cython/Build/Dependencies.py", line 388, in find_pxd
        raise NotImplementedError("New relative imports.")
    NotImplementedError: New relative imports.
    
    opened by blink1073 84
  • FAST, oFAST and rBRIEF

    FAST, oFAST and rBRIEF

    TO DO :

    Replace the variables keypoints, scales, orientations, response with kpts_recarray:

        keypoints = np.array(np.dstack((row, col, octave, orientation, response)),
                             dtype=[('row', np.double), ('col', np.double),
                             ('octave', np.double), ('orientation', np.double),
                             ('response', np.double)])
        kpts_recarray = keypoints.view(np.recarray)
    
    opened by ankit-maverick 84
  • Add rolling ball algorithm for background substraction

    Add rolling ball algorithm for background substraction

    Description

    Adds an example to implement the rolling ball algorithm. Relevant Issue: #3538 Relevant Paper: Biomedical Image Processing

    For reviewers

    • Check that the PR title is short, concise, and will make sense 1 year later.
    • Check that new functions are imported in corresponding __init__.py.
    • Check that new features, API changes, and deprecations are mentioned in doc/release/release_dev.rst.
    :pray: Feature request 
    opened by FirefoxMetzger 81
  • Improve SLIC

    Improve SLIC

    • arbitrary channel combinations possible (not necessarily 3-channel images)
    • improved speed by cythonized cluster center computation and only using necessary channels (for grayscale images I see a speed improvement of 4x)

    I am highly recommending to revert some of the multi-channel magic. For me it was very confusing...

    We must at least improve the documentation about the behavior of sigma and the multichannel parameters.

    At the moment one of the test cases is failing, I have not had time to look into it.

    opened by ahojnnes 77
  • Update install instructions, simplify requirements

    Update install instructions, simplify requirements

    This tries to simplify the requirements and also updates install instructions. It will most probably not work out of the box. Fixes #1506 (when all errors are ironed out).

    I'm open to suggestions!

    opened by arve0 76
  • [WIP] NL-means denoising

    [WIP] NL-means denoising

    Following a message on the mailing-list, here is a first attempt at contributing my non-local means denoising code. It still lacks an example for the gallery. I would also welcome suggestions to improve the speed, since this algorithm is very slow...

    opened by emmanuelle 76
  • Attribute operators

    Attribute operators

    Description

    This is a new feature for skimage: connected operators or attribute openings / closings. At the moment, I have only implemented area openings/closings, diameter openings and closings and volume fill (which is is less used). These operators allow are based on image flooding, where the flooding stops as soon as the corresponding region fulfills a certain criterion. In the case of area closings, this is the surface of the region, in the case of diameter closings, this is the maximal extension of the region. New criteria can be added by implementing new Cython classes providing functions for initialize, update, fusion and stop criterion.

    It is still work in progress, as I am currently looking at max-tree implementations of the same thing which might be more general.

    Checklist

    [It's fine to submit PRs which are a work in progress! But before they are merged, all PRs should provide:]

    References

    1. Breen, E.J., Jones, R. (1996). Attribute openings, thinnings and granulometries. Computer Vision and Image Understanding 64 (3), 377-389.
    2. Vincent L., Proc. "Grayscale area openings and closings, their efficient implementation and applications", EURASIP Workshop on Mathematical Morphology and its Applications to Signal Processing, Barcelona, Spain, pp.22-27, May 1993.
    3. Vachier, C., Meyer, F. (1995). Extinction values: a new measurement of persistence. In: Proceedings of the IEEE Workshop on Non Linear Signal and Image Processing (pp. 254-257).

    For reviewers

    (Don't remove the checklist below.)

    • [ ] Check that the PR title is short, concise, and will make sense 1 year later.
    • [ ] Check that new functions are imported in corresponding __init__.py.
    • [ ] Check that new features, API changes, and deprecations are mentioned in doc/release/release_dev.rst.
    :monocle_face: Needs review :pray: Feature request 
    opened by ThomasWalter 73
  • Harden functions in skimage.filters.rank to not accept a one-dimensional image

    Harden functions in skimage.filters.rank to not accept a one-dimensional image

    Description:

    I was in a situation where I wanted to do local thresholding on a 2D image, but I had mistakenly given a 1D array as the input argument to skimage.filters.ran.otsu(). The error made it seem like the function only accepted 3D arrays. I believe this could be fixed by running expanding the if tree a bit, like below. This pattern is repeated in a number of functions in this module.

    This seems like a small fix, but I have never contributed to a library as big as this one and am afraid setting up a local dev environment would take too much of my time at the moment.

    Current behaviour:

    > import numpy as np
    > from skimage.filters.rank import otsu
    > from skimage.morphology import disk
    > otsu(np.eye(10).ravel(), disk(3))
    
    ValueError: The parameter `image` must be a 3-dimensional array
    

    Desired behaviour:

    > import numpy as np
    > from skimage.filters.rank import otsu
    > from skimage.morphology import disk
    > otsu(np.eye(10).ravel(), disk(3))
    
    ValueError: The parameter `image` must be a 2- or 3-dimensional array
    

    Proposed solution

    # scikit-image/skimage/filters/rank/generic.py
    
    def otsu(image, ...):
        np_image = np.asanyarray(image)
        if np_image.ndim == 2:
            return _apply_scalar_per_pixel(...)
        elif np_image.ndim == 3:  # Added check
            return _apply_scalar_per_pixel_3D(...)
        else:
            raise ValueError('The parameter `image` must be a 2- or 3-dimensional array') # Added error
    
    :beginner: Good first issue :bug: Bug :bulb: Solution identified 
    opened by wduverger 1
  • Input image dtype is bool. Interpolation is not defined with bool data type. Please set order to 0 or explicitely cast input image to another data type.

    Input image dtype is bool. Interpolation is not defined with bool data type. Please set order to 0 or explicitely cast input image to another data type.

    Screenshot (4) Screenshot (5) Screenshot (6) Screenshot (7) I am getting these type of error while doing the object detection with mrcnn in kangaroo dataset,, i have saw your post regarding this one but i cant get it how to solve that error in my program plzzzz solve this error..................

    :people_hugging: Support 
    opened by Rathodkumar 2
  • Misleading error message with invalid `morphology.skeletonize` method

    Misleading error message with invalid `morphology.skeletonize` method

    Description:

    When using skeletonize on a 2d numpy array with an invalid method parameter, an error message is shown falsely stating that there is a mismatch in the array dimension.

    I would expect the error message to highlight the incorrect method as the issue rather than incorrect array dimensionality.

    Let me know if I can provide any further detail :smi

    Way to reproduce:

    import numpy as np
    from skimage.morphology import skeletonize
    
    result = skeletonize(np.ones((5, 5)), method='foo')
    

    Traceback or output:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Users\james\anaconda3\envs\skan\lib\site-packages\skimage\morphology\_skeletonize.py", line 87, in skeletonize
        raise ValueError(f'skeletonize requires a 2D or 3D image as input, '
    ValueError: skeletonize requires a 2D or 3D image as input, got 2D.
    

    Version information:

    3.10.8 | packaged by conda-forge | (main, Nov 24 2022, 14:07:00) [MSC v.1916 64 bit (AMD64)]
    Windows-10-10.0.19044-SP0
    scikit-image version: 0.19.3
    numpy version: 1.23.5
    
    :beginner: Good first issue :bug: Bug 
    opened by jamesyan-git 2
  • Refactor `_invariant_denoise` to `denoise_invariant`

    Refactor `_invariant_denoise` to `denoise_invariant`

    Description

    Closes #6643. This private function is used in the plot_j_invariant_tutorial gallery example. It's useful so make it public and more consistent with the other denoise_* functions. The "Notes" and "Examples" section are adapted from the same gallery example. I opted to keep the function in this module rather than moving it to _denoise.py to keep git blame intact.

    Checklist

    • Docstrings for all functions
    • Gallery example in ./doc/examples (new features only)
    • Benchmark in ./benchmarks, if your changes aren't covered by an existing benchmark
    • Unit tests
    • Clean style in the spirit of PEP8
    • Descriptive commit messages (see below)

    For reviewers

    • Check that the PR title is short, concise, and will make sense 1 year later.
    • Check that new functions are imported in corresponding __init__.py.
    • Check that new features, API changes, and deprecations are mentioned in doc/release/release_dev.rst.
    • There is a bot to help automate backporting a PR to an older branch. For example, to backport to v0.19.x after merging, add the following in a PR comment: @meeseeksdev backport to v0.19.x
    • To run benchmarks on a PR, add the run-benchmark label. To rerun, the label can be removed and then added again. The benchmark output can be checked in the "Actions" tab.
    :adhesive_bandage: Bug fix :scroll: API 
    opened by lagru 0
  • Number of samples == min_samples not supported in RANSAC.

    Number of samples == min_samples not supported in RANSAC.

    Description:

    ransac() in measure/fit.py raises an exception in case the number of provided samples equals min_samples, see https://github.com/scikit-image/scikit-image/blob/main/skimage/measure/fit.py#L808:

        if not (0 < min_samples < num_samples):
            raise ValueError(f"`min_samples` must be in range (0, {num_samples})")
    

    The documentation of the parameter, see https://github.com/scikit-image/scikit-image/blob/main/skimage/measure/fit.py#L673:

        min_samples : int in range (0, N)
            The minimum number of data points to fit a model to.
    

    The issue

    The inherent meaning of "minimum" and the documentation suggests == to be valid. This aligns with my understanding of RANSAC and transformations that == should be accepted. Also, skimming over the code doesn't give me any reason to reject ==.

    In addition, (0, N) in documentation and error message can be interpreted as open interval or tuple, both ambiguous. Proposal: Use 0 < ... ≤ N or in {1, ..., N} to bring clarity.

    If there is a reason to go up to N - 1 only, improve the documentation (even though the variable name cannot be improved for compatibility reasons).

    Way to reproduce:

    No response

    Traceback or output:

    No response

    Version information:

    No response

    :bug: Bug 
    opened by matheburg 0
  • blob_dog/log/doh do not work the same with float and non-float dtype images

    blob_dog/log/doh do not work the same with float and non-float dtype images

    Description:

    I tried to make blob_dog work on the human_mitosis dataset and it was hard. @tlambert03 gave the hint that this function may only work with images of type float. We were now wondering if this might be a bug, or if a comment should be added to the documentation. My tests furthermore suggest that also blog_doh and blog_log suffer from the same problem.

    I propose to make sure that results are same or similar independent from the pixel data type.

    Way to reproduce:

    from skimage.data import human_mitosis
    from skimage.feature import blob_dog
    from skimage.io import imshow
    
    data = human_mitosis()
    
    print("\nDoG")
    print(len(blob_dog(data,               min_sigma=1, max_sigma=10)))
    print(len(blob_dog(data.astype(float), min_sigma=1, max_sigma=10)))
    print("\nLoG")
    print(len(blob_log(data,               min_sigma=1, max_sigma=10)))
    print(len(blob_log(data.astype(float), min_sigma=1, max_sigma=10)))
    print("\nDoH")
    print(len(blob_doh(data,               min_sigma=1, max_sigma=10)))
    print(len(blob_doh(data.astype(float), min_sigma=1, max_sigma=10)))
    

    Traceback or output:

    DoG
    0
    471
    
    LoG
    52
    10131
    
    DoH
    19
    5317
    

    Version information:

    3.9.15 | packaged by conda-forge | (main, Nov 22 2022, 08:41:22) [MSC v.1929 64 bit (AMD64)]
    Windows-10-10.0.19045-SP0
    scikit-image version: 0.19.3
    numpy version: 1.23.5
    
    :bug: Bug 
    opened by haesleinhuepf 2
Releases(v0.19.3)
  • v0.19.3(Jun 12, 2022)

    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
    Source code(tar.gz)
    Source code(zip)
  • v0.19.2(Feb 17, 2022)

    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
    Source code(tar.gz)
    Source code(zip)
  • v0.19.1(Dec 15, 2021)

    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
    Source code(tar.gz)
    Source code(zip)
  • v0.19.0(Dec 3, 2021)

    Announcement: scikit-image 0.19.0

    We're happy to announce scikit-image v0.19.0!

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

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

    A highlight of this release is the addition of the popular scale-invariant feature transform (SIFT) feature detector and descriptor. This release also introduces a perceptual blur metric, new pixel graph algorithms, and most functions now operate in single-precision when single-precision inputs are provided. Many other bug fixes, enhancements and performance improvements are detailed below.

    A significant change in this release is in the treatment of multichannel images. The existing multichannel argument to functions has been deprecated in favor of a new channel_axis argument. channel_axis can be used to specify which axis of an array contains channel information (with channel_axis=None indicating a grayscale image).

    scikit-image now uses "lazy loading", which enables users to access the functions from all skimage submodules without the overhead of eagerly importing all submodules. As a concrete example, after calling "import skimage" a user can directly call a function such as skimage.transform.warp whereas previously it would have been required to first "import skimage.transform".

    An exciting change on the development side is the introduction of support for Pythran as an alternative to Cython for generating compiled code. We plan to keep Cython support as well going forward, so developers are free to use either one as appropriate. For those curious about Pythran, a good overview was given in the SciPy 2021 presentation, "Building SciPy Kernels with Pythran" (https://www.youtube.com/watch?v=6a9D9WL6ZjQ).

    This release now supports 3.7-3.10. Apple M1 architecture (arm64) support is new to this release. MacOS 12 wheels are provided for Python 3.8-3.10.

    New Features

    • Added support for processing images with channels located along any array axis. This is in contrast to previous releases where channels were required to be the last axis of an image. See more info on the new channel_axis argument under the API section of the release notes.
    • A no-reference measure of perceptual blur was added (skimage.measure.blur_effect).
    • Non-local means (skimage.restoration.denoise_nl_means) now supports 3D multichannel, 4D and 4D multichannel data when fast_mode=True.
    • An n-dimensional Fourier-domain Butterworth filter (skimage.filters.butterworth) was added.
    • Color conversion functions now have a new channel_axis keyword argument that allows specification of which axis of an array corresponds to channels. For backwards compatibility, this parameter defaults to channel_axis=-1, indicating that channels are along the last axis.
    • Added a new keyword only parameter random_state to morphology.medial_axis and restoration.unsupervised_wiener.
    • Seeding random number generators will not give the same results as the underlying generator was updated to use numpy.random.Generator.
    • Added saturation parameter to skimage.color.label2rgb
    • Added normalized mutual information metric skimage.metrics.normalized_mutual_information
    • threshold_local now supports n-dimensional inputs and anisotropic block_size
    • New skimage.util.label_points function for assigning labels to points.
    • Added nD support to several geometric transform classes
    • Added skimage.metrics.hausdorff_pair to find points separated by the Hausdorff distance.
    • Additional colorspace illuminants and observers parameter options were added to skimage.color.lab2rgb, skimage.color.rgb2lab, skimage.color.xyz2lab, skimage.color.lab2xyz, skimage.color.xyz2luv and skimage.color.luv2xyz.
    • skimage.filters.threshold_multiotsu has a new hist keyword argument to allow use with a user-supplied histogram. (gh-5543)
    • skimage.restoration.denoise_bilateral added support for images containing negative values. (gh-5527)
    • The skimage.feature functions blob_dog, blob_doh and blob_log now support a threshold_rel keyword argument that can be used to specify a relative threshold (in range [0, 1]) rather than an absolute one. (gh-5517)
    • Implement lazy submodule importing (gh-5101)
    • Implement weighted estimation of geometric transform matrices (gh-5601)
    • Added new pixel graph algorithms in skimage.graph: pixel_graph generates a graph (network) of pixels according to their adjacency, and central_pixel finds the geodesic center of the pixels. (gh-5602)
    • scikit-image now supports use of Pythran in contributed code. (gh-3226)

    Improvements

    • Many more functions throughout the library now have single precision (float32) support.
    • Biharmonic inpainting (skimage.restoration.inpaint_biharmonic) was refactored and is orders of magnitude faster than before.
    • Salt-and-pepper noise generation with skimage.util.random_noise is now faster.
    • The performance of the SLIC superpixels algorithm (skimage.segmentation.slice) was improved for the case where a mask is supplied by the user (gh-4903). The specific superpixels produced by masked SLIC will not be identical to those produced by prior releases.
    • exposure.adjust_gamma has been accelerated for uint8 images thanks to a LUT (gh-4966).
    • measure.label has been accelerated for boolean input images, by using scipy.ndimage's implementation for this case (gh-4945).
    • util.apply_parallel now works with multichannel data (gh-4927).
    • skimage.feature.peak_local_max supports now any Minkowski distance.
    • Fast, non-Cython implementation for skimage.filters.correlate_sparse.
    • For efficiency, the histogram is now precomputed within skimage.filters.try_all_threshold.
    • Faster skimage.filters.find_local_max when given a finite num_peaks.
    • All filters in the skimage.filters.rank module now release the GIL, enabling multithreaded use.
    • skimage.restoration.denoise_tv_bregman and skimage.restoration.denoise_bilateral now release the GIL, enabling multithreaded use.
    • A skimage.color.label2rgb performance regression was addressed.
    • Improve numerical precision in CircleModel.estimate. (gh-5190)
    • Add default keyword argument values to skimage.restoration.denoise_tv_bregman, skimage.measure.block_reduce, and skimage.filters.threshold_local. (gh-5454)
    • Make matplotlib an optional dependency (gh-5990)
    • single precision support in skimage.filters (gh-5354)
    • Support nD images and labels in label2rgb (gh-5550)
    • Regionprops table performance refactor (gh-5576)
    • add regionprops benchmark script (gh-5579)
    • remove use of apply_along_axes from greycomatrix & greycoprops (gh-5580)
    • refactor gabor_kernel for efficiency (gh-5582)
    • remove need for channel_as_last_axis decorator in skimage.filters (gh-5584)
    • replace use of scipy.ndimage.gaussian_filter with skimage.filters.gaussian (gh-5872)
    • add channel_axis argument to quickshift (gh-5987)
    • add MacOS arm64 wheels (gh-6068)

    API Changes

    • The multichannel boolean argument has been deprecated. All functions with multichannel support now use an integer channel_axis to specify which axis corresponds to channels. Setting channel_axis to None is used to indicate that the image is grayscale. Specifically, existing code with multichannel=True should be updated to use channel_axis=-1 and code with multichannel=False should now specify channel_axis=None.
    • Most functions now return float32 images when the input has float32 dtype.
    • A default value has been added to measure.find_contours, corresponding to the half distance between the min and max values of the image (gh-4862).
    • data.cat has been introduced as an alias of data.chelsea for a more descriptive name.
    • The level parameter of measure.find_contours is now a keyword argument, with a default value set to (max(image) - min(image)) / 2.
    • p_norm argument was added to skimage.feature.peak_local_max to add support for Minkowski distances.
    • skimage.transforms.integral_image now promotes floating point inputs to double precision by default (for accuracy). A new dtype keyword argument can be used to override this behavior when desired.
    • Color conversion functions now have a new channel_axis keyword argument (see New Features section).
    • SLIC superpixel segmentation outputs may differ from previous versions for data that was not already scaled to [0, 1] range. There is now an automatic internal rescaling of the input to [0, 1] so that the compactness parameter has an effect that is independent of the input image's scaling.
    • A bug fix to the phase normalization applied within skimage.register.phase_cross_correlation may result in a different result as compared to prior releases. The prior behavior of "unnormalized" cross correlation is still available by explicitly setting normalization=None. There is no change to the masked cross-correlation case, which uses a different algorithm.

    Bugfixes

    • Input labels argument renumbering in skimage.feature.peak_local_max is avoided (gh-5047).
    • fix clip bug in resize when anti_aliasing is applied (gh-5202)
    • Nonzero values at the image edge are no longer incorrectly marked as a boundary when using find_bounaries with mode='subpixel' (gh-5447).
    • Fix return dtype of _label2rgb_avg function.
    • Ensure skimage.color.separate_stains does not return negative values.
    • Prevent integer overflow in EllipseModel.
    • Fixed off-by one error in pixel bins in Hough line transform, skimage.transform.hough_line.
    • Handle 1D arrays properly in skimage.filters.gaussian.
    • Fix Laplacian matrix size bug in skimage.segmentation.random_walker.
    • Regionprops table (skimage.measure.regionprops_table) dtype bugfix.
    • Fix skimage.transform.rescale when using a small scale factor.
    • Fix skimage.measure.label segfault.
    • Watershed (skimage.segmentation.watershed): consider connectivity when calculating markers.
    • Fix skimage.transform.warp output dtype when order=0.
    • Fix multichannel intensity_image extra_properties in regionprops.
    • Fix error message for skimage.metric.structural_similarity when image is too small.
    • Do not mark image edges in 'subpixel' mode of skimage.segmentation.find_boundaries.
    • Fix behavior of skimage.exposure.is_low_contrast for boolean inputs.
    • Fix wrong syntax for the string argument of ValueError in skimage.metric.structural_similarity .
    • Fixed NaN issue in skimage.filters.threshold_otsu.
    • Fix skimage.feature.blob_dog docstring example and normalization.
    • Fix uint8 overflow in skimage.exposure.adjust_gamma.
    • Work with pooch 1.5.0 for fetching data (gh-5529).
    • The offsets attribute of skimage.graph.MCP is now public. (gh-5547)
    • Fix io.imread behavior with pathlib.Path inputs (gh-5543)
    • Make scikit-image imports from Pooch, compatible with pooch >= 1.5.0 (gh-5529)
    • Fix several broken doctests and restore doctesting on GitHub Actions (gh-5505)
    • Fix broken doctests in skimage.exposure.histogram and skimage.measure.regionprops_table. (gh-5522)
    • Rescale image consistently during SLIC superpixel segmentation. (gh-5518)
    • Correct phase correlation in skimage.register.phase_cross_correlation. (gh-5461)
    • Fix hidden attribute 'offsets' in skimage.graph.MCP (gh-5551)
    • fix phase_cross_correlation for 3D with reference masks (gh-5559)
    • fix return shape of blob_log and blob_dog when no peaks are found (gh-5567)
    • Fix find contours key error (gh-5577)
    • Refactor measure.ransac and add warning when the estimated model is not valid (gh-5583)
    • Restore integer image rescaling for edge filters (gh-5589)
    • trainable_segmentation: re-raise in error case (gh-5600)
    • allow regionprops_table to be called with deprecated property names (gh-5908)
    • Fix weight calculation in fast mode of non-local means (gh-5923)
    • fix for #5948: lower boundary 1 for kernel_size in equalize_adapthist (gh-5949)
    • convert pathlib.Path to str in imsave (gh-5971)
    • Fix slic spacing (gh-5974)
    • Add small regularization to avoid zero-division in richardson_lucy (gh-5976)
    • Fix benchmark suite (watershed function was moved) (gh-5982)
    • catch QhullError and return empty array (convex_hull) (gh-6008)
    • add property getters for all newly deprecated regionprops names (gh-6000)
    • Fix the estimation of ellipsoid axis lengths in the 3D case (gh-6013)
    • Fix peak local max segfault (gh-6035)
    • Avoid circular import errors when EAGER_IMPORT=1 (gh-6042)
    • remove all use of the deprecated distutils package (gh-6044)
    • Backport PR #6061 on branch v0.19.x (remove use of deprecated np.int in SIFT) (gh-6062)
    • Backport PR #6060 on branch v0.19.x (Fix test failures observed with numpy 1.22rc0) (gh-6063)

    Completed Deprecations from Prior Releases

    • In measure.label, the deprecated neighbors parameter has been removed (use connectivity instead).
    • The deprecated skimage.color.rgb2grey and skimage.color.grey2rgb functions have been removed (use skimage.color.rgb2gray and skimage.color.gray2rgb instead).
    • skimage.color.rgb2gray no longer allows grayscale or RGBA inputs.
    • The deprecated alpha parameter of skimage.color.gray2rgb has now been removed. Use skimage.color.gray2rgba for conversion to RGBA.
    • Attempting to warp a boolean image with order > 0 now raises a ValueError.
    • When warping or rescaling boolean images, setting anti-aliasing=True will raise a ValueError.
    • The bg_label parameter of skimage.color.label2rgb is now 0.
    • The deprecated filter parameter of skimage.transform.iradon has now been removed (use filter_name instead).
    • The deprecated skimage.draw.circle function has been removed (use skimage.draw.disk instead).
    • The deprecated skimage.feature.register_translation function has been removed (use skimage.registration.phase_cross_correlation instead).
    • The deprecated skimage.feature.masked_register_translation function has been removed (use skimage.registration.phase_cross_correlation instead).
    • The deprecated skimage.measure.marching_cubes_classic function has been removed (use skimage.measure.marching_cubes instead).
    • The deprecated skimage.measure.marching_cubes_lewiner function has been removed (use skimage.measure.marching_cubes instead).
    • The deprecated skimage.segmentation.circle_level_set function has been removed (use skimage.segmentation.disk_level_set instead).
    • The deprecated inplace parameter of skimage.morphology.flood_fill has been removed (use in_place instead).
    • The deprecated skimage.util.pad function has been removed (use numpy.pad instead).
    • The default mode in skimage.filters.hessian is now 'reflect'.
    • The default boundary mode in skimage.filters.sato is now 'reflect'.
    • The default boundary mode in skimage.measure.profile_line is now 'reflect'.
    • The default value of preserve_range in skimage.restoration.denoise_nl_means is now False.
    • The default value of start_label in skimage.segmentation.slic is now 1.

    Newly introduced deprecations:

    • The multichannel argument is now deprecated throughout the library and will be removed in 1.0. The new channel_axis argument should be used instead. Existing code with multichannel=True should be updated to use channel_axis=-1 and code with multichannel=False should now specify channel_axis=None.

    • skimage.feature.greycomatrix and skimage.feature.greycoprops are deprecated in favor of skimage.feature.graycomatrix and skimage.feature.graycoprops.

    • The skimage.morphology.grey module has been renamed skimage.morphology.gray. The old name is deprecated.

    • The skimage.morphology.greyreconstruct module has been renamed skimage.morphology.grayreconstruct. The old name is deprecated.

    • see API Changes section regarding functions with deprecated argument names related to the number of iterations. num_iterations and max_num_iter are now used throughout the library.

    • see API Changes section on deprecation of the selem argument in favor of footprint throughout the library

    • Deprecate in_place in favor of the use of an explicit out argument in skimage.morphology.remove_small_objects, skimage.morphology.remove_small_holes and skimage.segmentation.clear_border

    • The input argument of skimage.measure.label has been renamed label_image. The old name is deprecated.

    • standardize on num_iter for paramters describing the number of iterations and max_num_iter for parameters specifying an iteration limit. Functions where the old argument names have now been deprecated are::

      | Function Name | |------------------------------------------------| | skimage.filters.threshold_minimum | | skimage.morphology.thin | | skimage.restoration.denoise_tv_bregman | | skimage.restoration.richardson_lucy | | skimage.segmentation.active_contour | | skimage.segmentation.chan_vese | | skimage.segmentation.morphological_chan_vese | | skimage.segmentation.morphological_geodesic_active_contour | | skimage.segmentation.slic |

    • The names of several parameters in skimage.measure.regionprops have been updated so that properties are better grouped by the first word(s) of the name. The old names will continue to work for backwards compatibility. The specific names that were updated are:

      |Old Name |New Name| |---------------------------- |------------------------| |max_intensity | intensity_max | |mean_intensity | intensity_mean | |min_intensity | intensity_min | |bbox_area | area_bbox | |convex_area | area_convex | |filled_area | area_filled | |convex_image | image_convex | |filled_image | image_filled | |intensity_image | image_intensity | |local_centroid | centroid_local | |weighted_centroid | centroid_weighted | |weighted_local_centroid | centroid_weighted_local | |major_axis_length | axis_major_length | |minor_axis_length | axis_minor_length | |weighted_moments | moments_weighted | |weighted_moments_central | moments_weighted_central | |weighted_moments_hu | moments_weighted_hu | |weighted_moments_normalized | moments_weighted_normalized | |equivalent_diameter | equivalent_diameter_area |

    • The selem argument has been renamed to footprint throughout the library. The selem argument is now deprecated.

    Additional details at: https://raw.githubusercontent.com/scikit-image/scikit-image/v0.19.0/doc/release/release_0.19.rst

    Source code(tar.gz)
    Source code(zip)
  • v0.19.0rc0(Nov 22, 2021)

    Announcement: scikit-image 0.19.0rc0

    We're happy to announce a release-candidate for scikit-image v0.19.0!

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

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

    A highlight of this release is the addition of the popular scale-invariant feature transform (SIFT) feature detector and descriptor. This release also introduces a perceptual blur metric, new pixel graph algorithms, and most functions now operate in single-precision when single-precision inputs are provided. Many other bug fixes, enhancements and performance improvements are detailed below.

    A significant change in this release is in the treatment of multichannel images. The existing multichannel argument to functions has been deprecated in favor of a new channel_axis argument. channel_axis can be used to specify which axis of an array contains channel information (with channel_axis=None indicating a grayscale image).

    scikit-image now uses "lazy loading", which enables users to access the functions from all skimage submodules without the overhead of eagerly importing all submodules. As a concrete example, after calling "import skimage" a user can directly call a function such as skimage.transform.warp whereas previously it would have been required to first "import skimage.transform".

    An exciting change on the development side is the introduction of support for Pythran as an alternative to Cython for generating compiled code. We plan to keep Cython support as well going forward, so developers are free to use either one as appropriate. For those curious about Pythran, a good overview was given in the SciPy 2021 presentation, "Building SciPy Kernels with Pythran" (https://www.youtube.com/watch?v=6a9D9WL6ZjQ).

    New Features

    • Added support for processing images with channels located along any array axis. This is in contrast to previous releases where channels were required to be the last axis of an image. See more info on the new channel_axis argument under the API section of the release notes.
    • A no-reference measure of perceptual blur was added (skimage.measure.blur_effect).
    • Non-local means (skimage.restoration.denoise_nl_means) now supports 3D multichannel, 4D and 4D multichannel data when fast_mode=True.
    • An n-dimensional Fourier-domain Butterworth filter (skimage.filters.butterworth) was added.
    • Color conversion functions now have a new channel_axis keyword argument that allows specification of which axis of an array corresponds to channels. For backwards compatibility, this parameter defaults to channel_axis=-1, indicating that channels are along the last axis.
    • Added a new keyword only parameter random_state to morphology.medial_axis and restoration.unsupervised_wiener.
    • Seeding random number generators will not give the same results as the underlying generator was updated to use numpy.random.Generator.
    • Added saturation parameter to skimage.color.label2rgb
    • Added normalized mutual information metric skimage.metrics.normalized_mutual_information
    • threshold_local now supports n-dimensional inputs and anisotropic block_size
    • New skimage.util.label_points function for assigning labels to points.
    • Added nD support to several geometric transform classes
    • Added skimage.metrics.hausdorff_pair to find points separated by the Hausdorff distance.
    • Additional colorspace illuminants and observers parameter options were added to skimage.color.lab2rgb, skimage.color.rgb2lab, skimage.color.xyz2lab, skimage.color.lab2xyz, skimage.color.xyz2luv and skimage.color.luv2xyz.
    • skimage.filters.threshold_multiotsu has a new hist keyword argument to allow use with a user-supplied histogram. (gh-5543)
    • skimage.restoration.denoise_bilateral added support for images containing negative values. (gh-5527)
    • The skimage.feature functions blob_dog, blob_doh and blob_log now support a threshold_rel keyword argument that can be used to specify a relative threshold (in range [0, 1]) rather than an absolute one. (gh-5517)
    • Implement lazy submodule importing (gh-5101)
    • Implement weighted estimation of geometric transform matrices (gh-5601)
    • Added new pixel graph algorithms in skimage.graph: pixel_graph generates a graph (network) of pixels according to their adjacency, and central_pixel finds the geodesic center of the pixels. (gh-5602)
    • scikit-image now supports use of Pythran in contributed code. (gh-3226)

    Improvements

    • Many more functions throughout the library now have single precision (float32) support.
    • Biharmonic inpainting (skimage.restoration.inpaint_biharmonic) was refactored and is orders of magnitude faster than before.
    • Salt-and-pepper noise generation with skimage.util.random_noise is now faster.
    • The performance of the SLIC superpixels algorithm (skimage.segmentation.slice) was improved for the case where a mask is supplied by the user (gh-4903). The specific superpixels produced by masked SLIC will not be identical to those produced by prior releases.
    • exposure.adjust_gamma has been accelerated for uint8 images thanks to a LUT (gh-4966).
    • measure.label has been accelerated for boolean input images, by using scipy.ndimage's implementation for this case (gh-4945).
    • util.apply_parallel now works with multichannel data (gh-4927).
    • skimage.feature.peak_local_max supports now any Minkowski distance.
    • Fast, non-Cython implementation for skimage.filters.correlate_sparse.
    • For efficiency, the histogram is now precomputed within skimage.filters.try_all_threshold.
    • Faster skimage.filters.find_local_max when given a finite num_peaks.
    • All filters in the skimage.filters.rank module now release the GIL, enabling multithreaded use.
    • skimage.restoration.denoise_tv_bregman and skimage.restoration.denoise_bilateral now release the GIL, enabling multithreaded use.
    • A skimage.color.label2rgb performance regression was addressed.
    • Improve numerical precision in CircleModel.estimate. (gh-5190)
    • Add default keyword argument values to skimage.restoration.denoise_tv_bregman, skimage.measure.block_reduce, and skimage.filters.threshold_local. (gh-5454)
    • Make matplotlib an optional dependency (gh-5990)
    • single precision support in skimage.filters (gh-5354)
    • Support nD images and labels in label2rgb (gh-5550)
    • Regionprops table performance refactor (gh-5576)
    • add regionprops benchmark script (gh-5579)
    • remove use of apply_along_axes from greycomatrix & greycoprops (gh-5580)
    • refactor gabor_kernel for efficiency (gh-5582)
    • remove need for channel_as_last_axis decorator in skimage.filters (gh-5584)
    • replace use of scipy.ndimage.gaussian_filter with skimage.filters.gaussian (gh-5872)
    • add channel_axis argument to quickshift (gh-5987)

    API Changes

    • The multichannel boolean argument has been deprecated. All functions with multichannel support now use an integer channel_axis to specify which axis corresponds to channels. Setting channel_axis to None is used to indicate that the image is grayscale. Specifically, existing code with multichannel=True should be updated to use channel_axis=-1 and code with multichannel=False should now specify channel_axis=None.
    • Most functions now return float32 images when the input has float32 dtype.
    • A default value has been added to measure.find_contours, corresponding to the half distance between the min and max values of the image (gh-4862).
    • data.cat has been introduced as an alias of data.chelsea for a more descriptive name.
    • The level parameter of measure.find_contours is now a keyword argument, with a default value set to (max(image) - min(image)) / 2.
    • p_norm argument was added to skimage.feature.peak_local_max to add support for Minkowski distances.
    • skimage.transforms.integral_image now promotes floating point inputs to double precision by default (for accuracy). A new dtype keyword argument can be used to override this behavior when desired.
    • Color conversion functions now have a new channel_axis keyword argument (see New Features section).
    • SLIC superpixel segmentation outputs may differ from previous versions for data that was not already scaled to [0, 1] range. There is now an automatic internal rescaling of the input to [0, 1] so that the compactness parameter has an effect that is independent of the input image's scaling.
    • A bug fix to the phase normalization applied within skimage.register.phase_cross_correlation may result in a different result as compared to prior releases. The prior behavior of "unnormalized" cross correlation is still available by explicitly setting normalization=None. There is no change to the masked cross-correlation case, which uses a different algorithm.

    Bugfixes

    • Input labels argument renumbering in skimage.feature.peak_local_max is avoided (gh-5047).
    • fix clip bug in resize when anti_aliasing is applied (gh-5202)
    • Nonzero values at the image edge are no longer incorrectly marked as a boundary when using find_bounaries with mode='subpixel' (gh-5447).
    • Fix return dtype of _label2rgb_avg function.
    • Ensure skimage.color.separate_stains does not return negative values.
    • Prevent integer overflow in EllipseModel.
    • Fixed off-by one error in pixel bins in Hough line transform, skimage.transform.hough_line.
    • Handle 1D arrays properly in skimage.filters.gaussian.
    • Fix Laplacian matrix size bug in skimage.segmentation.random_walker.
    • Regionprops table (skimage.measure.regionprops_table) dtype bugfix.
    • Fix skimage.transform.rescale when using a small scale factor.
    • Fix skimage.measure.label segfault.
    • Watershed (skimage.segmentation.watershed): consider connectivity when calculating markers.
    • Fix skimage.transform.warp output dtype when order=0.
    • Fix multichannel intensity_image extra_properties in regionprops.
    • Fix error message for skimage.metric.structural_similarity when image is too small.
    • Do not mark image edges in 'subpixel' mode of skimage.segmentation.find_boundaries.
    • Fix behavior of skimage.exposure.is_low_contrast for boolean inputs.
    • Fix wrong syntax for the string argument of ValueError in skimage.metric.structural_similarity .
    • Fixed NaN issue in skimage.filters.threshold_otsu.
    • Fix skimage.feature.blob_dog docstring example and normalization.
    • Fix uint8 overflow in skimage.exposure.adjust_gamma.
    • Work with pooch 1.5.0 for fetching data (gh-5529).
    • The offsets attribute of skimage.graph.MCP is now public. (gh-5547)
    • Fix io.imread behavior with pathlib.Path inputs (gh-5543)
    • Make scikit-image imports from Pooch, compatible with pooch >= 1.5.0 (gh-5529)
    • Fix several broken doctests and restore doctesting on GitHub Actions (gh-5505)
    • Fix broken doctests in skimage.exposure.histogram and skimage.measure.regionprops_table. (gh-5522)
    • Rescale image consistently during SLIC superpixel segmentation. (gh-5518)
    • Correct phase correlation in skimage.register.phase_cross_correlation. (gh-5461)
    • Fix hidden attribute 'offsets' in skimage.graph.MCP (gh-5551)
    • fix phase_cross_correlation for 3D with reference masks (gh-5559)
    • fix return shape of blob_log and blob_dog when no peaks are found (gh-5567)
    • Fix find contours key error (gh-5577)
    • Refactor measure.ransac and add warning when the estimated model is not valid (gh-5583)
    • Restore integer image rescaling for edge filters (gh-5589)
    • trainable_segmentation: re-raise in error case (gh-5600)
    • allow regionprops_table to be called with deprecated property names (gh-5908)
    • Fix weight calculation in fast mode of non-local means (gh-5923)
    • fix for #5948: lower boundary 1 for kernel_size in equalize_adapthist (gh-5949)
    • convert pathlib.Path to str in imsave (gh-5971)
    • Fix slic spacing (gh-5974)
    • Add small regularization to avoid zero-division in richardson_lucy (gh-5976)
    • Fix benchmark suite (watershed function was moved) (gh-5982)
    • catch QhullError and return empty array (convex_hull) (gh-6008)
    • add property getters for all newly deprecated regionprops names (gh-6000)
    • Fix the estimation of ellipsoid axis lengths in the 3D case (gh-6013)
    • Fix peak local max segfault (gh-6035)
    • Avoid circular import errors when EAGER_IMPORT=1 (gh-6042)
    • remove all use of the deprecated distutils package (gh-6044)

    Completed Deprecations from Prior Releases

    • In measure.label, the deprecated neighbors parameter has been removed (use connectivity instead).
    • The deprecated skimage.color.rgb2grey and skimage.color.grey2rgb functions have been removed (use skimage.color.rgb2gray and skimage.color.gray2rgb instead).
    • skimage.color.rgb2gray no longer allows grayscale or RGBA inputs.
    • The deprecated alpha parameter of skimage.color.gray2rgb has now been removed. Use skimage.color.gray2rgba for conversion to RGBA.
    • Attempting to warp a boolean image with order > 0 now raises a ValueError.
    • When warping or rescaling boolean images, setting anti-aliasing=True will raise a ValueError.
    • The bg_label parameter of skimage.color.label2rgb is now 0.
    • The deprecated filter parameter of skimage.transform.iradon has now been removed (use filter_name instead).
    • The deprecated skimage.draw.circle function has been removed (use skimage.draw.disk instead).
    • The deprecated skimage.feature.register_translation function has been removed (use skimage.registration.phase_cross_correlation instead).
    • The deprecated skimage.feature.masked_register_translation function has been removed (use skimage.registration.phase_cross_correlation instead).
    • The deprecated skimage.measure.marching_cubes_classic function has been removed (use skimage.measure.marching_cubes instead).
    • The deprecated skimage.measure.marching_cubes_lewiner function has been removed (use skimage.measure.marching_cubes instead).
    • The deprecated skimage.segmentation.circle_level_set function has been removed (use skimage.segmentation.disk_level_set instead).
    • The deprecated inplace parameter of skimage.morphology.flood_fill has been removed (use in_place instead).
    • The deprecated skimage.util.pad function has been removed (use numpy.pad instead).
    • The default mode in skimage.filters.hessian is now 'reflect'.
    • The default boundary mode in skimage.filters.sato is now 'reflect'.
    • The default boundary mode in skimage.measure.profile_line is now 'reflect'.
    • The default value of preserve_range in skimage.restoration.denoise_nl_means is now False.
    • The default value of start_label in skimage.segmentation.slic is now 1.

    Newly introduced deprecations:

    • The multichannel argument is now deprecated throughout the library and will be removed in 1.0. The new channel_axis argument should be used instead. Existing code with multichannel=True should be updated to use channel_axis=-1 and code with multichannel=False should now specify channel_axis=None.

    • skimage.feature.greycomatrix and skimage.feature.greycoprops are deprecated in favor of skimage.feature.graycomatrix and skimage.feature.graycoprops.

    • The skimage.morphology.grey module has been renamed skimage.morphology.gray. The old name is deprecated.

    • The skimage.morphology.greyreconstruct module has been renamed skimage.morphology.grayreconstruct. The old name is deprecated.

    • see API Changes section regarding functions with deprecated argument names related to the number of iterations. num_iterations and max_num_iter are now used throughout the library.

    • see API Changes section on deprecation of the selem argument in favor of footprint throughout the library

    • Deprecate in_place in favor of the use of an explicit out argument in skimage.morphology.remove_small_objects, skimage.morphology.remove_small_holes and skimage.segmentation.clear_border

    • The input argument of skimage.measure.label has been renamed label_image. The old name is deprecated.

    • standardize on num_iter for paramters describing the number of iterations and max_num_iter for parameters specifying an iteration limit. Functions where the old argument names have now been deprecated are::

      | Function Name | |------------------------------------------------| | skimage.filters.threshold_minimum | | skimage.morphology.thin | | skimage.restoration.denoise_tv_bregman | | skimage.restoration.richardson_lucy | | skimage.segmentation.active_contour | | skimage.segmentation.chan_vese | | skimage.segmentation.morphological_chan_vese | | skimage.segmentation.morphological_geodesic_active_contour | | skimage.segmentation.slic |

    • The names of several parameters in skimage.measure.regionprops have been updated so that properties are better grouped by the first word(s) of the name. The old names will continue to work for backwards compatibility. The specific names that were updated are:

      |Old Name |New Name| |---------------------------- |------------------------| |max_intensity | intensity_max | |mean_intensity | intensity_mean | |min_intensity | intensity_min | |bbox_area | area_bbox | |convex_area | area_convex | |filled_area | area_filled | |convex_image | image_convex | |filled_image | image_filled | |intensity_image | image_intensity | |local_centroid | centroid_local | |weighted_centroid | centroid_weighted | |weighted_local_centroid | centroid_weighted_local | |major_axis_length | axis_major_length | |minor_axis_length | axis_minor_length | |weighted_moments | moments_weighted | |weighted_moments_central | moments_weighted_central | |weighted_moments_hu | moments_weighted_hu | |weighted_moments_normalized | moments_weighted_normalized | |equivalent_diameter | equivalent_diameter_area |

    • The selem argument has been renamed to footprint throughout the library. The selem argument is now deprecated.

    Additional details at: https://raw.githubusercontent.com/scikit-image/scikit-image/v0.19.0rc0/doc/release/release_0.19.rst

    Source code(tar.gz)
    Source code(zip)
  • v0.18.3(Aug 24, 2021)

    scikit-image 0.18.3

    This is a small bugfix release for compatibility with Pooch 1.5 and SciPy 1.7.

    Bug fixes

    • Only import from Pooch's public API. This resolves an import failure with Pooch 1.5.0. (#5531, backport of #5529)
    • Do not use deprecated scipy.linalg.pinv2 in random_walker when using the multigrid solver. (#5531, backport of #5437)
    Source code(tar.gz)
    Source code(zip)
  • v0.18.1(Jan 19, 2021)

    scikit-image 0.18.1

    This is a bug fix release and contains the following two bug fixes:

    • Fix indexing error for labelling in large (>2GB) arrays (#5143, #5151)
    • Only use retry_if_failed with recent pooch (#5148)

    See below for the new features and API changes in 0.18.0.

    Announcement: scikit-image 0.18.0

    We're happy to announce the release of scikit-image v0.18.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.

    This release of scikit-image drops support for Python 3.6 in accordance with the NEP-29 Python and Numpy version support community standard <https://numpy.org/neps/nep-0029-deprecation_policy.html>_: Python 3.7 or newer is required to run this version.

    For more information, examples, and documentation, please visit our website:

    https://scikit-image.org

    New Features

    • Add the iterative Lucas-Kanade (iLK) optical flow method (#4161)
    • Add Feret diameter in region properties (#4379, #4820)
    • Add functions to compute Euler number and Crofton perimeter estimation (#4380)
    • Add a function to compute the Hausdorff distance (#4382)
    • Added 3D support for many filters in skimage.filters.rank.
    • An experimental implementation of trainable pixel segmentation, aiming for compatibility with the scikit-learn API, has been added to skimage.future. Try it out! (#4739)
    • Add a new function segmentation.expand_labels to dilate labels while preventing overlap (#4795)
    • It is now possible to pass extra measurement functions to measure.regionprops and regionprops_table (#4810)
    • Add rolling ball algorithm for background subtraction (#4851)
    • New sample images have been added in the data subpackage: data.eagle (#4922), data.human_mitosis (#4939), data.cells3d (#4951), and data.vortex (#5041). Also note that the image for data.camera has been changed due to copyright issues (#4913).
    • skimage.feature.structure_tensor now supports 3D (and nD) images as input (#5002)
    • Many thresholding methods can now receive a precomputed histogram as input, resulting in significant speedups if multiple methods are tried on the same image, or if a fast histogram method is used. (#5006)
    • measure.regionprops now supports multichannel intensity images (#5037)

    Documentation

    • Add an example to the flood fill tutorial (#4619)
    • Docstring enhancements for marching cubes and find_contours (#4641)
    • A new tutorial presenting a cell biology example has been added to the gallery (#4648). Special thanks to Pierre Poulain and Fred Bernard (Université de Paris and Institut Jacques Monod) for scientific review of this example!
    • Improve register rotation example with notes and references (#4723)
    • Add versionadded for new scalar type support for "scale" param in transform.AffineTransform (#4733)
    • New tutorial on visualizing 3D data <https://scikit-image.org/docs/dev/auto_examples/applications/plot_3d_image_processing.html>_ (#4850)
    • Add example for 3D adaptive histogram equalization (AHE) (#4658)
    • Automatic formatting of docstrings for improved consistency (#4849)
    • Improved docstring for rgb2lab (#4839) and marching_cubes (#4846)
    • Improved docstring for measure.marching_cubes, mentioning how to decimate a mesh using mayavi (#4846)
    • Document how to contribute a gallery example. (#4857)
    • Fix and improve entropy example (#4904)
    • expand the benchmarking section of the developer docs (#4905)
    • Improved docstring for util.random_noise (#5001)
    • Improved docstrings for morphology.h_maxima and morphology.h_minima (#4929).
    • Improved docstring for util.img_as_int (#4888).
    • A new example demonstrates interactive exploration of regionprops results using the PyData stack (pandas, seaborn) at https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_regionprops.html`_ (#5010).
    • Documentation has been added to explain how to download example datasets <https://scikit-image.org/docs/dev/install.html#downloading-all-demo-datasets>_ which are not installed with scikit-image (#4984). Similarly, the contributor guide has been updated to mention how to host new datasets in a gitlab repository (#4892).
    • The benchmarking section of the developer documentation <https://scikit-image.org/docs/dev/contribute.html#benchmarks>_ has been expanded (#4905).
    • Added links to the image.sc forum in example pages (#5094, #5096)
    • Added missing datasets to gallery examples (#5116, #5118)
    • Add farid filters in all, to populate the documentation (#5128, #5129)
    • Proofread gallery example for rank filters. (#5126, #5136)

    Improvements

    • float32 support for SLIC (#4683), ORB (#4684, #4697), BRIEF (#4685), pyramid_gaussian (#4696), Richardson-Lucy deconvolution (#4880)
    • In skimage.restoration.richardson_lucy, computations are now done in single-precision when the input image is single-precision. This can give a substantial performance improvement when working with single precision data.
    • Richardson-Lucy deconvolution now has a filter_epsilon keyword argument to avoid division by very small numbers (#4823)
    • Add default level parameter (max-min) / 2 in measure.find_contours (#4862)
    • The performance of the SLIC superpixels algorithm (skimage.segmentation.slice) was improved for the case where a mask is supplied by the user (#4903). The specific superpixels produced by masked SLIC will not be identical to those produced by prior releases.
    • exposure.adjust_gamma has been accelerated for uint8 images by using a look-up table (LUT) (#4966).
    • measure.label has been accelerated for boolean input images, by using scipy.ndimage's implementation for this case (#4945).
    • util.apply_parallel now works with multichannel data (#4927).
    • skimage.feature.peak_local_max supports now any Minkowski distance.
    • We now use sparse cross-correlation to accelerate local thresholding functions (#4912)
    • morphology.convex_hull_image now uses much less memory by checking hull inequalities in sequence (#5020)
    • Polygon rasterization is more precise and will no longer potentially exclude input vertices. (#5029)
    • Add data optional requirements to allow pip install scikit-image[data] (#5105, #5111)
    • OpenMP support in MSVC (#4924, #5111)
    • Restandardize handling of Multi-Image files (#2815, #5132)
    • Consistent zoom boundary behavior across SciPy versions (#5131, #5133)

    API Changes

    • skimage.restoration.richardson_lucy returns a single-precision output when the input is single-precision. Prior to this release, double-precision was always used. (#4880)
    • The default value of threshold_rel in skimage.feature.corner has changed from 0.1 to None, which corresponds to letting skimage.feature.peak_local_max decide on the default. This is currently equivalent to threshold_rel=0.
    • In measure.label, the deprecated neighbors parameter has been removed. (#4942)
    • The image returned by data.camera has changed because of copyright issues (#4913).

    Bug fixes

    • A bug in label2rgb has been fixed when the input image had np.uint8 dtype (#4661)
    • Fixed incorrect implementation of skimage.color.separate_stains (#4725)
    • Many bug fixes have been made in peak_local_max (#2592, #4756, #4760, #5047)
    • Fix bug in random_walker when input labels have negative values (#4771)
    • PSF flipping is now correct for Richardson-Lucy deconvolution work in >2D (#4823)
    • Fix equalize_adapthist (CLAHE) for clip value 1.0 (#4828)
    • For the RANSAC algorithm, improved the case where all data points are outliers, which was previously raising an error (#4844)
    • An error-causing bug has been corrected for the bg_color parameter in label2rgb when its value is a string (#4840)
    • A normalization bug was fixed in metrics.variation_of_information (#4875)
    • Euler characteristic property of skimage.measure.regionprops was erroneous for 3D objects, since it did not take tunnels into account. A new implementation based on integral geometry fixes this bug (#4380).
    • In skimage.morphology.selem.rectangle the height argument controlled the width and the width argument controlled the height. They have been replaced with nrow and ncol. (#4906)
    • skimage.segmentation.flood_fill and skimage.segmentation.flood now consistently handle negative values for seed_point.
    • Segmentation faults in segmentation.flood have been fixed (#4948, #4972)
    • A segfault in draw.polygon for the case of 0-d input has been fixed (#4943).
    • In registration.phase_cross_correlation, a ValueError is raised when NaNs are found in the computation (as a result of NaNs in input images). Before this fix, an incorrect value could be returned where the input images had NaNs (#4886).
    • Fix edge filters not respecting padding mode (#4907)
    • Use v{} for version tags with pooch (#5104, #5110)
    • Fix compilation error in XCode 12 (#5107, #5111)

    Deprecations

    • The indices argument in skimage.feature.peak_local_max has been deprecated. Indices will always be returned. (#4752)
    • In skimage.feature.structure_tensor, an order argument has been introduced which will default to 'rc' starting in version 0.20. (#4841)
    • skimage.feature.structure_tensor_eigvals has been deprecated and will be removed in version 0.20. Use skimage.feature.structure_tensor_eigenvalues instead.
    • The skimage.viewer subpackage and the skivi script have been deprecated and will be removed in version 0.20. For interactive visualization we recommend using dedicated tools such as napari <https://napari.org>_ or plotly <https://plotly.com>_. In a similar vein, the qt and skivi plugins of skimage.io have been deprecated and will be removed in version 0.20. (#4941, #4954)
    • In skimage.morphology.selem.rectangle the arguments width and height have been deprecated. Use nrow and ncol instead.
    • The explicit setting threshold_rel=0` was removed from the Examples of the following docstrings:skimage.feature.BRIEF,skimage.feature.corner_harris,skimage.feature.corner_shi_tomasi,skimage.feature.corner_foerstner,skimage.feature.corner_fast,skimage.feature.corner_subpix,skimage.feature.corner_peaks,skimage.feature.corner_orientations, andskimage.feature._detect_octave``.
    • In skimage.restoration._denoise, the warning regarding rescale_sigma=None was removed.
    • In skimage.restoration._cycle_spin, the # doctest: +SKIP was removed.

    Development process

    • Fix #3327: Add functionality for benchmark coverage (#3329)
    • Release process notes have been improved. (#4228)
    • pyproject.toml has been added to the sdist.
    • Build and deploy dev/master documentation using GitHub Actions (#4852)
    • Website now deploys itself (#4870)
    • build doc on circle ci and link artifact (#4881)
    • Benchmarks can now run on older scikit-image commits (#4891)
    • Website analytics are tracked using plausible.io and can be visualized on https://plausible.io/scikit-image.org (#4893)
    • Artifacts for the documentation build are now found in each pull request (#4881).
    • Documentation source files can now be written in Markdown in addition to ReST, thanks to myst (#4863).
    • update trove classifiers and tests for Python 3.9 + fix pytest config (#5052)
    • fix Azure Pipelines, pytest config, and trove classifiers for Python 3.8 (#5054)
    • Moved our testing from Travis to GitHub Actions (#5074)
    • We now build our wheels on GitHub Actions on the main repo using cibuildwheel. Many thanks to the matplotlib and scikit-learn developers for paving the way for us! (#5080)
    • Disable Travis-CI builds (#5099, #5111)
    • Improvements to CircleCI build: no parallelization and caching) (#5097, #5119)

    Other Pull Requests

    • Manage iradon input and output data type (#4298)
    • random walker: Display a warning when the probability is outsite [0,1] for a given tol (#4631)
    • MAINT: remove unused cython file (#4633)
    • Forget legacy data dir (#4662)
    • Setup longdesc markdown and switch to 0.18dev (#4663)
    • Optional pooch dependency (#4666)
    • Adding new default values to functions on doc/examples/segmentation/plot_ncut (#4676)
    • Reintroduced convert with a strong deprecation warning (#4681)
    • In release notes, better describe skimage's relationship to ecosystem (#4689)
    • Perform some todo tasks for 0.18 (#4690)
    • Perform todo tasks for 0.17! (#4691)
    • suppressing warnings from gallery examples (#4692)
    • release notes for 0.17.2 (#4702)
    • Fix gallery example mentioning deprecated argument (#4706)
    • Specify the encoding of files opened in the setup phase (#4713)
    • Remove duplicate fused type definition (#4724)
    • Blacklist cython version 0.29.18 (#4730)
    • Fix CI failures related to conversion of np.floating to dtype (#4731)
    • Fix Ci failures related to array ragged input numpy deprecation (#4735)
    • Unwrap decorators before resolving link to source (sphinx.ext.linkcode) (#4740)
    • Fix plotting error in j-invariant denoising tutorial (#4744)
    • Highlight all source lines with HTML doc "source" links (sphinx.ext.linkcode) (#4746)
    • Turn checklist boxes into bullet points inside the pull request template (#4747)
    • Deprecate (min_distance < 1) and (footprint.size < 2) in peak_local_max (#4753)
    • forbid dask 2.17.0 to fix CI (#4758)
    • try to fix ci which is broken because of pyqt5 last version (#4788)
    • Remove unused variable in j invariant docs (#4792)
    • include all md files in manifest.in (#4793)
    • Remove additional "::" to make plot directive work. (#4798)
    • Use optipng to compress images/thumbnails in our gallery (#4800)
    • Fix runtime warning in blob.py (#4803)
    • Add TODO task for sphinx-gallery>=0.9.0 to remove enforced thumbnail_size (#4804)
    • Change SSIM code example to use real MSE (#4807)
    • Let biomed example load image data with Pooch. (#4809)
    • Tweak threshold_otsu error checking - closes #4811 (#4812)
    • Ensure assert messages from Cython rank filters are informative (#4815)
    • Simplify equivalent_diameter function (#4819)
    • DOC: update subpackage descriptions (#4825)
    • style: be explicit when stacking arrays (#4826)
    • MAINT: import Iterable from collections.abc (Python 3.9 compatibility) (#4834)
    • Silence several warnings in the test suite (#4837)
    • Silence a few RuntimeWarnings in the test suite (#4838)
    • handle color string mapping correctly (#4840)
    • DOC: Autoformat docstrings in io.*.py (#4845)
    • Update min req for pillow due to CVE-2020-10379 and co. (#4861)
    • DOC: First pass at format conversion, rst -> myst (#4863)
    • Fixed typo in comment (#4867)
    • Alternative wording for install guide PR #4750 (#4871)
    • DOC: Clarify condition on unique vertices returned by marching cubes (#4872)
    • Remove unmaintained wiki page link in contributor guidelines (#4873)
    • new matomo config (#4879)
    • Fix Incorrect documentation for skimage.util.img_as_int Issue (#4888)
    • Minor edit for proper doc rendering (#4897)
    • Changelog back-log (#4898)
    • minor refactoring in phase_cross_correlation (#4901)
    • Fix draw.circle/disk deprecation message, fixes #4884 (#4908)
    • Add versionchanged tag for new opt param in measure.find_contours() (#4909)
    • Declare build dependencies (#4920)
    • Replace words with racial connotations (#4921)
    • Fixes to apply_parallel for functions working with multichannel data (#4927)
    • Improve description of h_maxima and h_minima functions (#4928) (#4929)
    • CI: Skip doc build for PYTHONOPTIMIZE=2 (#4930)
    • MAINT: Remove custom fused type in skimage/morphology/_max_tree.pyx (#4931)
    • MAINT: remove numpydoc option, issue fixed in numpydoc 1.0 (#4932)
    • modify development version string to allow use with NumpyVersion (#4947)
    • CI: Add verbose option to avoid travis timeout for OSX install script (#4956)
    • Fix CI: ban sphinx-gallery 0.8.0 (#4960)
    • Alias for data.chelsea: data.cat() (#4962)
    • Fix typo. (#4963)
    • CI: Use Travis wait improved to avoid timeout for OSX builds (#4965)
    • Small enhancement in "Contour finding" example: Removed unused variable n (#4967)
    • MAINT: remove unused imports (#4968)
    • MAINT: Remove conditional import on networkx (#4970)
    • forbid latest version of pyqt (#4973)
    • Remove warnings/explicit settings on feature, restoration (#4974)
    • Docstring improvements for label and regionprops_label (#4983)
    • try to fix timeout problem with circleci (#4986)
    • improve Euler number example (#4989)
    • [website] Standardize Documentation index page. (#4990)
    • Proofread INSTALL file. (#4991)
    • Catch leftover typos in INSTALL file. (#4992)
    • Let tifffile.imread handle additional keyword arguments (#4997)
    • Update docstring for random_noise function (#5001)
    • Update sphinx mapping for sklearn and numpy (#5003)
    • Update docstring slic superpixels (#5014)
    • Bump numpy versions to match scipy (kinda) (#5016)
    • Fix usage of numpy.pad for old versions of numpy (#5017)
    • [MRG] Update documentation to new data.camera() (#5018)
    • bumped plotly requirement for docs (#5021)
    • Fix IndexError when calling hough_line_peaks with too few angles (#5024)
    • Code simplification after latest numpy bump (#5027)
    • Fixes broken link to CODE_OF_CONDUCT.md (#5030)
    • Specify whether core dev should merge right after second approving review. (#5040)
    • Update pytest configuration to include test_ functions (#5044)
    • MAINT Build fix for pyodide (#5059)
    • reduce OSX build time so that Travis is happy (#5067)
    • DOC: document the normalized kernel in prewitt_h, prewitt_v (#5076)
    • Some minor tweaks to CI (#5079)
    • removed usage of numpy's private functions from util.arraycrop (#5081)
    • peak_local_max: remove deprecated indices argument from examples (#5082)
    • Replace np.bool, np.float, and np.int with bool, float, and int (#5103, #5108)
    • change plausible script to track outbound links (#5115, #5123)
    • Remove Python 3.6 support (#5117, #5125)
    • Optimize ensure_spacing (#5062, #5135)

    52 authors added to this release [alphabetical by first name or login]

    A warm thank you to all contributors who added to this release. A fraction of contributors were first-time contributors to open source and a much larger fraction first-time contributors to scikit-image. It's a great feeling for maintainers to welcome new contributors, and the diversity of scikit-image contributors is surely a big strength of the package.

    • Abhishek Arya
    • Abhishek Patil
    • Alexandre de Siqueira
    • Ben Nathanson
    • Cameron Blocker
    • Chris Roat
    • Christoph Gohlke
    • Clement Ng
    • Corey Harris
    • David McMahon
    • David Mellert
    • Devi Sandeep
    • Egor Panfilov
    • Emmanuelle Gouillart
    • François Boulogne
    • Genevieve Buckley
    • Gregory R. Lee
    • Harry Kwon
    • iofall (cedarfall)
    • Jan Funke
    • Juan Nunez-Iglesias
    • Julian Gilbey
    • Julien Jerphanion
    • kalpana
    • kolibril13 (kolibril13)
    • Kushaan Gupta
    • Lars Grüter
    • Marianne Corvellec
    • Mark Harfouche
    • Marvin Albert
    • Matthias Bussonnier
    • Max Frei
    • Nathan
    • neeraj3029 (neeraj3029)
    • Nick
    • notmatthancock (matt)
    • OGordon100 (OGordon100)
    • Owen Solberg
    • Riadh Fezzani
    • Robert Haase
    • Roman Yurchak
    • Ronak Sharma
    • Ross Barnowski
    • Ruby Werman
    • ryanlu41 (ryanlu41)
    • Sebastian Wallkötter
    • Shyam Saladi
    • Stefan van der Walt
    • Terence Honles
    • Volker Hilsenstein
    • Wendy Mak
    • Yogendra Sharma

    41 reviewers added to this release [alphabetical by first name or login]

    • Abhishek Arya
    • Abhishek Patil
    • Alexandre de Siqueira
    • Ben Nathanson
    • Chris Roat
    • Clement Ng
    • Corey Harris
    • Cris Luengo
    • David Mellert
    • Egor Panfilov
    • Emmanuelle Gouillart
    • François Boulogne
    • Gregory R. Lee
    • Harry Kwon
    • Jan Funke
    • Juan Nunez-Iglesias
    • Julien Jerphanion
    • kalpana
    • Kushaan Gupta
    • Lars Grüter
    • Marianne Corvellec
    • Mark Harfouche
    • Marvin Albert
    • neeraj3029
    • Nick
    • OGordon100
    • Riadh Fezzani
    • Robert Haase
    • Ross Barnowski
    • Ruby Werman
    • ryanlu41
    • Scott Trinkle
    • Sebastian Wallkötter
    • Stanley_Wang
    • Stefan van der Walt
    • Steven Brown
    • Stuart Mumford
    • Terence Honles
    • Volker Hilsenstein
    • Wendy Mak
    Source code(tar.gz)
    Source code(zip)
  • v0.18.0(Jan 19, 2021)

    Announcement: scikit-image 0.18.0

    We're happy to announce the release of scikit-image v0.18.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.

    This release of scikit-image drops support for Python 3.6 in accordance with the NEP-29 Python and Numpy version support community standard <https://numpy.org/neps/nep-0029-deprecation_policy.html>_: Python 3.7 or newer is required to run this version.

    For more information, examples, and documentation, please visit our website:

    https://scikit-image.org

    New Features

    • Add the iterative Lucas-Kanade (iLK) optical flow method (#4161)
    • Add Feret diameter in region properties (#4379, #4820)
    • Add functions to compute Euler number and Crofton perimeter estimation (#4380)
    • Add a function to compute the Hausdorff distance (#4382)
    • Added 3D support for many filters in skimage.filters.rank.
    • An experimental implementation of trainable pixel segmentation, aiming for compatibility with the scikit-learn API, has been added to skimage.future. Try it out! (#4739)
    • Add a new function segmentation.expand_labels to dilate labels while preventing overlap (#4795)
    • It is now possible to pass extra measurement functions to measure.regionprops and regionprops_table (#4810)
    • Add rolling ball algorithm for background subtraction (#4851)
    • New sample images have been added in the data subpackage: data.eagle (#4922), data.human_mitosis (#4939), data.cells3d (#4951), and data.vortex (#5041). Also note that the image for data.camera has been changed due to copyright issues (#4913).
    • skimage.feature.structure_tensor now supports 3D (and nD) images as input (#5002)
    • Many thresholding methods can now receive a precomputed histogram as input, resulting in significant speedups if multiple methods are tried on the same image, or if a fast histogram method is used. (#5006)
    • measure.regionprops now supports multichannel intensity images (#5037)

    Documentation

    • Add an example to the flood fill tutorial (#4619)
    • Docstring enhancements for marching cubes and find_contours (#4641)
    • A new tutorial presenting a cell biology example has been added to the gallery (#4648). Special thanks to Pierre Poulain and Fred Bernard (Université de Paris and Institut Jacques Monod) for scientific review of this example!
    • Improve register rotation example with notes and references (#4723)
    • Add versionadded for new scalar type support for "scale" param in transform.AffineTransform (#4733)
    • New tutorial on visualizing 3D data <https://scikit-image.org/docs/dev/auto_examples/applications/plot_3d_image_processing.html>_ (#4850)
    • Add example for 3D adaptive histogram equalization (AHE) (#4658)
    • Automatic formatting of docstrings for improved consistency (#4849)
    • Improved docstring for rgb2lab (#4839) and marching_cubes (#4846)
    • Improved docstring for measure.marching_cubes, mentioning how to decimate a mesh using mayavi (#4846)
    • Document how to contribute a gallery example. (#4857)
    • Fix and improve entropy example (#4904)
    • expand the benchmarking section of the developer docs (#4905)
    • Improved docstring for util.random_noise (#5001)
    • Improved docstrings for morphology.h_maxima and morphology.h_minima (#4929).
    • Improved docstring for util.img_as_int (#4888).
    • A new example demonstrates interactive exploration of regionprops results using the PyData stack (pandas, seaborn) at https://scikit-image.org/docs/dev/auto_examples/segmentation/plot_regionprops.html`_ (#5010).
    • Documentation has been added to explain how to download example datasets <https://scikit-image.org/docs/dev/install.html#downloading-all-demo-datasets>_ which are not installed with scikit-image (#4984). Similarly, the contributor guide has been updated to mention how to host new datasets in a gitlab repository (#4892).
    • The benchmarking section of the developer documentation <https://scikit-image.org/docs/dev/contribute.html#benchmarks>_ has been expanded (#4905).
    • Added links to the image.sc forum in example pages (#5094, #5096)
    • Added missing datasets to gallery examples (#5116, #5118)
    • Add farid filters in all, to populate the documentation (#5128, #5129)
    • Proofread gallery example for rank filters. (#5126, #5136)

    Improvements

    • float32 support for SLIC (#4683), ORB (#4684, #4697), BRIEF (#4685), pyramid_gaussian (#4696), Richardson-Lucy deconvolution (#4880)
    • In skimage.restoration.richardson_lucy, computations are now done in single-precision when the input image is single-precision. This can give a substantial performance improvement when working with single precision data.
    • Richardson-Lucy deconvolution now has a filter_epsilon keyword argument to avoid division by very small numbers (#4823)
    • Add default level parameter (max-min) / 2 in measure.find_contours (#4862)
    • The performance of the SLIC superpixels algorithm (skimage.segmentation.slice) was improved for the case where a mask is supplied by the user (#4903). The specific superpixels produced by masked SLIC will not be identical to those produced by prior releases.
    • exposure.adjust_gamma has been accelerated for uint8 images by using a look-up table (LUT) (#4966).
    • measure.label has been accelerated for boolean input images, by using scipy.ndimage's implementation for this case (#4945).
    • util.apply_parallel now works with multichannel data (#4927).
    • skimage.feature.peak_local_max supports now any Minkowski distance.
    • We now use sparse cross-correlation to accelerate local thresholding functions (#4912)
    • morphology.convex_hull_image now uses much less memory by checking hull inequalities in sequence (#5020)
    • Polygon rasterization is more precise and will no longer potentially exclude input vertices. (#5029)
    • Add data optional requirements to allow pip install scikit-image[data] (#5105, #5111)
    • OpenMP support in MSVC (#4924, #5111)
    • Restandardize handling of Multi-Image files (#2815, #5132)
    • Consistent zoom boundary behavior across SciPy versions (#5131, #5133)

    API Changes

    • skimage.restoration.richardson_lucy returns a single-precision output when the input is single-precision. Prior to this release, double-precision was always used. (#4880)
    • The default value of threshold_rel in skimage.feature.corner has changed from 0.1 to None, which corresponds to letting skimage.feature.peak_local_max decide on the default. This is currently equivalent to threshold_rel=0.
    • In measure.label, the deprecated neighbors parameter has been removed. (#4942)
    • The image returned by data.camera has changed because of copyright issues (#4913).

    Bug fixes

    • A bug in label2rgb has been fixed when the input image had np.uint8 dtype (#4661)
    • Fixed incorrect implementation of skimage.color.separate_stains (#4725)
    • Many bug fixes have been made in peak_local_max (#2592, #4756, #4760, #5047)
    • Fix bug in random_walker when input labels have negative values (#4771)
    • PSF flipping is now correct for Richardson-Lucy deconvolution work in >2D (#4823)
    • Fix equalize_adapthist (CLAHE) for clip value 1.0 (#4828)
    • For the RANSAC algorithm, improved the case where all data points are outliers, which was previously raising an error (#4844)
    • An error-causing bug has been corrected for the bg_color parameter in label2rgb when its value is a string (#4840)
    • A normalization bug was fixed in metrics.variation_of_information (#4875)
    • Euler characteristic property of skimage.measure.regionprops was erroneous for 3D objects, since it did not take tunnels into account. A new implementation based on integral geometry fixes this bug (#4380).
    • In skimage.morphology.selem.rectangle the height argument controlled the width and the width argument controlled the height. They have been replaced with nrow and ncol. (#4906)
    • skimage.segmentation.flood_fill and skimage.segmentation.flood now consistently handle negative values for seed_point.
    • Segmentation faults in segmentation.flood have been fixed (#4948, #4972)
    • A segfault in draw.polygon for the case of 0-d input has been fixed (#4943).
    • In registration.phase_cross_correlation, a ValueError is raised when NaNs are found in the computation (as a result of NaNs in input images). Before this fix, an incorrect value could be returned where the input images had NaNs (#4886).
    • Fix edge filters not respecting padding mode (#4907)
    • Use v{} for version tags with pooch (#5104, #5110)
    • Fix compilation error in XCode 12 (#5107, #5111)

    Deprecations

    • The indices argument in skimage.feature.peak_local_max has been deprecated. Indices will always be returned. (#4752)
    • In skimage.feature.structure_tensor, an order argument has been introduced which will default to 'rc' starting in version 0.20. (#4841)
    • skimage.feature.structure_tensor_eigvals has been deprecated and will be removed in version 0.20. Use skimage.feature.structure_tensor_eigenvalues instead.
    • The skimage.viewer subpackage and the skivi script have been deprecated and will be removed in version 0.20. For interactive visualization we recommend using dedicated tools such as napari <https://napari.org>_ or plotly <https://plotly.com>_. In a similar vein, the qt and skivi plugins of skimage.io have been deprecated and will be removed in version 0.20. (#4941, #4954)
    • In skimage.morphology.selem.rectangle the arguments width and height have been deprecated. Use nrow and ncol instead.
    • The explicit setting threshold_rel=0` was removed from the Examples of the following docstrings:skimage.feature.BRIEF,skimage.feature.corner_harris,skimage.feature.corner_shi_tomasi,skimage.feature.corner_foerstner,skimage.feature.corner_fast,skimage.feature.corner_subpix,skimage.feature.corner_peaks,skimage.feature.corner_orientations, andskimage.feature._detect_octave``.
    • In skimage.restoration._denoise, the warning regarding rescale_sigma=None was removed.
    • In skimage.restoration._cycle_spin, the # doctest: +SKIP was removed.

    Development process

    • Fix #3327: Add functionality for benchmark coverage (#3329)
    • Release process notes have been improved. (#4228)
    • pyproject.toml has been added to the sdist.
    • Build and deploy dev/master documentation using GitHub Actions (#4852)
    • Website now deploys itself (#4870)
    • build doc on circle ci and link artifact (#4881)
    • Benchmarks can now run on older scikit-image commits (#4891)
    • Website analytics are tracked using plausible.io and can be visualized on https://plausible.io/scikit-image.org (#4893)
    • Artifacts for the documentation build are now found in each pull request (#4881).
    • Documentation source files can now be written in Markdown in addition to ReST, thanks to myst (#4863).
    • update trove classifiers and tests for Python 3.9 + fix pytest config (#5052)
    • fix Azure Pipelines, pytest config, and trove classifiers for Python 3.8 (#5054)
    • Moved our testing from Travis to GitHub Actions (#5074)
    • We now build our wheels on GitHub Actions on the main repo using cibuildwheel. Many thanks to the matplotlib and scikit-learn developers for paving the way for us! (#5080)
    • Disable Travis-CI builds (#5099, #5111)
    • Improvements to CircleCI build: no parallelization and caching) (#5097, #5119)

    Other Pull Requests

    • Manage iradon input and output data type (#4298)
    • random walker: Display a warning when the probability is outsite [0,1] for a given tol (#4631)
    • MAINT: remove unused cython file (#4633)
    • Forget legacy data dir (#4662)
    • Setup longdesc markdown and switch to 0.18dev (#4663)
    • Optional pooch dependency (#4666)
    • Adding new default values to functions on doc/examples/segmentation/plot_ncut (#4676)
    • Reintroduced convert with a strong deprecation warning (#4681)
    • In release notes, better describe skimage's relationship to ecosystem (#4689)
    • Perform some todo tasks for 0.18 (#4690)
    • Perform todo tasks for 0.17! (#4691)
    • suppressing warnings from gallery examples (#4692)
    • release notes for 0.17.2 (#4702)
    • Fix gallery example mentioning deprecated argument (#4706)
    • Specify the encoding of files opened in the setup phase (#4713)
    • Remove duplicate fused type definition (#4724)
    • Blacklist cython version 0.29.18 (#4730)
    • Fix CI failures related to conversion of np.floating to dtype (#4731)
    • Fix Ci failures related to array ragged input numpy deprecation (#4735)
    • Unwrap decorators before resolving link to source (sphinx.ext.linkcode) (#4740)
    • Fix plotting error in j-invariant denoising tutorial (#4744)
    • Highlight all source lines with HTML doc "source" links (sphinx.ext.linkcode) (#4746)
    • Turn checklist boxes into bullet points inside the pull request template (#4747)
    • Deprecate (min_distance < 1) and (footprint.size < 2) in peak_local_max (#4753)
    • forbid dask 2.17.0 to fix CI (#4758)
    • try to fix ci which is broken because of pyqt5 last version (#4788)
    • Remove unused variable in j invariant docs (#4792)
    • include all md files in manifest.in (#4793)
    • Remove additional "::" to make plot directive work. (#4798)
    • Use optipng to compress images/thumbnails in our gallery (#4800)
    • Fix runtime warning in blob.py (#4803)
    • Add TODO task for sphinx-gallery>=0.9.0 to remove enforced thumbnail_size (#4804)
    • Change SSIM code example to use real MSE (#4807)
    • Let biomed example load image data with Pooch. (#4809)
    • Tweak threshold_otsu error checking - closes #4811 (#4812)
    • Ensure assert messages from Cython rank filters are informative (#4815)
    • Simplify equivalent_diameter function (#4819)
    • DOC: update subpackage descriptions (#4825)
    • style: be explicit when stacking arrays (#4826)
    • MAINT: import Iterable from collections.abc (Python 3.9 compatibility) (#4834)
    • Silence several warnings in the test suite (#4837)
    • Silence a few RuntimeWarnings in the test suite (#4838)
    • handle color string mapping correctly (#4840)
    • DOC: Autoformat docstrings in io.*.py (#4845)
    • Update min req for pillow due to CVE-2020-10379 and co. (#4861)
    • DOC: First pass at format conversion, rst -> myst (#4863)
    • Fixed typo in comment (#4867)
    • Alternative wording for install guide PR #4750 (#4871)
    • DOC: Clarify condition on unique vertices returned by marching cubes (#4872)
    • Remove unmaintained wiki page link in contributor guidelines (#4873)
    • new matomo config (#4879)
    • Fix Incorrect documentation for skimage.util.img_as_int Issue (#4888)
    • Minor edit for proper doc rendering (#4897)
    • Changelog back-log (#4898)
    • minor refactoring in phase_cross_correlation (#4901)
    • Fix draw.circle/disk deprecation message, fixes #4884 (#4908)
    • Add versionchanged tag for new opt param in measure.find_contours() (#4909)
    • Declare build dependencies (#4920)
    • Replace words with racial connotations (#4921)
    • Fixes to apply_parallel for functions working with multichannel data (#4927)
    • Improve description of h_maxima and h_minima functions (#4928) (#4929)
    • CI: Skip doc build for PYTHONOPTIMIZE=2 (#4930)
    • MAINT: Remove custom fused type in skimage/morphology/_max_tree.pyx (#4931)
    • MAINT: remove numpydoc option, issue fixed in numpydoc 1.0 (#4932)
    • modify development version string to allow use with NumpyVersion (#4947)
    • CI: Add verbose option to avoid travis timeout for OSX install script (#4956)
    • Fix CI: ban sphinx-gallery 0.8.0 (#4960)
    • Alias for data.chelsea: data.cat() (#4962)
    • Fix typo. (#4963)
    • CI: Use Travis wait improved to avoid timeout for OSX builds (#4965)
    • Small enhancement in "Contour finding" example: Removed unused variable n (#4967)
    • MAINT: remove unused imports (#4968)
    • MAINT: Remove conditional import on networkx (#4970)
    • forbid latest version of pyqt (#4973)
    • Remove warnings/explicit settings on feature, restoration (#4974)
    • Docstring improvements for label and regionprops_label (#4983)
    • try to fix timeout problem with circleci (#4986)
    • improve Euler number example (#4989)
    • [website] Standardize Documentation index page. (#4990)
    • Proofread INSTALL file. (#4991)
    • Catch leftover typos in INSTALL file. (#4992)
    • Let tifffile.imread handle additional keyword arguments (#4997)
    • Update docstring for random_noise function (#5001)
    • Update sphinx mapping for sklearn and numpy (#5003)
    • Update docstring slic superpixels (#5014)
    • Bump numpy versions to match scipy (kinda) (#5016)
    • Fix usage of numpy.pad for old versions of numpy (#5017)
    • [MRG] Update documentation to new data.camera() (#5018)
    • bumped plotly requirement for docs (#5021)
    • Fix IndexError when calling hough_line_peaks with too few angles (#5024)
    • Code simplification after latest numpy bump (#5027)
    • Fixes broken link to CODE_OF_CONDUCT.md (#5030)
    • Specify whether core dev should merge right after second approving review. (#5040)
    • Update pytest configuration to include test_ functions (#5044)
    • MAINT Build fix for pyodide (#5059)
    • reduce OSX build time so that Travis is happy (#5067)
    • DOC: document the normalized kernel in prewitt_h, prewitt_v (#5076)
    • Some minor tweaks to CI (#5079)
    • removed usage of numpy's private functions from util.arraycrop (#5081)
    • peak_local_max: remove deprecated indices argument from examples (#5082)
    • Replace np.bool, np.float, and np.int with bool, float, and int (#5103, #5108)
    • change plausible script to track outbound links (#5115, #5123)
    • Remove Python 3.6 support (#5117, #5125)
    • Optimize ensure_spacing (#5062, #5135)

    52 authors added to this release [alphabetical by first name or login]

    A warm thank you to all contributors who added to this release. A fraction of contributors were first-time contributors to open source and a much larger fraction first-time contributors to scikit-image. It's a great feeling for maintainers to welcome new contributors, and the diversity of scikit-image contributors is surely a big strength of the package.

    • Abhishek Arya
    • Abhishek Patil
    • Alexandre de Siqueira
    • Ben Nathanson
    • Cameron Blocker
    • Chris Roat
    • Christoph Gohlke
    • Clement Ng
    • Corey Harris
    • David McMahon
    • David Mellert
    • Devi Sandeep
    • Egor Panfilov
    • Emmanuelle Gouillart
    • François Boulogne
    • Genevieve Buckley
    • Gregory R. Lee
    • Harry Kwon
    • iofall (cedarfall)
    • Jan Funke
    • Juan Nunez-Iglesias
    • Julian Gilbey
    • Julien Jerphanion
    • kalpana
    • kolibril13 (kolibril13)
    • Kushaan Gupta
    • Lars Grüter
    • Marianne Corvellec
    • Mark Harfouche
    • Marvin Albert
    • Matthias Bussonnier
    • Max Frei
    • Nathan
    • neeraj3029 (neeraj3029)
    • Nick
    • notmatthancock (matt)
    • OGordon100 (OGordon100)
    • Owen Solberg
    • Riadh Fezzani
    • Robert Haase
    • Roman Yurchak
    • Ronak Sharma
    • Ross Barnowski
    • Ruby Werman
    • ryanlu41 (ryanlu41)
    • Sebastian Wallkötter
    • Shyam Saladi
    • Stefan van der Walt
    • Terence Honles
    • Volker Hilsenstein
    • Wendy Mak
    • Yogendra Sharma

    41 reviewers added to this release [alphabetical by first name or login]

    • Abhishek Arya
    • Abhishek Patil
    • Alexandre de Siqueira
    • Ben Nathanson
    • Chris Roat
    • Clement Ng
    • Corey Harris
    • Cris Luengo
    • David Mellert
    • Egor Panfilov
    • Emmanuelle Gouillart
    • François Boulogne
    • Gregory R. Lee
    • Harry Kwon
    • Jan Funke
    • Juan Nunez-Iglesias
    • Julien Jerphanion
    • kalpana
    • Kushaan Gupta
    • Lars Grüter
    • Marianne Corvellec
    • Mark Harfouche
    • Marvin Albert
    • neeraj3029
    • Nick
    • OGordon100
    • Riadh Fezzani
    • Robert Haase
    • Ross Barnowski
    • Ruby Werman
    • ryanlu41
    • Scott Trinkle
    • Sebastian Wallkötter
    • Stanley_Wang
    • Stefan van der Walt
    • Steven Brown
    • Stuart Mumford
    • Terence Honles
    • Volker Hilsenstein
    • Wendy Mak
    Source code(tar.gz)
    Source code(zip)
  • v0.16.2(Oct 22, 2019)

    Announcement: scikit-image 0.16.2

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

    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.

    This is a bug fix release that addresses several critical issues from 0.16.1.

    Bug fixes


    • Migrate to networkx 2.x (#4236, #4237)
    • Sync required numpy and dask to runtime versions (#4233, #4239)
    • Fix wrong argument parsing in structural_similarity (#4246, #4247)
    • Fix active contour gallery example after change to rc coordinates (#4257, #4262)

    4 authors added to this release [alphabetical by first name or login]

    • François Boulogne
    • Jarrod Millman
    • Mark Harfouche
    • Ondrej Pesek

    6 reviewers added to this release [alphabetical by first name or login]

    • Alexandre de Siqueira
    • Egor Panfilov
    • François Boulogne
    • Juan Nunez-Iglesias
    • Mark Harfouche
    • Nelle Varoquaux

    Announcement: scikit-image 0.16.1

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

    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

    Starting from this release, scikit-image will follow the recently introduced NumPy deprecation policy, NEP 29 <https://github.com/numpy/numpy/blob/master/doc/neps/nep-0029-deprecation_policy.rst>__. Accordingly, scikit-image 0.16 drops support for Python 3.5. This release of scikit-image officially supports Python 3.6 and 3.7.

    Special thanks to Matthias Bussonnier for Frappuccino <https://github.com/Carreau/frappuccino>__, which helped us catch all API changes and nail down the APIs for new features.

    New Features

    • New skimage.evaluate module containing simple metrics (mse, nrme, psd) and segmentation metrics (adapted rand error, variation of information) (#4025)
    • n-dimensional TV-L1 optical flow algorithm for registration -- skimage.registration.optical_flow_tvl1 (#3983)
    • Draw a line in an n-dimensional array -- skimage.draw.line_nd (#2043)
    • 2D Farid & Simoncelli edge filters - skimage.filters.farid, skimage.filters.farid_h, and skimage.filters.farid_v (#3775)
    • 2D majority voting filter assigning to each pixel the most commonly occurring value within its neighborhood -- skimage.filters.majority (#3836, #3839)
    • Multi-level threshold "multi-Otsu" method, a thresholding algorithm used to separate the pixels of an input image into several classes by maximizing the variances between classes -- skimage.filters.threshold_multiotsu (#3872, #4174)
    • New example data -- skimage.data.shepp_logan_phantom, skimage.data.colorwheel, skimage.data.brick, skimage.data.grass, skimage.data.roughwall, skimage.data.cell (#3958, #3966)
    • Compute and format image region properties as a table -- skimage.measure.regionprops_table (#3959)
    • Convert a polygon into a mask -- skimage.draw.poly2mask (#3971, #3977)
    • Visual image comparison helper skimage.util.compare_images, that returns an image showing the difference between two input images (#4089)
    • skimage.transform.warp_polar to remap image into polar or log-polar coordinates. (#4097)

    Improvements

    • RANSAC: new option to set initial samples selected for initialization (#2992)
    • Better repr and str for skimage.transform.ProjectiveTransform (#3525, #3967)
    • Better error messages and data type stability to skimage.segmentation.relabel_sequential (#3740)
    • Improved compatibility with dask arrays in some image thresholding methods (#3823)
    • skimage.io.ImageCollection can now receive lists of patterns (#3928)
    • Speed up skimage.feature.peak_local_max (#3984)
    • Better error message when incorrect value for keyword argument kind in skimage.color.label2rgb (#4055)
    • All functions from skimage.drawing now supports multi-channel 2D images (#4134)

    API Changes

    • Deprecated subpackage skimage.novice has been removed.
    • Default value of multichannel parameters has been set to False in skimage.transform.rescale, skimage.transform.pyramid_reduce, skimage.transform.pyramid_laplacian, skimage.transform.pyramid_gaussian, and skimage.transform.pyramid_expand. Guessing is no longer performed for 3D arrays.
    • Deprecated argument visualise has been removed from skimage.feature.hog. Use visualize instead.¨
    • skimage.transform.seam_carve has been completely removed from the library due to licensing restrictions.
    • Parameter as_grey has been removed from skimage.data.load and skimage.io.imread. Use as_gray instead.
    • Parameter min_size has been removed from skimage.morphology.remove_small_holes. Use area_threshold instead.
    • Deprecated correct_mesh_orientation in skimage.measure has been removed.
    • skimage.measure._regionprops has been completely switched to using row-column coordinates. Old x-y interface is not longer available.
    • Default value of behavior parameter has been set to ndimage in skimage.filters.median.
    • Parameter flatten in skimage.io.imread has been removed in favor of as_gray.
    • Parameters Hxx, Hxy, Hyy have been removed from skimage.feature.corner.hessian_matrix_eigvals in favor of H_elems.
    • Default value of order parameter has been set to rc in skimage.feature.hessian_matrix.
    • skimage.util.img_as_* functions no longer raise precision and/or loss warnings.

    Bugfixes

    • Corrected error with scales attribute in ORB.detect_and_extract (#2835) The scales attribute wasn't taking into account the mask, and thus was using an incorrect array size.
    • Correct for bias in Inverse Randon Transform (skimage.transform.irandon) (#3067) Fixed by using the Ramp filter equation in the spatial domain as described in the reference
    • Fix a rounding issue that caused a rotated image to have a different size than the input (skimage.transform.rotate) (#3173)
    • RANSAC uses random subsets of the original data and not bootstraps. (#3901, #3915)
    • Canny now produces the same output regardless of dtype (#3919)
    • Geometry Transforms: avoid division by zero & some degenerate cases (#3926)
    • Fixed float32 support in denoise_bilateral and denoise_tv_bregman (#3936)
    • Fixed computation of Meijering filter and avoid ZeroDivisionError (#3957)
    • Fixed skimage.filters.threshold_li to prevent being stuck on stationnary points, and thus at local minima or maxima (#3966)
    • Edited skimage.exposure.rescale_intensity to return input image instead of nans when all 0 (#4015)
    • Fixed skimage.morphology.medial_axis. A wrong indentation in Cython caused the function to not behave as intended. (#4060)
    • Fixed skimage.restoration.denoise_bilateral by correcting the padding in the gaussian filter(#4080)
    • Fixed skimage.measure.find_contours when input image contains NaN. Contours interesting NaN will be left open (#4150)
    • Fixed skimage.feature.blob_log and skimage.feature.blob_dog for 3D images and anisotropic data (#4162)
    • Fixed skimage.exposure.adjust_gamma, skimage.exposure.adjust_log, and skimage.exposure.adjust_sigmoid such that when provided with a 1 by 1 ndarray, it returns 1 by 1 ndarrays and not single number floats (#4169)

    Deprecations

    • Parameter neighbors in skimage.measure.convex_hull_object has been deprecated in favor of connectivity and will be removed in version 0.18.0.

    • The following functions are deprecated in favor of the skimage.metrics module (#4025):

      • skimage.measure.compare_mse
      • skimage.measure.compare_nrmse
      • skimage.measure.compare_psnr
      • skimage.measure.compare_ssim
    • The function skimage.color.guess_spatial_dimensions is deprecated and will be removed in 0.18 (#4031)

    • The argument bc in skimage.segmentation.active_contour is deprecated.

    • The function skimage.data.load is deprecated and will be removed in 0.18 (#4061)

    • The function skimage.transform.match_histogram is deprecated in favor of skimage.exposure.match_histogram (#4107)

    • The parameter neighbors of skimage.morphology.convex_hull_object is deprecated.

    • The skimage.transform.randon_tranform function will convert input image of integer type to float by default in 0.18. To preserve current behaviour, set the new argument preserve_range to True. (#4131)

    Documentation improvements

    • DOC: Improve the documentation of transform.resize with respect to the anti_aliasing_sigma parameter (#3911)
    • Fix URL for stain deconvolution reference (#3862)
    • Fix doc for denoise guassian (#3869)
    • DOC: various enhancements (cross links, gallery, ref...), mainly for corner detection (#3996)
    • [DOC] clarify that the inertia_tensor may be nD in documentation (#4013)
    • [DOC] How to test and write benchmarks (#4016)
    • Spellcheck @CONTRIBUTING.txt (#4008)
    • Spellcheck @doc/examples/segmentation/plot_watershed.py (#4009)
    • Spellcheck @doc/examples/segmentation/plot_thresholding.py (#4010)
    • Spellcheck @skimage/morphology/binary.py (#4011)
    • Spellcheck @skimage/morphology/extrema.py (#4012)
    • docs update for downscale_local_mean and N-dimensional images (#4079)
    • Remove fancy language from 0.15 release notes (#3827)
    • Documentation formatting / compilation fixes (#3838)
    • Remove duplicated section in INSTALL.txt. (#3876)
    • ENH: doc of ridge functions (#3933)
    • Fix docstring for Threshold Niblack (#3917)
    • adding docs to circle_perimeter_aa (#4155)
    • Update link to NumPy docstring standard in Contribution Guide (replaces #4191) (#4192)
    • DOC: Improve downscale_local_mean() docstring (#4180)
    • DOC: enhance the result display in ransac gallery example (#4109)
    • Gallery: use fstrings for better readability (#4110)
    • MNT: Document stacklevel parameter in contribution guide (#4066)
    • Fix minor typo (#3988)
    • MIN: docstring improvements in canny functions (#3920)
    • Minor docstring fixes for #4150 (#4184)
    • Fix full parameter description in compare_ssim (#3860)
    • State Bradley threshold equivalence in Niblack docstring (#3891)
    • Add plt.show() to example-code for consistency. (#3908)
    • CC0 is not equivalent to public domain. Fix the note of the horse image (#3931)
    • Update the joblib link in tutorial_parallelization.rst (#3943)
    • Fix plot_edge_filter.py references (#3946)
    • Add missing argument to docstring of PaintTool (#3970)
    • Improving documentation and tests for directional filters (#3956)
    • Added new thorough examples on the inner working of skimage.filters.threshold_li (#3966)
    • matplotlib: remove interpolation=nearest, none in our examples (#4002)
    • fix URL encoding for wikipedia references in filters.rank.entropy and filters.rank.shannon_entropy docstring (#4007)
    • Fixup integer division in examples (#4032)
    • Update the links the installation guide (#4118)
    • Gallery hough line transform (#4124)
    • Cross-linking between function documentation should now be much improved! (#4188)
    • Better documentation of the num_peaks of skimage.feature.corner_peaks (#4195)

    Other Pull Requests

    • Add benchmark suite for exposure module (#3312)
    • Remove precision and sign loss warnings from skimage.util.img_as_ (#3575)
    • Propose SKIPs and add mission/vision/values, governance (#3585)
    • Use user-installed tifffile if available (#3650)
    • Simplify benchmarks pinnings (#3711)
    • Add project_urls to setup for PyPI and other services (#3834)
    • Address deprecations for 0.16 release (#3841)
    • Followup deprecations for 0.16 (#3851)
    • Build and test the docs in Azure (#3873)
    • Pin numpydoc to pre-0.8 to fix dev docs formatting (#3893)
    • Change all HTTP links to HTTPS (#3896)
    • Skip extra deps on OSX (#3898)
    • Add location for Sphinx 2.0.1 search results; clean up templates (#3899)
    • Fix CSS styling of Sphinx 2.0.1 + numpydoc 0.9 rendered docs (#3900)
    • Travis CI: The sudo: tag is deprcated in Travis (#4164)
    • MNT Preparing the 0.16 release (#4204)
    • FIX generate_release_note when contributor_set contains None (#4205)
    • Specify that travis should use Ubuntu xenial (14.04) not trusty (16.04) (#4082)
    • MNT: set stack level accordingly in lab2xyz (#4067)
    • MNT: fixup stack level for filters ridges (#4068)
    • MNT: remove unused import deprecated from filters.thresholding (#4069)
    • MNT: Set stacklevel correctly in io matplotlib plugin (#4070)
    • MNT: set stacklevel accordingly in felzenszwalb_cython (#4071)
    • MNT: Set stacklevel accordingly in img_as_* (convert) (#4072)
    • MNT: set stacklevel accordingly in util.shape (#4073)
    • MNT: remove extreneous matplotlib warning (#4074)
    • Suppress warnings in tests for viewer (#4017)
    • Suppress warnings in test suite regarding measure.label (#4018)
    • Suppress warnings in test_rank due to type conversion (#4019)
    • Add todo item for imread plugin testing (#3907)
    • Remove matplotlib agg warning when using the sphinx gallery. (#3897)
    • Forward-port release notes for 0.14.4 (#4137)
    • Add tests for pathological arrays in threshold_li (#4143)
    • setup.py: Fail gracefully when NumPy is not installed (#4181)
    • Drop Python 3.5 support (#4102)
    • Force imageio reader to return NumPy arrays (#3837)
    • Fixing connecting to GitHub with SSH info. (#3875)
    • Small fix to an error message of skimage.measure.regionprops (#3884)
    • Unify skeletonize and skeletonize 3D APIs (#3904)
    • Add location for Sphinx 2.0.1 search results; clean up templates (#3910)
    • Pin numpy version forward (#3925)
    • Replacing pyfits with Astropy to read FITS (#3930)
    • Add warning for future dtype kwarg removal (#3932)
    • MAINT: cleanup regionprop add PYTHONOPTIMIZE=2 to travis array (#3934)
    • Adding complexity and new tests for filters.threshold_multiotsu (#3935)
    • Fixup dtype kwarg warning in certain image plugins (#3948)
    • don't cast integer to float before using it as integer in numpy logspace (#3949)
    • avoid low contrast image save in a doctest. (#3953)
    • MAINT: Remove unused _convert_input from filters._gaussian (#4001)
    • Set minimum version for imread so that it compiles from source on linux in test builds (#3960)
    • Cleanup plugin utilization in data.load and testsuite (#3961)
    • Select minimum imageio such that it is compatible with pathlib (#3969)
    • Remove pytest-faulthandler from test dependencies (#3987)
    • Fix tifffile and array_function failures in our CI (#3992)
    • MAINT: Do not use assert in code, raise an exception instead. (#4006)
    • Enable packagers to disable failures on warnings. (#4021)
    • Fix numpy 117 rc and dask in thresholding filters (#4022)
    • silence r,c warnings when property does not depend on r,c (#4027)
    • remove warning filter, fix doc wrt r,c (#4028)
    • Import Iterable from collections.abc (#4033)
    • Import Iterable from collections.abc in vendored tifffile code (#4034)
    • Correction of typos after #4025 (#4036)
    • Rename internal function called assert_* -> check_* (#4037)
    • Improve import time (#4039)
    • Remove .meeseeksdev.yml (#4045)
    • Fix mpl deprecation on grid() (#4049)
    • Fix gallery after deprecation from #4025 (#4050)
    • fix mpl future deprecation normed -> density (#4053)
    • Add shape= to circle perimeter in hough_circle example (#4047)
    • Critical: address internal warnings in test suite related to metrics 4025 (#4063)
    • Use functools instead of a real function for the internal warn function (#4062)
    • Test rank capture warnings in threadsafe manner (#4064)
    • Make use of FFTs more consistent across the library (#4084)
    • Fixup region props test (#4099)
    • Turn single backquotes to double backquotes in filters (#4127)
    • Refactor radon transform module (#4136)
    • Fix broken import of rgb2gray in benchmark suite (#4176)
    • Fix doc building issues with SKIPs (#4182)
    • Remove several future imports (#4198)
    • Restore deprecated coordinates arg to regionprops (#4144)
    • Refactor/optimize threshold_multiotsu (#4167)
    • Remove Python2-specific code (#4170)
    • view_as_windows incorrectly assumes that a contiguous array is needed (#4171)
    • Handle case in which NamedTemporaryFile fails (#4172)
    • Fix incorrect resolution date on SKIP1 (#4183)
    • API updates before 0.16 (#4187)
    • Fix conversion to float32 dtype (#4193)

    Contributors to this release

    • Abhishek Arya
    • Alexandre de Siqueira
    • Alexis Mignon
    • Anthony Carapetis
    • Bastian Eichenberger
    • Bharat Raghunathan
    • Christian Clauss
    • Clement Ng
    • David Breuer
    • David Haberthür
    • Dominik Kutra
    • Dominik Straub
    • Egor Panfilov
    • Emmanuelle Gouillart
    • Etienne Landuré
    • François Boulogne
    • Genevieve Buckley
    • Gregory R. Lee
    • Hadrien Mary
    • Hamdi Sahloul
    • Holly Gibbs
    • Huang-Wei Chang
    • i3v (i3v)
    • Jarrod Millman
    • Jirka Borovec
    • Johan Jeppsson
    • Johannes Schönberger
    • Jon Crall
    • Josh Warner
    • Juan Nunez-Iglesias
    • Kaligule (Kaligule)
    • kczimm (kczimm)
    • Lars Grueter
    • Shachar Ben Harim
    • Luis F. de Figueiredo
    • Mark Harfouche
    • Mars Huang
    • Dave Mellert
    • Nelle Varoquaux
    • Ollin Boer Bohan
    • Patrick J Zager
    • Riadh Fezzani
    • Ryan Avery
    • Srinath Kailasa
    • Stefan van der Walt
    • Stuart Berg
    • Uwe Schmidt

    Reviewers for this release

    • Alexandre de Siqueira
    • Anthony Carapetis
    • Bastian Eichenberger
    • Clement Ng
    • David Breuer
    • Egor Panfilov
    • Emmanuelle Gouillart
    • Etienne Landuré
    • François Boulogne
    • Genevieve Buckley
    • Gregory R. Lee
    • Hadrien Mary
    • Hamdi Sahloul
    • Holly Gibbs
    • Jarrod Millman
    • Jirka Borovec
    • Johan Jeppsson
    • Johannes Schönberger
    • Jon Crall
    • Josh Warner
    • jrmarsha
    • Juan Nunez-Iglesias
    • kczimm
    • Lars Grueter
    • leGIT-bot
    • Mark Harfouche
    • Mars Huang
    • Dave Mellert
    • Paul Müller
    • Phil Starkey
    • Ralf Gommers
    • Riadh Fezzani
    • Ryan Avery
    • Sebastian Berg
    • Stefan van der Walt
    • Uwe Schmidt
    Source code(tar.gz)
    Source code(zip)
  • v0.16.1(Oct 14, 2019)

    Announcement: scikit-image 0.16.1

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

    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

    Starting from this release, scikit-image will follow the recently introduced NumPy deprecation policy, NEP 29 <https://github.com/numpy/numpy/blob/master/doc/neps/nep-0029-deprecation_policy.rst>__. Accordingly, scikit-image 0.16 drops support for Python 3.5. This release of scikit-image officially supports Python 3.6 and 3.7.

    Special thanks to Matthias Bussonnier for Frappuccino <https://github.com/Carreau/frappuccino>__, which helped us catch all API changes and nail down the APIs for new features.

    New Features

    • New skimage.evaluate module containing simple metrics (mse, nrme, psd) and segmentation metrics (adapted rand error, variation of information) (#4025)
    • n-dimensional TV-L1 optical flow algorithm for registration -- skimage.registration.optical_flow_tvl1 (#3983)
    • Draw a line in an n-dimensional array -- skimage.draw.line_nd (#2043)
    • 2D Farid & Simoncelli edge filters - skimage.filters.farid, skimage.filters.farid_h, and skimage.filters.farid_v (#3775)
    • 2D majority voting filter assigning to each pixel the most commonly occurring value within its neighborhood -- skimage.filters.majority (#3836, #3839)
    • Multi-level threshold "multi-Otsu" method, a thresholding algorithm used to separate the pixels of an input image into several classes by maximizing the variances between classes -- skimage.filters.threshold_multiotsu (#3872, #4174)
    • New example data -- skimage.data.shepp_logan_phantom, skimage.data.colorwheel, skimage.data.brick, skimage.data.grass, skimage.data.roughwall, skimage.data.cell (#3958, #3966)
    • Compute and format image region properties as a table -- skimage.measure.regionprops_table (#3959)
    • Convert a polygon into a mask -- skimage.draw.poly2mask (#3971, #3977)
    • Visual image comparison helper skimage.util.compare_images, that returns an image showing the difference between two input images (#4089)
    • skimage.transform.warp_polar to remap image into polar or log-polar coordinates. (#4097)

    Improvements

    • RANSAC: new option to set initial samples selected for initialization (#2992)
    • Better repr and str for skimage.transform.ProjectiveTransform (#3525, #3967)
    • Better error messages and data type stability to skimage.segmentation.relabel_sequential (#3740)
    • Improved compatibility with dask arrays in some image thresholding methods (#3823)
    • skimage.io.ImageCollection can now receive lists of patterns (#3928)
    • Speed up skimage.feature.peak_local_max (#3984)
    • Better error message when incorrect value for keyword argument kind in skimage.color.label2rgb (#4055)
    • All functions from skimage.drawing now supports multi-channel 2D images (#4134)

    API Changes

    • Deprecated subpackage skimage.novice has been removed.
    • Default value of multichannel parameters has been set to False in skimage.transform.rescale, skimage.transform.pyramid_reduce, skimage.transform.pyramid_laplacian, skimage.transform.pyramid_gaussian, and skimage.transform.pyramid_expand. Guessing is no longer performed for 3D arrays.
    • Deprecated argument visualise has been removed from skimage.feature.hog. Use visualize instead.¨
    • skimage.transform.seam_carve has been completely removed from the library due to licensing restrictions.
    • Parameter as_grey has been removed from skimage.data.load and skimage.io.imread. Use as_gray instead.
    • Parameter min_size has been removed from skimage.morphology.remove_small_holes. Use area_threshold instead.
    • Deprecated correct_mesh_orientation in skimage.measure has been removed.
    • skimage.measure._regionprops has been completely switched to using row-column coordinates. Old x-y interface is not longer available.
    • Default value of behavior parameter has been set to ndimage in skimage.filters.median.
    • Parameter flatten in skimage.io.imread has been removed in favor of as_gray.
    • Parameters Hxx, Hxy, Hyy have been removed from skimage.feature.corner.hessian_matrix_eigvals in favor of H_elems.
    • Default value of order parameter has been set to rc in skimage.feature.hessian_matrix.
    • skimage.util.img_as_* functions no longer raise precision and/or loss warnings.

    Bugfixes

    • Corrected error with scales attribute in ORB.detect_and_extract (#2835) The scales attribute wasn't taking into account the mask, and thus was using an incorrect array size.
    • Correct for bias in Inverse Randon Transform (skimage.transform.irandon) (#3067) Fixed by using the Ramp filter equation in the spatial domain as described in the reference
    • Fix a rounding issue that caused a rotated image to have a different size than the input (skimage.transform.rotate) (#3173)
    • RANSAC uses random subsets of the original data and not bootstraps. (#3901, #3915)
    • Canny now produces the same output regardless of dtype (#3919)
    • Geometry Transforms: avoid division by zero & some degenerate cases (#3926)
    • Fixed float32 support in denoise_bilateral and denoise_tv_bregman (#3936)
    • Fixed computation of Meijering filter and avoid ZeroDivisionError (#3957)
    • Fixed skimage.filters.threshold_li to prevent being stuck on stationnary points, and thus at local minima or maxima (#3966)
    • Edited skimage.exposure.rescale_intensity to return input image instead of nans when all 0 (#4015)
    • Fixed skimage.morphology.medial_axis. A wrong indentation in Cython caused the function to not behave as intended. (#4060)
    • Fixed skimage.restoration.denoise_bilateral by correcting the padding in the gaussian filter(#4080)
    • Fixed skimage.measure.find_contours when input image contains NaN. Contours interesting NaN will be left open (#4150)
    • Fixed skimage.feature.blob_log and skimage.feature.blob_dog for 3D images and anisotropic data (#4162)
    • Fixed skimage.exposure.adjust_gamma, skimage.exposure.adjust_log, and skimage.exposure.adjust_sigmoid such that when provided with a 1 by 1 ndarray, it returns 1 by 1 ndarrays and not single number floats (#4169)

    Deprecations

    • Parameter neighbors in skimage.measure.convex_hull_object has been deprecated in favor of connectivity and will be removed in version 0.18.0.

    • The following functions are deprecated in favor of the skimage.metrics module (#4025):

      • skimage.measure.compare_mse
      • skimage.measure.compare_nrmse
      • skimage.measure.compare_psnr
      • skimage.measure.compare_ssim
    • The function skimage.color.guess_spatial_dimensions is deprecated and will be removed in 0.18 (#4031)

    • The argument bc in skimage.segmentation.active_contour is deprecated.

    • The function skimage.data.load is deprecated and will be removed in 0.18 (#4061)

    • The function skimage.transform.match_histogram is deprecated in favor of skimage.exposure.match_histogram (#4107)

    • The parameter neighbors of skimage.morphology.convex_hull_object is deprecated.

    • The skimage.transform.randon_tranform function will convert input image of integer type to float by default in 0.18. To preserve current behaviour, set the new argument preserve_range to True. (#4131)

    Documentation improvements

    • DOC: Improve the documentation of transform.resize with respect to the anti_aliasing_sigma parameter (#3911)
    • Fix URL for stain deconvolution reference (#3862)
    • Fix doc for denoise guassian (#3869)
    • DOC: various enhancements (cross links, gallery, ref...), mainly for corner detection (#3996)
    • [DOC] clarify that the inertia_tensor may be nD in documentation (#4013)
    • [DOC] How to test and write benchmarks (#4016)
    • Spellcheck @CONTRIBUTING.txt (#4008)
    • Spellcheck @doc/examples/segmentation/plot_watershed.py (#4009)
    • Spellcheck @doc/examples/segmentation/plot_thresholding.py (#4010)
    • Spellcheck @skimage/morphology/binary.py (#4011)
    • Spellcheck @skimage/morphology/extrema.py (#4012)
    • docs update for downscale_local_mean and N-dimensional images (#4079)
    • Remove fancy language from 0.15 release notes (#3827)
    • Documentation formatting / compilation fixes (#3838)
    • Remove duplicated section in INSTALL.txt. (#3876)
    • ENH: doc of ridge functions (#3933)
    • Fix docstring for Threshold Niblack (#3917)
    • adding docs to circle_perimeter_aa (#4155)
    • Update link to NumPy docstring standard in Contribution Guide (replaces #4191) (#4192)
    • DOC: Improve downscale_local_mean() docstring (#4180)
    • DOC: enhance the result display in ransac gallery example (#4109)
    • Gallery: use fstrings for better readability (#4110)
    • MNT: Document stacklevel parameter in contribution guide (#4066)
    • Fix minor typo (#3988)
    • MIN: docstring improvements in canny functions (#3920)
    • Minor docstring fixes for #4150 (#4184)
    • Fix full parameter description in compare_ssim (#3860)
    • State Bradley threshold equivalence in Niblack docstring (#3891)
    • Add plt.show() to example-code for consistency. (#3908)
    • CC0 is not equivalent to public domain. Fix the note of the horse image (#3931)
    • Update the joblib link in tutorial_parallelization.rst (#3943)
    • Fix plot_edge_filter.py references (#3946)
    • Add missing argument to docstring of PaintTool (#3970)
    • Improving documentation and tests for directional filters (#3956)
    • Added new thorough examples on the inner working of skimage.filters.threshold_li (#3966)
    • matplotlib: remove interpolation=nearest, none in our examples (#4002)
    • fix URL encoding for wikipedia references in filters.rank.entropy and filters.rank.shannon_entropy docstring (#4007)
    • Fixup integer division in examples (#4032)
    • Update the links the installation guide (#4118)
    • Gallery hough line transform (#4124)
    • Cross-linking between function documentation should now be much improved! (#4188)
    • Better documentation of the num_peaks of skimage.feature.corner_peaks (#4195)

    Other Pull Requests

    • Add benchmark suite for exposure module (#3312)
    • Remove precision and sign loss warnings from skimage.util.img_as_ (#3575)
    • Propose SKIPs and add mission/vision/values, governance (#3585)
    • Use user-installed tifffile if available (#3650)
    • Simplify benchmarks pinnings (#3711)
    • Add project_urls to setup for PyPI and other services (#3834)
    • Address deprecations for 0.16 release (#3841)
    • Followup deprecations for 0.16 (#3851)
    • Build and test the docs in Azure (#3873)
    • Pin numpydoc to pre-0.8 to fix dev docs formatting (#3893)
    • Change all HTTP links to HTTPS (#3896)
    • Skip extra deps on OSX (#3898)
    • Add location for Sphinx 2.0.1 search results; clean up templates (#3899)
    • Fix CSS styling of Sphinx 2.0.1 + numpydoc 0.9 rendered docs (#3900)
    • Travis CI: The sudo: tag is deprcated in Travis (#4164)
    • MNT Preparing the 0.16 release (#4204)
    • FIX generate_release_note when contributor_set contains None (#4205)
    • Specify that travis should use Ubuntu xenial (14.04) not trusty (16.04) (#4082)
    • MNT: set stack level accordingly in lab2xyz (#4067)
    • MNT: fixup stack level for filters ridges (#4068)
    • MNT: remove unused import deprecated from filters.thresholding (#4069)
    • MNT: Set stacklevel correctly in io matplotlib plugin (#4070)
    • MNT: set stacklevel accordingly in felzenszwalb_cython (#4071)
    • MNT: Set stacklevel accordingly in img_as_* (convert) (#4072)
    • MNT: set stacklevel accordingly in util.shape (#4073)
    • MNT: remove extreneous matplotlib warning (#4074)
    • Suppress warnings in tests for viewer (#4017)
    • Suppress warnings in test suite regarding measure.label (#4018)
    • Suppress warnings in test_rank due to type conversion (#4019)
    • Add todo item for imread plugin testing (#3907)
    • Remove matplotlib agg warning when using the sphinx gallery. (#3897)
    • Forward-port release notes for 0.14.4 (#4137)
    • Add tests for pathological arrays in threshold_li (#4143)
    • setup.py: Fail gracefully when NumPy is not installed (#4181)
    • Drop Python 3.5 support (#4102)
    • Force imageio reader to return NumPy arrays (#3837)
    • Fixing connecting to GitHub with SSH info. (#3875)
    • Small fix to an error message of skimage.measure.regionprops (#3884)
    • Unify skeletonize and skeletonize 3D APIs (#3904)
    • Add location for Sphinx 2.0.1 search results; clean up templates (#3910)
    • Pin numpy version forward (#3925)
    • Replacing pyfits with Astropy to read FITS (#3930)
    • Add warning for future dtype kwarg removal (#3932)
    • MAINT: cleanup regionprop add PYTHONOPTIMIZE=2 to travis array (#3934)
    • Adding complexity and new tests for filters.threshold_multiotsu (#3935)
    • Fixup dtype kwarg warning in certain image plugins (#3948)
    • don't cast integer to float before using it as integer in numpy logspace (#3949)
    • avoid low contrast image save in a doctest. (#3953)
    • MAINT: Remove unused _convert_input from filters._gaussian (#4001)
    • Set minimum version for imread so that it compiles from source on linux in test builds (#3960)
    • Cleanup plugin utilization in data.load and testsuite (#3961)
    • Select minimum imageio such that it is compatible with pathlib (#3969)
    • Remove pytest-faulthandler from test dependencies (#3987)
    • Fix tifffile and array_function failures in our CI (#3992)
    • MAINT: Do not use assert in code, raise an exception instead. (#4006)
    • Enable packagers to disable failures on warnings. (#4021)
    • Fix numpy 117 rc and dask in thresholding filters (#4022)
    • silence r,c warnings when property does not depend on r,c (#4027)
    • remove warning filter, fix doc wrt r,c (#4028)
    • Import Iterable from collections.abc (#4033)
    • Import Iterable from collections.abc in vendored tifffile code (#4034)
    • Correction of typos after #4025 (#4036)
    • Rename internal function called assert_* -> check_* (#4037)
    • Improve import time (#4039)
    • Remove .meeseeksdev.yml (#4045)
    • Fix mpl deprecation on grid() (#4049)
    • Fix gallery after deprecation from #4025 (#4050)
    • fix mpl future deprecation normed -> density (#4053)
    • Add shape= to circle perimeter in hough_circle example (#4047)
    • Critical: address internal warnings in test suite related to metrics 4025 (#4063)
    • Use functools instead of a real function for the internal warn function (#4062)
    • Test rank capture warnings in threadsafe manner (#4064)
    • Make use of FFTs more consistent across the library (#4084)
    • Fixup region props test (#4099)
    • Turn single backquotes to double backquotes in filters (#4127)
    • Refactor radon transform module (#4136)
    • Fix broken import of rgb2gray in benchmark suite (#4176)
    • Fix doc building issues with SKIPs (#4182)
    • Remove several future imports (#4198)
    • Restore deprecated coordinates arg to regionprops (#4144)
    • Refactor/optimize threshold_multiotsu (#4167)
    • Remove Python2-specific code (#4170)
    • view_as_windows incorrectly assumes that a contiguous array is needed (#4171)
    • Handle case in which NamedTemporaryFile fails (#4172)
    • Fix incorrect resolution date on SKIP1 (#4183)
    • API updates before 0.16 (#4187)
    • Fix conversion to float32 dtype (#4193)

    Contributors to this release

    • Abhishek Arya
    • Alexandre de Siqueira
    • Alexis Mignon
    • Anthony Carapetis
    • Bastian Eichenberger
    • Bharat Raghunathan
    • Christian Clauss
    • Clement Ng
    • David Breuer
    • David Haberthür
    • Dominik Kutra
    • Dominik Straub
    • Egor Panfilov
    • Emmanuelle Gouillart
    • Etienne Landuré
    • François Boulogne
    • Genevieve Buckley
    • Gregory R. Lee
    • Hadrien Mary
    • Hamdi Sahloul
    • Holly Gibbs
    • Huang-Wei Chang
    • i3v (i3v)
    • Jarrod Millman
    • Jirka Borovec
    • Johan Jeppsson
    • Johannes Schönberger
    • Jon Crall
    • Josh Warner
    • Juan Nunez-Iglesias
    • Kaligule (Kaligule)
    • kczimm (kczimm)
    • Lars Grueter
    • Shachar Ben Harim
    • Luis F. de Figueiredo
    • Mark Harfouche
    • Mars Huang
    • Dave Mellert
    • Nelle Varoquaux
    • Ollin Boer Bohan
    • Patrick J Zager
    • Riadh Fezzani
    • Ryan Avery
    • Srinath Kailasa
    • Stefan van der Walt
    • Stuart Berg
    • Uwe Schmidt

    Reviewers for this release

    • Alexandre de Siqueira
    • Anthony Carapetis
    • Bastian Eichenberger
    • Clement Ng
    • David Breuer
    • Egor Panfilov
    • Emmanuelle Gouillart
    • Etienne Landuré
    • François Boulogne
    • Genevieve Buckley
    • Gregory R. Lee
    • Hadrien Mary
    • Hamdi Sahloul
    • Holly Gibbs
    • Jarrod Millman
    • Jirka Borovec
    • Johan Jeppsson
    • Johannes Schönberger
    • Jon Crall
    • Josh Warner
    • jrmarsha
    • Juan Nunez-Iglesias
    • kczimm
    • Lars Grueter
    • leGIT-bot
    • Mark Harfouche
    • Mars Huang
    • Dave Mellert
    • Paul Müller
    • Phil Starkey
    • Ralf Gommers
    • Riadh Fezzani
    • Ryan Avery
    • Sebastian Berg
    • Stefan van der Walt
    • Uwe Schmidt
    Source code(tar.gz)
    Source code(zip)
  • v0.14.3(May 23, 2019)

    Announcement: scikit-image 0.14.3

    As a reminder, 0.14.x is the final version of scikit-image with support for Python 2.7, and will receive critical bug fixes until Jan 1, 2020. If you are using Python 3.5 or later, you should upgrade to scikit-image 0.15.x.

    This is a bugfix release, and contains the following changes from v0.14.2:

    API Changes

    • morphology.local_maxima now returns a boolean array instead of uint8 (#3749, #3752)

    Bug Fixes

    • _marching_cubes_lewiner_cy: mark char as signed (#3587, #3678)
    • Fix potential use of NULL pointer (#3696)
    • pypi: explicitly exclude Python 3.1, 3.2, and 3.3 (#3726)
    • Reduce default tolerance in threshold_li (#3622) (#3781)
    • Denoising functions now accept float32 images (#3449) (#3486) (#3880)

    Other Pull Requests

    • BLD: pin cython's language_level (#3716)
    • Build tools: Upgrade xcode to 9.4 on v0.14.x branch (#3724)
    • Get rid of the requirements-parser dependency (#3534, #3727)
    • Add small galleries in the API (#2940, #3728)
    • Correctly ignore release notes auto-generated for docs (#3656, #3737)
    • Fix qt 5.12 pinning for 0.14.x branch. (#3744, #3753)
    • Minor fixes to documentation and testing infrastructure - backports #3870 and #3869 (#3881)
    • Set astropy minimum requirement to 1.2 to help the CIs. (#3767, #3770)
    • Avoid NumPy warning while stacking arrays. (#3768, #3771)
    • Fix human readable error message on a bad build. (#3223, #3790)
    • Unify LICENSE files for easier interpretation (#3791, #3792)
    • Documentation formatting / compilation fixes - Backport of #3838 to v0.14.x (#3885)
    • Fix build by using latest wheel package (scikit-image/scikit-image-wheels#10)

    12 authors added to this release [alphabetical by first name]

    • Andrew Murray
    • Christoph Gohlke
    • Egor Panfilov
    • François Boulogne
    • Johannes Schönberger
    • Juan Nunez-Iglesias
    • Lars Grueter
    • Mark Harfouche
    • Matthew Bowden
    • Nehal J Wani
    • Nelle Varoquaux
    • Stefan van der Walt
    • Thomas A Caswell

    ... and, as always, a special mention to Matthias Bussonnier's Meeseeks Box, which remains invaluable for our backports.

    4 committers added to this release [alphabetical by first name or login]

    • Josh Warner
    • Juan Nunez-Iglesias
    • Mark Harfouche
    • Stefan van der Walt

    5 reviewers added to this release [alphabetical by first name or login]

    • Egor Panfilov
    • François Boulogne
    • Juan Nunez-Iglesias
    • Mark Harfouche
    • Stefan van der Walt
    Source code(tar.gz)
    Source code(zip)
Owner
Image Processing Toolbox for SciPy
Image Processing Toolbox for SciPy
Solution for Problem 1 by team codesquad for AIDL 2020. Uses ML Kit for OCR and OpenCV for image processing

CodeSquad PS1 Solution for Problem Statement 1 for AIDL 2020 conducted by @unifynd technologies. Problem Given images of bills/invoices, the task was

Burhanuddin Udaipurwala 111 Nov 27, 2022
This is a Computer vision package that makes its easy to run Image processing and AI functions. At the core it uses OpenCV and Mediapipe libraries.

CVZone This is a Computer vision package that makes its easy to run Image processing and AI functions. At the core it uses OpenCV and Mediapipe librar

CVZone 648 Dec 30, 2022
Introduction to image processing, most used and popular functions of OpenCV

?? OpenCV 101 Introduction to image processing, most used and popular functions of OpenCV go here.

Vusal Ismayilov 3 Jul 2, 2022
Image processing using OpenCv

Image processing using OpenCv Write a program that opens the webcam, and the user selects one of the following on the video: ✅ If the user presses the

M.Najafi 4 Feb 18, 2022
computer vision, image processing and machine learning on the web browser or node.

Image processing and Machine learning labs   computer vision, image processing and machine learning on the web browser or node note Fast Fourier Trans

ryohei tanaka 487 Nov 11, 2022
Image processing is one of the most common term in computer vision

Image processing is one of the most common term in computer vision. Computer vision is the process by which computers can understand images and videos, and how they are stored, manipulated, and retrieve details from them. OpenCV is an open source computer vision image processing library for machine learning, deep leaning and AI application which plays a major role in real-time operation which is very important in today’s systems.

Happy  N. Monday 3 Feb 15, 2022
A version of nrsc5-gui that merges the interface developed by cmnybo with the architecture developed by zefie in order to start a new baseline that is not heavily dependent upon Python processing.

NRSC5-DUI is a graphical interface for nrsc5. It makes it easy to play your favorite FM HD radio stations using an RTL-SDR dongle. It will also displa

null 61 Dec 22, 2022
A post-processing tool for scanned sheets of paper.

unpaper Originally written by Jens Gulden — see AUTHORS for more information. Licensed under GNU GPL v2 — see COPYING for more information. Overview u

null 27 Dec 7, 2022
Generic framework for historical document processing

dhSegment dhSegment is a tool for Historical Document Processing. Its generic approach allows to segment regions and extract content from different ty

Digital Humanities Laboratory 343 Dec 24, 2022
A tool for extracting text from scanned documents (via OCR), with user-defined post-processing.

The project is based on older versions of tesseract and other tools, and is now superseded by another project which allows for more granular control o

Maxim 32 Jul 24, 2022
scantailor - Scan Tailor is an interactive post-processing tool for scanned pages.

Scan Tailor - scantailor.org This project is no longer maintained, and has not been maintained for a while. About Scan Tailor is an interactive post-p

null 1.5k Dec 28, 2022
[ICCV, 2021] Cloud Transformers: A Universal Approach To Point Cloud Processing Tasks

Cloud Transformers: A Universal Approach To Point Cloud Processing Tasks This is an official PyTorch code repository of the paper "Cloud Transformers:

Visual Understanding Lab @ Samsung AI Center Moscow 27 Dec 15, 2022
Face_mosaic - Mosaic blur processing is applied to multiple faces appearing in the video

動機 face_recognitionを使用して得られる顔座標は長方形であり、この座標をそのまま用いてぼかし処理を行った場合得られる画像は醜い。 それに対してモ

Yoshitsugu Kesamaru 6 Feb 3, 2022
Deskew is a command line tool for deskewing scanned text documents. It uses Hough transform to detect "text lines" in the image. As an output, you get an image rotated so that the lines are horizontal.

Deskew by Marek Mauder https://galfar.vevb.net/deskew https://github.com/galfar/deskew v1.30 2019-06-07 Overview Deskew is a command line tool for des

Marek Mauder 127 Dec 3, 2022
A facial recognition device is a device that takes an image or a video of a human face and compares it to another image faces in a database.

A facial recognition device is a device that takes an image or a video of a human face and compares it to another image faces in a database. The structure, shape and proportions of the faces are compared during the face recognition steps.

Pavankumar Khot 4 Mar 19, 2022
An advanced 2D image manipulation with features such as edge detection and image segmentation built using OpenCV

OpenCV-ToothPaint3-Advanced-Digital-Image-Editor This application named ‘Tooth Paint’ version TP_2020.3 (64-bit) or version 3 was developed within a w

JunHong 1 Nov 5, 2021
WACV 2022 Paper - Is An Image Worth Five Sentences? A New Look into Semantics for Image-Text Matching

Is An Image Worth Five Sentences? A New Look into Semantics for Image-Text Matching Code based on our WACV 2022 Accepted Paper: https://arxiv.org/pdf/

Andres 13 Dec 17, 2022