+
    Ai?                         ^ RI t ^ RIHt ^ RIHt ^ RIt^ RIHt ^ RIH	t	 ^ RI
HtHt ^RIHt ^RIHt ^R	IHt ^R
IHtHt ^RIHtHt R tR t]P6                  ! RR7      RRR/R ll4       tR# )    N)Iterable)warn)random)kmeans2)pdist
squareform)utils)gaussian)rgb2lab)img_as_floatregular_grid)"_enforce_label_connectivity_cython_slic_cythonc                   \         P                  ! \         P                  ! V 4      \        R7      P                  p\
        P                  ! ^{4      p\         P                  ! \        V4      \        R7      p\         P                  ! VP                  V\        V\        V4      4      RR7      4      p^
pV'       d   V P                  ^,
          MV P                  p\        Wx,          V,          4      p	\        V4      V	8  d)   \         P                  ! VP                  WYRR7      4      p
M\        p
\        W:,          W6,          ^R7      w  r\!        \#        V4      4      p\         P$                  ! V\         P&                  4       VP)                  R4      p\+        WVR3,          ,
          4      P-                  ^ 4      pW3# )a  Find regularly spaced centroids on a mask.

Parameters
----------
mask : 3D ndarray
    The mask within which the centroids must be positioned.
n_centroids : int
    The number of centroids to be returned.

Returns
-------
centroids : 2D ndarray
    The coordinates of the centroids with shape (n_centroids, 3).
steps : 1D ndarray
    The approximate distance between two seeds in all dimensions.

dtypeF)replace)iter:NNN)nparraynonzerofloatTr   RandomStatearangelenintsortchoiceminndimEllipsisr   r   r   fill_diagonalinfargminabsmean)maskn_centroidsmultichannelcoordrngidx_fullidxdense_factorndim_spatialn_dense	idx_dense	centroids_distclosest_ptsstepss   &&&             c/var/www/html/photoedit/myenv/lib/python3.14/site-packages/skimage/segmentation/slic_superpixels.py_get_mask_centroidsr:      s@   ( HHRZZ%U355E 

S
!C yyU3/H
''#**Xs;E
'CU*S
TC L$0499q=diiL<-<=G
5zG GGCJJx%JHI		5+UZa@LI eI&'DT266"++b/K	k1n556;;A>E    c                   V P                   R,          w  r#p\        P                  RV1RV1RV13,          w  rVp\        V P                   R,          V4      pWX,          P	                  4       R\        P
                  3,          p	Wh,          P	                  4       R\        P
                  3,          p
Wx,          P	                  4       R\        P
                  3,          p\        P                  ! WV.RR7      p\        P                  ! V Uu. uF'  qP                  e   \        VP                  4      MRNK)  	  up4      pW3# u upi )a  Find regularly spaced centroids on the image.

Parameters
----------
image : 2D, 3D or 4D ndarray
    Input image, which can be 2D or 3D, and grayscale or
    multichannel.
n_centroids : int
    The (approximate) number of centroids to be returned.

Returns
-------
centroids : 2D ndarray
    The coordinates of the centroids with shape (~n_centroids, 3).
steps : 1D ndarray
    The approximate distance between two seeds in all dimensions.

N   NN.axis      ?r   )
shaper   mgridr   ravelnewaxisconcatenateasarraystepr   )imager*   dhwgrid_zgrid_ygrid_xslicescentroids_zcentroids_ycentroids_xr4   sr8   s   &&             r9   _get_grid_centroidsrU   G   s    & kk"oGA!XXbqb"1"bqbj1FF%++b/;7F.&&(bjj9K.&&(bjj9K.&&(bjj9K+FRPIJJfUf);affDfUVE Vs   -EF)multichannel_outputchannel_axisc                  V P                   ^8X  d   Ve   \        RV R24      h\        V 4      p \        P                  ! V P
                  4      pV P                  VRR7      p Ved   \        P                  ! V\        R7      pVe9   \        P                  ! WR7      p\        P                  ! WP                  4      pMTpW,          pMT pVP                  4       pVP                  4       p\        P                  ! V4      '       d   \        R4      h\        P                   ! V4      '       g   \        P                   ! V4      '       d   \        R	4      hV V,          p VV8w  d   V VV,
          ,          p VRJpV P
                  pR
pVRJpV P                   ^8X  d,   V \        P"                  R\        P"                  3,          p RpMgV P                   ^8X  d%   V'       d   V \        P"                  R3,          p RpM2V P                   ^8X  d"   V'       g   V R\        P"                  3,          p V'       d[   V'       g   VfO   V P                  V,          ^8w  d   V'       d   \        R4      hV P                  V,          ^8X  d   \%        V 4      p VR 9  d   \        R4      hR
pV'       d   VP'                  R4      pVP                   ^8X  d.   \        P                  ! V\        P"                  R3,          4      pVP                  V P                  R,          8w  d   \        R4      h\)        WV4      w  ppRpM\+        W4      w  ppVf   \        P,                  ! ^VR7      pM\/        V\0        4      '       d   \        P2                  ! VVR7      pV'       dh   VP4                  ^8w  d>   VP4                  ^8X  d   \7        R\8        ^R7       M\\        RVP4                   R24      h\        P:                  ! V^ ^4      pM*VP4                  ^8w  d   \        RVP4                   R24      h\        P                  ! VVR7      pM\=        R4      h\        P>                  ! V4      '       d$   \        P@                  ! WDV.VR7      pWE,          pM\/        V\0        4      '       d   \        P2                  ! VVR7      pV'       dh   VP4                  ^8w  d>   VP4                  ^8X  d   \7        R\8        ^R7       M\\        RVP4                   R24      h\        P:                  ! V^ ^ 4      pM*VP4                  ^8w  d   \        RVP4                   R24      hV^ 8  PC                  4       '       d!   \E        V4      ^ .,           p\G        WRR7      p VP                  ^ ,          p\        P                  ! \        PH                  ! V\        PJ                  ! VV P                  ^,          34      .R!R7      VR7      p\        V4      pRV,          p\        P                  ! V V,          VR7      p V'       d   \M        V VVVVVV
RVR7	       \M        V VVVVVV
R
VR7	      pV'       d   V'       d   VPO                  4       V,          pM.\P        PR                  ! V P                  R,          4      V,          p\U        VV,          4      p \U        V	V,          4      p!\W        VV V!VR7      pV'       d
   V^ ,          pV# )"u  Segments image using k-means clustering in Color-(x,y,z) space.

Parameters
----------
image : (M, N[, P][, C]) ndarray
    Input image. Can be 2D or 3D, and grayscale or multichannel
    (see `channel_axis` parameter).
    Input image must either be NaN-free or the NaN's must be masked out.
n_segments : int, optional
    The (approximate) number of labels in the segmented output image.
compactness : float, optional
    Balances color proximity and space proximity. Higher values give
    more weight to space proximity, making superpixel shapes more
    square/cubic. In SLICO mode, this is the initial compactness.
    This parameter depends strongly on image contrast and on the
    shapes of objects in the image. We recommend exploring possible
    values on a log scale, e.g., 0.01, 0.1, 1, 10, 100, before
    refining around a chosen value.
max_num_iter : int, optional
    Maximum number of iterations of k-means.
sigma : float or array-like of floats, optional
    Width of Gaussian smoothing kernel for pre-processing for each
    dimension of the image. The same sigma is applied to each dimension in
    case of a scalar value. Zero means no smoothing.
    Note that `sigma` is automatically scaled if it is scalar and
    if a manual voxel spacing is provided (see Notes section). If
    sigma is array-like, its size must match ``image``'s number
    of spatial dimensions.
spacing : array-like of floats, optional
    The voxel spacing along each spatial dimension. By default,
    `slic` assumes uniform spacing (same voxel resolution along
    each spatial dimension).
    This parameter controls the weights of the distances along the
    spatial dimensions during k-means clustering.
convert2lab : bool, optional
    Whether the input should be converted to Lab colorspace prior to
    segmentation. The input image *must* be RGB. Highly recommended.
    This option defaults to ``True`` when ``channel_axis` is not None *and*
    ``image.shape[-1] == 3``.
enforce_connectivity : bool, optional
    Whether the generated segments are connected or not
min_size_factor : float, optional
    Proportion of the minimum segment size to be removed with respect
    to the supposed segment size ```depth*width*height/n_segments```
max_size_factor : float, optional
    Proportion of the maximum connected segment size. A value of 3 works
    in most of the cases.
slic_zero : bool, optional
    Run SLIC-zero, the zero-parameter mode of SLIC. [2]_
start_label : int, optional
    The labels' index start. Should be 0 or 1.

    .. versionadded:: 0.17
       ``start_label`` was introduced in 0.17
mask : ndarray, optional
    If provided, superpixels are computed only where mask is True,
    and seed points are homogeneously distributed over the mask
    using a k-means clustering strategy. Mask number of dimensions
    must be equal to image number of spatial dimensions.

    .. versionadded:: 0.17
       ``mask`` was introduced in 0.17
channel_axis : int or None, optional
    If None, the image is assumed to be a grayscale (single channel) image.
    Otherwise, this parameter indicates which axis of the array corresponds
    to channels.

    .. versionadded:: 0.19
       ``channel_axis`` was added in 0.19.

Returns
-------
labels : 2D or 3D array
    Integer mask indicating segment labels.

Raises
------
ValueError
    If ``convert2lab`` is set to ``True`` but the last array
    dimension is not of length 3.
ValueError
    If ``start_label`` is not 0 or 1.
ValueError
    If ``image`` contains unmasked NaN values.
ValueError
    If ``image`` contains unmasked infinite values.
ValueError
    If ``image`` is 2D but ``channel_axis`` is -1 (the default).

Notes
-----
* If `sigma > 0`, the image is smoothed using a Gaussian kernel prior to
  segmentation.

* If `sigma` is scalar and `spacing` is provided, the kernel width is
  divided along each dimension by the spacing. For example, if ``sigma=1``
  and ``spacing=[5, 1, 1]``, the effective `sigma` is ``[0.2, 1, 1]``. This
  ensures sensible smoothing for anisotropic images.

* The image is rescaled to be in [0, 1] prior to processing (masked
  values are ignored).

* Images of shape (M, N, 3) are interpreted as 2D RGB images by default. To
  interpret them as 3D with the last dimension having length 3, use
  `channel_axis=None`.

* `start_label` is introduced to handle the issue [4]_. Label indexing
  starts at 1 by default.

References
----------
.. [1] Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi,
    Pascal Fua, and Sabine Süsstrunk, SLIC Superpixels Compared to
    State-of-the-art Superpixel Methods, TPAMI, May 2012.
    :DOI:`10.1109/TPAMI.2012.120`
.. [2] https://www.epfl.ch/labs/ivrl/research/slic-superpixels/#SLICO
.. [3] Irving, Benjamin. "maskSLIC: regional superpixel generation with
       application to local pathology characterisation in medical images.",
       2016, :arXiv:`1606.09518`
.. [4] https://github.com/scikit-image/scikit-image/issues/3722

Examples
--------
>>> from skimage.segmentation import slic
>>> from skimage.data import astronaut
>>> img = astronaut()
>>> segments = slic(img, n_segments=100, compactness=10)

Increasing the compactness parameter yields more square regions:

>>> segments = slic(img, n_segments=100, compactness=20)

Nzchannel_axis=z| indicates multichannel, which is not supported for a two-dimensional image; use channel_axis=None if the image is grayscaleT)copyr   r?   z.unmasked NaN values in image are not supportedz3unmasked infinite values in image are not supportedF.z/Lab colorspace conversion requires a RGB image.zstart_label should be 0 or 1.uint8r=   z*image and mask should have the same shape.zdInput image is 2D: spacing number of elements must be 2. In the future, a ValueError will be raised.)
stacklevelz#Input image is 2D, but spacing has z elements (expected 2).z#Input image is 3D, but spacing has z elements (expected 3).z!spacing must be None or iterable.zbInput image is 2D: sigma number of elements must be 2. In the future, a ValueError will be raised.z!Input image is 2D, but sigma has z!Input image is 3D, but sigma has reflect)sigmamoderA   )ignore_colorstart_label)r`   )r      r   ),r"   
ValueErrorr   r	   _supported_float_typer   astyper   ascontiguousarrayboolexpand_dimsbroadcast_torB   r!   maxisnanisinfrE   r   viewr:   rU   ones
isinstancer   rG   sizer   FutureWarninginsert	TypeErrorisscalarr   anylistr
   rF   zerosr   summathprodr   r   )"rI   
n_segmentscompactnessmax_num_iterr]   spacingconvert2labenforce_connectivitymin_size_factormax_size_factor	slic_zeror`   r)   rW   float_dtypemask_image_valuesiminimaxuse_maskr   is_2dr+   update_centroidsr4   r8   r*   segmentsrH   ratiolabelssegment_sizemin_sizemax_sizes"   &&&&&&&&&&&&&$                    r9   slicr   i   s   n zzQ<3L> *% %
 	
 E--ekk:K LL4L0E##D5#NN4;EOOE;;7EE| DD	xx~~IJJ	xx~~$NOO	TMEt|4HKKEEt+LzzQbjj#rzz12	q\bjj#o&	qc2::o&(;;;|$)kNOO[[&!+ENE& 899 yy!99>''RZZ_(=>D::R(IJJ.tN	5.uA	5''!5)	GX	&	&**WE2||q <<1$* &#$ %="<<.(?A 
 ))GQ2\\Q5<<. 79  &&we<;<<	{{5%.e<	E8	$	$

5.zzQ<<1$* &#$ %; ::,&=? 
 		%A.ZZ1_3::,57 
 		Uqc!)<//!$K##
	288[%++a.,I#JKRTUH u:D+E  e<E#
	
 
F 88:3L99U[[_5CL56563HhK
 Mr;   )d   g      $@
   r   NNTg      ?r>   Fra   Nr   )rx   collections.abcr   warningsr   numpyr   r   scipy.cluster.vqr   scipy.spatial.distancer   r   _sharedr	   _shared.filtersr
   colorr   utilr   r   _slicr   r   r:   rU   channel_as_last_axisr    r;   r9   <module>r      sa     $    $ 4  &  - C3lD 6W W 7Wr;   