skimage2.morphology.local_minima#
- skimage2.morphology.local_minima(image, footprint=None, connectivity=None, indices=False, allow_borders=True)[source]#
Find local minima of n-dimensional array.
The local minima are defined as connected sets of pixels with equal gray level (plateaus) strictly smaller than the gray levels of all pixels in the neighborhood.
- Parameters:
- imagendarray
An n-dimensional array.
- footprintndarray, optional
The footprint (structuring element) used to determine the neighborhood of each evaluated pixel (
Truedenotes a connected pixel). It must be a boolean array and have the same number of dimensions asimage. If neitherfootprintnorconnectivityare given, all adjacent pixels are considered as part of the neighborhood.- connectivityint, optional
A number used to determine the neighborhood of each evaluated pixel. Adjacent pixels whose squared distance from the center is less than or equal to
connectivityare considered neighbors. Ignored iffootprintis not None.- indicesbool, optional
If True, the output will be a tuple of one-dimensional arrays representing the indices of local minima in each dimension. If False, the output will be a boolean array with the same shape as
image.- allow_bordersbool, optional
If true, plateaus that touch the image border are valid minima.
- Returns:
- minimandarray or tuple[ndarray]
If
indicesis false, a boolean array with the same shape asimageis returned withTrueindicating the position of local minima (Falseotherwise). Ifindicesis true, a tuple of one-dimensional arrays containing the coordinates (indices) of all found minima.
Notes
This function operates on the following ideas:
Make a first pass over the image’s last dimension and flag candidates for local minima by comparing pixels in only one direction. If the pixels aren’t connected in the last dimension all pixels are flagged as candidates instead.
For each candidate:
Perform a flood-fill to find all connected pixels that have the same gray value and are part of the plateau.
Consider the connected neighborhood of a plateau: if no bordering sample has a smaller gray level, mark the plateau as a definite local minimum.
Examples
>>> from _skimage2.morphology import local_minima >>> image = np.zeros((4, 7), dtype=int) >>> image[1:3, 1:3] = -1 >>> image[3, 0] = -1 >>> image[1:3, 4:6] = -2 >>> image[3, 6] = -3 >>> image array([[ 0, 0, 0, 0, 0, 0, 0], [ 0, -1, -1, 0, -2, -2, 0], [ 0, -1, -1, 0, -2, -2, 0], [-1, 0, 0, 0, 0, 0, -3]])
Find local minima by comparing to all neighboring pixels (maximal connectivity):
>>> local_minima(image) array([[False, False, False, False, False, False, False], [False, True, True, False, False, False, False], [False, True, True, False, False, False, False], [ True, False, False, False, False, False, True]]) >>> local_minima(image, indices=True) (array([1, 1, 2, 2, 3, 3]), array([1, 2, 1, 2, 0, 6]))
Find local minima without comparing to diagonal pixels (connectivity 1):
>>> local_minima(image, connectivity=1) array([[False, False, False, False, False, False, False], [False, True, True, False, True, True, False], [False, True, True, False, True, True, False], [ True, False, False, False, False, False, True]])
and exclude minima that border the image edge:
>>> local_minima(image, connectivity=1, allow_borders=False) array([[False, False, False, False, False, False, False], [False, True, True, False, True, True, False], [False, True, True, False, True, True, False], [False, False, False, False, False, False, False]])