93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
from ._ccomp import label_cython as clabel
|
|
|
|
|
|
def label(input, neighbors=None, background=None, return_num=False,
|
|
connectivity=None):
|
|
r"""Label connected regions of an integer array.
|
|
|
|
Two pixels are connected when they are neighbors and have the same value.
|
|
In 2D, they can be neighbors either in a 1- or 2-connected sense.
|
|
The value refers to the maximum number of orthogonal hops to consider a
|
|
pixel/voxel a neighbor::
|
|
|
|
1-connectivity 2-connectivity diagonal connection close-up
|
|
|
|
[ ] [ ] [ ] [ ] [ ]
|
|
| \ | / | <- hop 2
|
|
[ ]--[x]--[ ] [ ]--[x]--[ ] [x]--[ ]
|
|
| / | \ hop 1
|
|
[ ] [ ] [ ] [ ]
|
|
|
|
Parameters
|
|
----------
|
|
input : ndarray of dtype int
|
|
Image to label.
|
|
neighbors : {4, 8}, int, optional
|
|
Whether to use 4- or 8-"connectivity".
|
|
In 3D, 4-"connectivity" means connected pixels have to share face,
|
|
whereas with 8-"connectivity", they have to share only edge or vertex.
|
|
**Deprecated, use** ``connectivity`` **instead.**
|
|
background : int, optional
|
|
Consider all pixels with this value as background pixels, and label
|
|
them as 0. By default, 0-valued pixels are considered as background
|
|
pixels.
|
|
return_num : bool, optional
|
|
Whether to return the number of assigned labels.
|
|
connectivity : int, optional
|
|
Maximum number of orthogonal hops to consider a pixel/voxel
|
|
as a neighbor.
|
|
Accepted values are ranging from 1 to input.ndim. If ``None``, a full
|
|
connectivity of ``input.ndim`` is used.
|
|
|
|
Returns
|
|
-------
|
|
labels : ndarray of dtype int
|
|
Labeled array, where all connected regions are assigned the
|
|
same integer value.
|
|
num : int, optional
|
|
Number of labels, which equals the maximum label index and is only
|
|
returned if return_num is `True`.
|
|
|
|
See Also
|
|
--------
|
|
regionprops
|
|
|
|
References
|
|
----------
|
|
.. [1] Christophe Fiorio and Jens Gustedt, "Two linear time Union-Find
|
|
strategies for image processing", Theoretical Computer Science
|
|
154 (1996), pp. 165-181.
|
|
.. [2] Kensheng Wu, Ekow Otoo and Arie Shoshani, "Optimizing connected
|
|
component labeling algorithms", Paper LBNL-56864, 2005,
|
|
Lawrence Berkeley National Laboratory (University of California),
|
|
http://repositories.cdlib.org/lbnl/LBNL-56864
|
|
|
|
Examples
|
|
--------
|
|
>>> import numpy as np
|
|
>>> x = np.eye(3).astype(int)
|
|
>>> print(x)
|
|
[[1 0 0]
|
|
[0 1 0]
|
|
[0 0 1]]
|
|
>>> print(label(x, connectivity=1))
|
|
[[1 0 0]
|
|
[0 2 0]
|
|
[0 0 3]]
|
|
>>> print(label(x, connectivity=2))
|
|
[[1 0 0]
|
|
[0 1 0]
|
|
[0 0 1]]
|
|
>>> print(label(x, background=-1))
|
|
[[1 2 2]
|
|
[2 1 2]
|
|
[2 2 1]]
|
|
>>> x = np.array([[1, 0, 0],
|
|
... [1, 1, 5],
|
|
... [0, 0, 0]])
|
|
>>> print(label(x))
|
|
[[1 0 0]
|
|
[1 1 2]
|
|
[0 0 0]]
|
|
"""
|
|
return clabel(input, neighbors, background, return_num, connectivity)
|