code: def find_peaks(dt, r_max=4, footprint=None):
      r
      im = dt > 0
      if im.ndim != im.squeeze().ndim:
          warnings.warn('Input image conains a singleton axis:' + str(im.shape) +
                        ' Reduce dimensionality with np.squeeze(im) to avoid' +
                        ' unexpected behavior.')
      if footprint is None:
          if im.ndim == 2:
              footprint = disk
          elif im.ndim == 3:
              footprint = ball
          else:
              raise Exception("only 2-d and 3-d images are supported")
      mx = spim.maximum_filter(dt + 2*(~im), footprint=footprint(r_max))
      peaks = (dt == mx)*im
      return peaks
docs: r"""
      Returns all local maxima in the distance transform
  
      Parameters
      ----------
      dt : ND-array
          The distance transform of the pore space.  This may be calculated and
          filtered using any means desired.
  
      r_max : scalar
          The size of the structuring element used in the maximum filter.  This
          controls the localness of any maxima. The default is 4 voxels.
  
      footprint : ND-array
          Specifies the shape of the structuring element used to define the
          neighborhood when looking for peaks.  If none is specified then a
          spherical shape is used (or circular in 2D).
  
      Returns
      -------
      image : ND-array
          An array of booleans with ``True`` values at the location of any
          local maxima.
  
      Notes
      -----
      It is also possible ot the ``peak_local_max`` function from the
      ``skimage.feature`` module as follows:
  
      ``peaks = peak_local_max(image=dt, min_distance=r, exclude_border=0,
      indices=False)``
  
      This automatically uses a square structuring element which is significantly
      faster than using a circular or spherical element.