code: def run(self, workspace):
      i_min = np.iinfo(int).max
      j_min = np.iinfo(int).max
      off_x, off_y = self.align(
          workspace,
          self.first_input_image.value,
          self.second_input_image.value,
      )
      names = [
          (self.first_input_image.value, self.first_output_image.value),
          (
              self.second_input_image.value,
              self.second_output_image.value,
          ),
      ]
      offsets = [(0, 0), (off_y, off_x)]
  
      for additional in self.additional_images:
          names.append(
              (
                  additional.input_image_name.value,
                  additional.output_image_name.value,
              )
          )
          if additional.align_choice == A_SIMILARLY:
              a_off_x, a_off_y = off_x, off_y
          else:
              a_off_x, a_off_y = self.align(
                  workspace,
                  self.first_input_image.value,
                  additional.input_image_name.value,
              )
          offsets.append((a_off_y, a_off_x))
  
      shapes = [
          workspace.image_set.get_image(x).pixel_data.shape[:2]
          for x, _ in names
      ]
      offsets, shapes = self.adjust_offsets(offsets, shapes)
  
      #
      # Align and write the measurements
      #
      for (input_name, output_name), (y, x), shape in zip(
          names, offsets, shapes
      ):
          self.apply_alignment(
              workspace, input_name, output_name, x, y, shape
          )
          for axis, value in (("X", -x), ("Y", -y)):
              feature = MEASUREMENT_FORMAT % (axis, output_name)
              workspace.measurements.add_image_measurement(
                  feature, value
              )
  
      # save data for display
      workspace.display_data.image_info = [
          (
              input_name,
              workspace.image_set.get_image(input_name).pixel_data,
              output_name,
              workspace.image_set.get_image(output_name).pixel_data,
              x,
              y,
              shape,
          )
          for (input_name, output_name), (y, x), shape in zip(
              names, offsets, shapes
          )
      ]
  
imports: import numpy
  import scipy.ndimage
  import scipy.sparse
  from centrosome.filter import stretch
  from scipy.fftpack import fft2, ifft2
  from ..constants.measurement import COLTYPE_INTEGER
  from ..image import Image
  from ..module import Module
  from ..setting import Divider, SettingsGroup
  from ..setting.choice import Choice
  from ..setting.do_something import DoSomething, RemoveSettingButton
  from ..setting.subscriber import ImageSubscriber
  from ..setting.text import ImageName
label_desc: Use image node_id 6 for calling the Align obj's underlying member method code with example usage: obj.run(workspace) without return types