code: def get_measurement_columns(self, pipeline, return_sources=False):
      result = []
      sources = []
      for image_name in self.images_list.value:
          gslength = self.granular_spectrum_length.value
          for i in range(1, gslength + 1):
              result += [
                  (
                      "Image",
                      self.granularity_feature(i, image_name),
                      COLTYPE_FLOAT,
                  )
              ]
              sources += [
                  (image_name, self.granularity_feature(i, image_name))
              ]
          for object_name in self.objects_list.value:
              for i in range(1, gslength + 1):
                  result += [
                      (
                          object_name,
                          self.granularity_feature(i, image_name),
                          COLTYPE_FLOAT,
                      )
                  ]
                  sources += [
                      (
                          object_name,
                          self.granularity_feature(i, image_name),
                      )
                  ]
  
      if return_sources:
          return result, sources
      else:
          return result
  
imports: import logging
  import cellprofiler_core.workspace
  import numpy
  import scipy.ndimage
  import skimage.morphology
  from cellprofiler_core.constants.measurement import COLTYPE_FLOAT
  from cellprofiler_core.module import Module
  from cellprofiler_core.setting import Divider, Binary, ValidationError
  from cellprofiler_core.setting.subscriber import ImageListSubscriber, LabelListSubscriber
  from cellprofiler_core.setting.text import Float, Integer
  from centrosome.cpmorphology import fixup_scipy_ndimage_result
  from cellprofiler.gui.help.content import image_resource
label_desc: Use image node_id 8 for calling the MeasureGranularity obj's underlying member method code with example usage: obj.get_measurement_columns(pipeline, return_sources) and returns: result,  sources, result