skimage.util._slice_along_axes 源代码

__all__ = ['slice_along_axes']


[文档] def slice_along_axes(image, slices, axes=None, copy=False): """Slice an image along given axes. Parameters ---------- image : ndarray Input image. slices : list of 2-tuple (a, b) where a < b. For each axis in `axes`, a corresponding 2-tuple ``(min_val, max_val)`` to slice with (as with Python slices, ``max_val`` is non-inclusive). axes : int or tuple, optional Axes corresponding to the limits given in `slices`. If None, axes are in ascending order, up to the length of `slices`. copy : bool, optional If True, ensure that the output is not a view of `image`. Returns ------- out : ndarray The region of `image` corresponding to the given slices and axes. Examples -------- >>> from skimage import data >>> img = data.camera() >>> img.shape (512, 512) >>> cropped_img = slice_along_axes(img, [(0, 100)]) >>> cropped_img.shape (100, 512) >>> cropped_img = slice_along_axes(img, [(0, 100), (0, 100)]) >>> cropped_img.shape (100, 100) >>> cropped_img = slice_along_axes(img, [(0, 100), (0, 75)], axes=[1, 0]) >>> cropped_img.shape (75, 100) """ # empty length of bounding box detected on None if not slices: return image if axes is None: axes = list(range(image.ndim)) if len(axes) < len(slices): raise ValueError("More `slices` than available axes") elif len(axes) != len(slices): raise ValueError("`axes` and `slices` must have equal length") if len(axes) != len(set(axes)): raise ValueError("`axes` must be unique") if not all(a >= 0 and a < image.ndim for a in axes): raise ValueError( f"axes {axes} out of range; image has only " f"{image.ndim} dimensions" ) _slices = [ slice(None), ] * image.ndim for (a, b), ax in zip(slices, axes): if a < 0: a %= image.shape[ax] if b < 0: b %= image.shape[ax] if a > b: raise ValueError( f"Invalid slice ({a}, {b}): must be ordered `(min_val, max_val)`" ) if a < 0 or b > image.shape[ax]: raise ValueError( f"Invalid slice ({a}, {b}) for image with dimensions {image.shape}" ) _slices[ax] = slice(a, b) image_slice = image[tuple(_slices)] if copy and image_slice.base is not None: image_slice = image_slice.copy() return image_slice