
    a6dZ                         d Z ddlZddlZddlmZ ddlmZ dZ	d e	D             Z
dZ	e
                    d	 e	D                        d
 Zd ZddddZddddZdS )z#Miscellaneous morphology functions.    N)ndimage   )warn)erosiondilationopeningclosingc                     i | ]}|d |z   	S )grey_ .0xs     7lib/python3.11/site-packages/skimage/morphology/misc.py
<dictcomp>r   
   s    111a1gk111    )binary_erosionbinary_dilationbinary_openingbinary_closingblack_tophatwhite_tophatc                     i | ]}||S r   r   r   s     r   r   r      s    ,,,1,,,r   c                 H     t          j                   d fd	            }|S )a  Decorator to add a default footprint to morphology functions.

    Parameters
    ----------
    func : function
        A morphology function such as erosion, dilation, opening, closing,
        white_tophat, or black_tophat.

    Returns
    -------
    func_out : function
        The function, using a default footprint of same dimension
        as the input image with connectivity 1.

    Nc                 X    |t          j        | j        d          } | g|R d|i|S )N   	footprint)ndigenerate_binary_structurendim)imager   argskwargsfuncs       r   func_outz#default_footprint.<locals>.func_out"   sB    5ej!DDItE@@@@Y@@@@r   )N)	functoolswraps)r$   r%   s   ` r   default_footprintr(      sE      _TA A A A A A
 Or   c                     | j         t          k    s<t          j        | j         t          j                  st          d| j          d          d S d S )Nz4Only bool or integer image types are supported. Got .)dtypeboolnp
issubdtypeinteger	TypeError)ars    r   _check_dtype_supportedr2   +   s]    Hbh
 C C +!x+ + + , , 	, r   @   r   outc                L   t          |            ||                                 }n| |dd<   |dk    r|S |j        t          k    rRt	          j        | j        |          }t          j        | t          j	                  }t	          j
        | ||           n|}	 t          j        |                                          }n# t          $ r t          d          w xY wt          |          dk    r|j        t          k    rt          d           ||k     }||         }d||<   |S )ap  Remove objects smaller than the specified size.

    Expects ar to be an array with labeled objects, and removes objects
    smaller than min_size. If `ar` is bool, the image is first labeled.
    This leads to potentially different behavior for bool and 0-and-1
    arrays.

    Parameters
    ----------
    ar : ndarray (arbitrary shape, int or bool type)
        The array containing the objects of interest. If the array type is
        int, the ints must be non-negative.
    min_size : int, optional (default: 64)
        The smallest allowable object size.
    connectivity : int, {1, 2, ..., ar.ndim}, optional (default: 1)
        The connectivity defining the neighborhood of a pixel. Used during
        labelling if `ar` is bool.
    out : ndarray
        Array of the same shape as `ar`, into which the output is
        placed. By default, a new array is created.

    Raises
    ------
    TypeError
        If the input array is of an invalid type, such as float or string.
    ValueError
        If the input array contains negative values.

    Returns
    -------
    out : ndarray, same shape and type as input `ar`
        The input array with small connected components removed.

    Examples
    --------
    >>> from skimage import morphology
    >>> a = np.array([[0, 0, 0, 1, 0],
    ...               [1, 1, 1, 0, 0],
    ...               [1, 1, 1, 0, 1]], bool)
    >>> b = morphology.remove_small_objects(a, 6)
    >>> b
    array([[False, False, False, False, False],
           [ True,  True,  True, False, False],
           [ True,  True,  True, False, False]])
    >>> c = morphology.remove_small_objects(a, 7, connectivity=2)
    >>> c
    array([[False, False, False,  True, False],
           [ True,  True,  True, False, False],
           [ True,  True,  True, False, False]])
    >>> d = morphology.remove_small_objects(a, 6, out=a)
    >>> d is a
    True

    Nr   )r+   )outputz{Negative value labels are not supported. Try relabeling the input with `scipy.ndimage.label` or `skimage.morphology.label`.r   z[Only one label was provided to `remove_small_objects`. Did you mean to use a boolean array?)r2   copyr+   r,   r   r   r    r-   
zeros_likeint32labelbincountravel
ValueErrorlenr   )	r1   min_sizeconnectivityr5   r   ccscomponent_sizes	too_smalltoo_small_masks	            r   remove_small_objectsrF   2   sD   p 2
{ggiiAAA1}}

yD1"'<HH	mBbh///	"i,,,,,8+ciikk22 8 8 8 7 8 8 	88
 ?q  SY$%6%6 4 	5 	5 	5  (*Is^NCJs   &C Cc                h   t          |            | j        t          k    rt          dt                     | |j        t          k    rt          d          n|                     t          d          }t          j        | |           t          ||||          }t          j        ||           |S )ap  Remove contiguous holes smaller than the specified size.

    Parameters
    ----------
    ar : ndarray (arbitrary shape, int or bool type)
        The array containing the connected components of interest.
    area_threshold : int, optional (default: 64)
        The maximum area, in pixels, of a contiguous hole that will be filled.
        Replaces `min_size`.
    connectivity : int, {1, 2, ..., ar.ndim}, optional (default: 1)
        The connectivity defining the neighborhood of a pixel.
    out : ndarray
        Array of the same shape as `ar` and bool dtype, into which the
        output is placed. By default, a new array is created.

    Raises
    ------
    TypeError
        If the input array is of an invalid type, such as float or string.
    ValueError
        If the input array contains negative values.

    Returns
    -------
    out : ndarray, same shape and type as input `ar`
        The input array with small holes within connected components removed.

    Examples
    --------
    >>> from skimage import morphology
    >>> a = np.array([[1, 1, 1, 1, 1, 0],
    ...               [1, 1, 1, 0, 1, 0],
    ...               [1, 0, 0, 1, 1, 0],
    ...               [1, 1, 1, 1, 1, 0]], bool)
    >>> b = morphology.remove_small_holes(a, 2)
    >>> b
    array([[ True,  True,  True,  True,  True, False],
           [ True,  True,  True,  True,  True, False],
           [ True, False, False,  True,  True, False],
           [ True,  True,  True,  True,  True, False]])
    >>> c = morphology.remove_small_holes(a, 2, connectivity=2)
    >>> c
    array([[ True,  True,  True,  True,  True, False],
           [ True,  True,  True, False,  True, False],
           [ True, False, False,  True,  True, False],
           [ True,  True,  True,  True,  True, False]])
    >>> d = morphology.remove_small_holes(a, 2, out=a)
    >>> d is a
    True

    Notes
    -----
    If the array type is int, it is assumed that it contains already-labeled
    objects. The labels are not kept in the output image (this function always
    outputs a bool image). It is suggested that labeling is completed after
    using this function.

    z\Any labeled images will be returned as a boolean array. Did you mean to use a boolean array?Nzout dtype must be boolT)r8   r4   )
r2   r+   r,   r   UserWarningr0   astyper-   logical_notrF   )r1   area_thresholdrA   r5   s       r   remove_small_holesrL      s    v 2 
x4 45@	B 	B 	B 94555  ii4i(( N23 sNLc
J
J
JCN3C    Jr   )r3   r   )__doc__numpyr-   r&   scipyr   r   _shared.utilsr   funcsskimage2ndimageupdater(   r2   rF   rL   r   r   r   <module>rT      s   ) )                                 	6115111	;   ,,e,,, - - -  2, , ,X X X X X XvPT P P P P P P Pr   