skimage.segmentation._felzenszwalb 源代码

import numpy as np

from ._felzenszwalb_cy import _felzenszwalb_cython
from .._shared import utils


[文档] @utils.channel_as_last_axis(multichannel_output=False) 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)