ó
 ‰\c           @   s5   d  d l  Z d d l m Z d d d e d „ Z d S(   iÿÿÿÿNi   (   t   _felzenszwalb_cythongš™™™™™é?i   c         C   sP   | r% |  j  d k r% t d ƒ ‚ n  t j |  ƒ }  t |  d | d | d | ƒS(   sñ  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 : (width, height, 3) or (width, height) ndarray
        Input image.
    scale : float
        Free parameter. Higher means larger clusters.
    sigma : float
        Width of Gaussian kernel used in preprocessing.
    min_size : int
        Minimum component size. Enforced using postprocessing.
    multichannel : bool, optional (default: True)
        Whether the last axis of the image is to be interpreted as multiple
        channels. A value of False, for a 3D image, is not currently supported.

    Returns
    -------
    segment_mask : (width, height) 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

    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)
    i   s@   This algorithm works only on single or multi-channel 2d images. t   scalet   sigmat   min_size(   t   ndimt
   ValueErrort   npt
   atleast_3dR    (   t   imageR   R   R   t   multichannel(    (    sA   lib/python2.7/site-packages/skimage/segmentation/_felzenszwalb.pyt   felzenszwalb   s
    0(   t   numpyR   t   _felzenszwalb_cyR    t   TrueR
   (    (    (    sA   lib/python2.7/site-packages/skimage/segmentation/_felzenszwalb.pyt   <module>   s   