code: def enhance_dark_holes(self, image, min_radius, max_radius):
      pixel_data = image.pixel_data
  
      mask = image.mask if image.has_mask else None
  
      se = self.__structuring_element(1, image.volumetric)
  
      inverted_image = pixel_data.max() - pixel_data
  
      previous_reconstructed_image = inverted_image
  
      eroded_image = inverted_image
  
      smoothed_image = numpy.zeros(pixel_data.shape)
  
      for i in range(max_radius + 1):
          eroded_image = skimage.morphology.erosion(eroded_image, se)
  
          if mask is not None:
              eroded_image *= mask
  
          reconstructed_image = skimage.morphology.reconstruction(
              eroded_image, inverted_image, "dilation", se
          )
  
          output_image = (
              previous_reconstructed_image - reconstructed_image
          )
  
          if i >= min_radius:
              smoothed_image = numpy.maximum(
                  smoothed_image, output_image
              )
  
          previous_reconstructed_image = reconstructed_image
  
      return smoothed_image
  
imports: import centrosome.filter
  import numpy
  import scipy.ndimage
  import skimage.exposure
  import skimage.filters
  import skimage.morphology
  import skimage.transform
  from cellprofiler_core.image import Image
  from cellprofiler_core.module import ImageProcessing
  from cellprofiler_core.setting import Binary
  from cellprofiler_core.setting.choice import Choice
  from cellprofiler_core.setting.range import IntegerRange
  from cellprofiler_core.setting.text import Float
  from cellprofiler_core.setting.text import Integer
  from cellprofiler.modules import _help
label_desc: Use image node_id 12 for calling the EnhanceOrSuppressFeatures obj's underlying member method code with example usage: obj.enhance_dark_holes(image, min_radius, max_radius) and returns: smoothed_image