CofeehousePy/deps/scikit-image/skimage/filters/_median.py

79 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from warnings import warn
import numpy as np
from scipy import ndimage as ndi
from .rank import generic
def median(image, selem=None, out=None, mode='nearest', cval=0.0,
behavior='ndimage'):
"""Return local median of an image.
Parameters
----------
image : array-like
Input image.
selem : ndarray, optional
If ``behavior=='rank'``, ``selem`` is a 2-D array of 1's and 0's.
If ``behavior=='ndimage'``, ``selem`` is a N-D array of 1's and 0's
with the same number of dimension than ``image``.
If None, ``selem`` will be a N-D array with 3 elements for each
dimension (e.g., vector, square, cube, etc.)
out : ndarray, (same dtype as image), optional
If None, a new array is allocated.
mode : {'reflect', 'constant', 'nearest', 'mirror','wrap'}, optional
The mode parameter determines how the array borders are handled, where
``cval`` is the value when mode is equal to 'constant'.
Default is 'nearest'.
.. versionadded:: 0.15
``mode`` is used when ``behavior='ndimage'``.
cval : scalar, optional
Value to fill past edges of input if mode is 'constant'. Default is 0.0
.. versionadded:: 0.15
``cval`` was added in 0.15 is used when ``behavior='ndimage'``.
behavior : {'ndimage', 'rank'}, optional
Either to use the old behavior (i.e., < 0.15) or the new behavior.
The old behavior will call the :func:`skimage.filters.rank.median`.
The new behavior will call the :func:`scipy.ndimage.median_filter`.
Default is 'ndimage'.
.. versionadded:: 0.15
``behavior`` is introduced in 0.15
.. versionchanged:: 0.16
Default ``behavior`` has been changed from 'rank' to 'ndimage'
Returns
-------
out : 2-D array (same dtype as input image)
Output image.
See also
--------
skimage.filters.rank.median : Rank-based implementation of the median
filtering offering more flexibility with additional parameters but
dedicated for unsigned integer images.
Examples
--------
>>> from skimage import data
>>> from skimage.morphology import disk
>>> from skimage.filters import median
>>> img = data.camera()
>>> med = median(img, disk(5))
"""
if behavior == 'rank':
if mode != 'nearest' or not np.isclose(cval, 0.0):
warn("Change 'behavior' to 'ndimage' if you want to use the "
"parameters 'mode' or 'cval'. They will be discarded "
"otherwise.")
return generic.median(image, selem=selem, out=out)
if selem is None:
selem = ndi.generate_binary_structure(image.ndim, image.ndim)
return ndi.median_filter(image, footprint=selem, output=out, mode=mode,
cval=cval)