code: def felzenszwalb(
      image, scale=1, sigma=0.8, min_size=20, *, channel_axis=-1
  ):
      """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)
      """
      if channel_axis is None and image.ndim > 2:
          raise ValueError(
              "This algorithm works only on single or "
              "multi-channel 2d images. "
          )
  
      image = np.atleast_3d(image)
      return _felzenszwalb_cython(
          image, scale=scale, sigma=sigma, min_size=min_size
      )
  
label_desc: Use image node_id 1 for calling a global function with example usage: felzenszwalb(image, scale, sigma, min_size) and returns: _felzenszwalb_cython