class_docstr: Crops the image `src` and `bbox` to the given `crop`.
  
  Parameters
  ----------
  crop_box : tuple
      Tuple of length 4. :math:`(x_{min}, y_{min}, width, height)`
  allow_outside_center : bool
      If `False`, remove bounding boxes which have centers outside cropping area.
  
  
  Inputs:
      - **data**: input tensor with (Hi x Wi x C) shape.
      - **bbox**: input tensor with shape (N, 4+) where N is the number of bounding boxes.
          The second axis represents attributes of the bounding box.
          Specifically, these are :math:`(x_{min}, y_{min}, x_{max}, y_{max})`,
          we allow additional attributes other than coordinates, which stay intact
          during bounding box transformations.
  
  Outputs:
      - **out**: output tensor with (H x W x C) shape.
      - **bbox**: output tensor with shape (M, 4+) where M <= N is the number of valid bounding
          boxes after cropping. :math:`(x_{min}, y_{min}, x_{max}, y_{max})`
code: def __init__(self, crop, allow_outside_center=False):
      super(ImageBboxCrop, self).__init__()
      assert (
          len(crop) == 4
      ), "expect crop to be (x_min, y_min, x_max, y_max)"
      self.xmin = crop[0]
      self.ymin = crop[1]
      self.width = crop[2]
      self.height = crop[3]
      assert self.xmin >= 0
      assert self.ymin >= 0
      assert self.width > 0
      assert self.height > 0
      self.xmax = self.width + self.xmin
      self.ymax = self.height + self.ymin
      self._allow_outside_center = allow_outside_center
  
imports: import random
  from .......base import numeric_types
  from ......block import Block
  from .......util import is_np_array
  from .......None import ndarray, numpy_extension, numpy
  from .utils import _check_bbox_shape, bbox_crop, bbox_translate
  from .utils import bbox_resize, bbox_random_crop_with_constraints
label_desc: Use image node_id 1 to create a new ImageBboxCrop object from inherited base classes: Block with example: obj = ImageBboxCrop(crop, allow_outside_center)