code: def open(f, Bc=None, out=None, output=None):
      """
      y = open(f, Bc={3x3 cross}, out={np.empty_like(f)})
  
      Morphological opening.
  
      `open` creates the image y by the morphological opening of the
      image `f` by the structuring element `Bc`.
  
      In the binary case, the opening by the structuring element `Bc` may be
      interpreted as the union of translations of `b` included in `f`. In the
      gray-scale case, there is a similar interpretation taking the functions
      umbra.
  
      Parameters
      ----------
      f : ndarray
          Gray-scale (uint8 or uint16) or binary image.
      Bc : ndarray, optional
          Structuring element (default: 3x3 elementary cross).
      out : ndarray, optional
          Output array
      output : deprecated
          Do not use
  
      Returns
      -------
      y : ndarray
  
      See Also
      --------
      open : function
      """
      _verify_is_integer_type(f, "open")
      Bc = get_structuring_elem(f, Bc)
      eroded = erode(f, Bc, out=out)
      # We need to copy for the simple reason that otherwise, the image will be
      # modified in place, which can mess up the implementation
      return dilate(eroded.copy(), Bc, out=eroded)
  
imports: from __future__ import division
  import numpy
  from .internal import _get_output, _verify_is_integer_type, _check_2
  from .None import _morph
label_desc: Use image node_id 9 for calling a global function with example usage: open(f, Bc, out, output) and returns: dilate