
    9i	                     \    S SK rSSKJr  SSKJr  \R                  " SS9SSS	.S
 jj5       rg)    N   )_felzenszwalb_cython   )utilsF)multichannel_output)channel_axisc                ~    Uc  U R                   S:  a  [        S5      e[        R                  " U 5      n [	        XX#S9$ )a  Computes Felsenszwalb's efficient graph based image segmentation.

Produces an oversegmentation of a multichannel (i.e. RGB) image
using a fast, minimum spanning tree based clustering on the image grid.
The parameter ``scale`` sets an observation level. Higher scale means
less and larger segments. ``sigma`` is the diameter of a Gaussian kernel,
used for smoothing the image prior to segmentation.

The number of produced segments as well as their size can only be
controlled indirectly through ``scale``. Segment size within an image can
vary greatly depending on local contrast.

For RGB images, the algorithm uses the euclidean distance between pixels in
color space.

Parameters
----------
image : (M, N[, 3]) ndarray
    Input image.
scale : float
    Free parameter. Higher means larger clusters.
sigma : float
    Width (standard deviation) of Gaussian kernel used in preprocessing.
min_size : int
    Minimum component size. Enforced using postprocessing.
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
-------
segment_mask : (M, N) ndarray
    Integer mask indicating segment labels.

References
----------
.. [1] Efficient graph-based image segmentation, Felzenszwalb, P.F. and
       Huttenlocher, D.P.  International Journal of Computer Vision, 2004

Notes
-----
    The `k` parameter used in the original paper renamed to `scale` here.

Examples
--------
>>> from skimage.segmentation import felzenszwalb
>>> from skimage.data import coffee
>>> img = coffee()
>>> segments = felzenszwalb(img, scale=3.0, sigma=0.95, min_size=5)
r   z@This algorithm works only on single or multi-channel 2d images. )scalesigmamin_size)ndim
ValueErrornp
atleast_3dr   )imager   r   r   r	   s        b/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/segmentation/_felzenszwalb.pyfelzenszwalbr      sB    p 

QQ
 	
 MM% E%SS    )r   g?   )numpyr   _felzenszwalb_cyr   _sharedr   channel_as_last_axisr    r   r   <module>r      s7     2  6=T =T 7=Tr   