code: def close(f, Bc=None, out=None, output=None):
      """
      y = close(f, Bc={3x3 cross}, out={np.empty_like(f)})
  
      Morphological closing.
  
      `close` creates the image `y` by the morphological closing of the
      image `f` by the structuring element `Bc`. In the binary case, the
      closing by a structuring element `Bc` may be interpreted as the
      intersection of all the binary images that contain the image `f`
      and have a hole equal to a translation of `Bc`. 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, "close")
      Bc = get_structuring_elem(f, Bc)
      dilated = dilate(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 erode(dilated.copy(), Bc, out=dilated)
  
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 10 for calling a global function with example usage: close(f, Bc, out, output) and returns: erode