code: def extract_subsection(im, shape):
      r
      # Check if shape was given as a fraction
      shape = sp.array(shape)
      if shape[0] < 1:
          shape = sp.array(im.shape) * shape
      center = sp.array(im.shape) / 2
      s_im = []
      for dim in range(im.ndim):
          r = shape[dim] / 2
          lower_im = sp.amax((center[dim] - r, 0))
          upper_im = sp.amin((center[dim] + r, im.shape[dim]))
          s_im.append(slice(int(lower_im), int(upper_im)))
      return im[tuple(s_im)]
docs: r"""
      Extracts the middle section of a image
  
      Parameters
      ----------
      im : ND-array
          Image from which to extract the subsection
  
      shape : array_like
          Can either specify the size of the extracted section or the fractional
          size of the image to extact.
  
      Returns
      -------
      image : ND-array
          An ND-array of size given by the ``shape`` argument, taken from the
          center of the image.
  
      Examples
      --------
      >>> import scipy as sp
      >>> from porespy.tools import extract_subsection
      >>> im = sp.array([[1, 1, 1, 1], [1, 2, 2, 2], [1, 2, 3, 3], [1, 2, 3, 4]])
      >>> print(im)
      [[1 1 1 1]
       [1 2 2 2]
       [1 2 3 3]
       [1 2 3 4]]
      >>> im = extract_subsection(im=im, shape=[2, 2])
      >>> print(im)
      [[2 2]
       [2 3]]