code: def run(self, workspace):
      image = workspace.image_set.get_image(self.image_name.value)
      if image.has_mask:
          mask = image.mask
      else:
          mask = None
      pixel_data = image.pixel_data
      if pixel_data.ndim == 3:
          if any(
              [
                  numpy.any(
                      pixel_data[:, :, 0] != pixel_data[:, :, plane]
                  )
                  for plane in range(1, pixel_data.shape[2])
              ]
          ):
              LOGGER.warning("Image is color, converting to grayscale")
          pixel_data = numpy.sum(pixel_data, 2) / pixel_data.shape[2]
      for function in self.functions:
          pixel_data = self.run_function(function, pixel_data, mask)
      new_image = Image(pixel_data, parent_image=image)
      workspace.image_set.add(self.output_image_name.value, new_image)
      if self.show_window:
          workspace.display_data.image = image.pixel_data
          workspace.display_data.pixel_data = pixel_data
  
imports: import logging
  import centrosome.cpmorphology
  import centrosome.filter
  import numpy
  import scipy.ndimage
  from cellprofiler_core.image import Image
  from cellprofiler_core.module import Module
  from cellprofiler_core.setting import Binary
  from cellprofiler_core.setting import Divider
  from cellprofiler_core.setting import SettingsGroup
  from cellprofiler_core.setting.choice import Choice
  from cellprofiler_core.setting.do_something import DoSomething
  from cellprofiler_core.setting.do_something import RemoveSettingButton
  from cellprofiler_core.setting.subscriber import ImageSubscriber
  from cellprofiler_core.setting.text import ImageName, Integer
label_desc: Use image node_id 6 for calling the Morph obj's underlying member method code with example usage: obj.run(workspace) without return types