def run_image_set(self,
                      projection_type,
                      images_and_masks,
                      frequency=9,
                      run_last=True):
        image_set_list = cpi.ImageSetList()
        image_count = len(images_and_masks)
        for i in range(image_count):
            pixel_data, mask = images_and_masks[i]
            if mask is None:
                image = cpi.Image(pixel_data)
            else:
                image = cpi.Image(pixel_data, mask)
            image_set_list.get_image_set(i).add(IMAGE_NAME, image)
        #
        # Add bogus image at end for 2nd group
        #
        bogus_image = cpi.Image(np.zeros((10, 20)))
        image_set_list.get_image_set(image_count).add(IMAGE_NAME, bogus_image)

        pipeline = cpp.Pipeline()
        module = M.MakeProjection()
        module.module_num = 1
        module.image_name.value = IMAGE_NAME
        module.projection_image_name.value = PROJECTED_IMAGE_NAME
        module.projection_type.value = projection_type
        module.frequency.value = frequency
        pipeline.add_module(module)
        m = cpmeas.Measurements()
        workspace = cpw.Workspace(pipeline, module, None, None, m,
                                  image_set_list)
        module.prepare_run(workspace)
        module.prepare_group(workspace, {}, range(1,
                                                  len(images_and_masks) + 1))
        for i in range(image_count):
            if i > 0:
                image_set_list.purge_image_set(i - 1)
            w = cpw.Workspace(pipeline,
                              module, image_set_list.get_image_set(i),
                              cpo.ObjectSet(), m, image_set_list)
            if i < image_count - 1 or run_last:
                module.run(w)
        module.post_group(w, {})
        image = w.image_set.get_image(PROJECTED_IMAGE_NAME)
        #
        # Make sure that the image provider is reset after prepare_group
        #
        module.prepare_group(workspace, {}, [image_count + 1])
        image_set = image_set_list.get_image_set(image_count)
        w = cpw.Workspace(pipeline, module, image_set, cpo.ObjectSet(), m,
                          image_set_list)
        module.run(w)
        image_provider = image_set.get_image_provider(PROJECTED_IMAGE_NAME)
        self.assertEqual(np.max(image_provider.count), 1)

        return image
Esempio n. 2
0
    def test_02_04_mask_input_image(self):
        x = YS.IdentifyYeastCells()
        x.object_name.value = OBJECTS_NAME
        x.input_image_name.value = IMAGE_NAME
        x.segmentation_precision.value = 11
        x.background_brighter_then_cell_inside.value = False
        x.average_cell_diameter.value = 30

        img = np.ones((200, 200)) * 0.5
        draw_brightfield_cell(img, 100, 100, 20, False)
        draw_brightfield_cell(img, 25, 25, 10, False)
        img[0:10, 0:10] = 1
        img[180:200, 180:200] = 0

        msk = np.zeros((200, 200))
        msk[0:10, 0:10] = 1
        msk[180:200, 180:200] = 1

        image = cpi.Image(img, file_name="test_02_04_mask_input_image")
        mask = cpi.Image(msk)
        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        image_set.providers.append(cpi.VanillaImageProvider(IMAGE_NAME, image))
        image_set.providers.append(
            cpi.VanillaImageProvider(MASK_IMAGE_NAME, mask))

        # first try without masking
        object_set = cpo.ObjectSet()
        measurements = cpmeas.Measurements()
        pipeline = cellprofiler.pipeline.Pipeline()
        x.run(Workspace(pipeline, x, image_set, object_set, measurements,
                        None))
        objects = object_set.get_objects(OBJECTS_NAME)
        self.assertEqual(0, objects.segmented.max(),
                         "Cells should not be found due to the distractors")

        # now if we use masking option we should find these cells
        object_set = cpo.ObjectSet()
        measurements = cpmeas.Measurements()
        pipeline = cellprofiler.pipeline.Pipeline()
        x.ignore_mask_image_name.value = MASK_IMAGE_NAME
        x.run(Workspace(pipeline, x, image_set, object_set, measurements,
                        None))
        objects = object_set.get_objects(OBJECTS_NAME)
        self.assertEqual(objects.segmented[25, 25] > 0, 1,
                         "The small object was not there")
        self.assertEqual(objects.segmented[100, 100] > 0, 1,
                         "The large object was not there")
Esempio n. 3
0
    def test_01_04_split_channels(self):
        np.random.seed(13)
        image = np.random.uniform(size=(20, 10, 5))
        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        image_set.add(IMAGE_NAME, cpi.Image(image))

        module = cpm_ctg.ColorToGray()
        module.module_num = 1
        module.image_name.value = IMAGE_NAME
        module.combine_or_split.value = cpm_ctg.SPLIT
        module.rgb_or_channels.value = cpm_ctg.CH_CHANNELS
        module.add_channel()
        module.add_channel()

        channel_indexes = np.array([1, 4, 2])
        for i, channel_index in enumerate(channel_indexes):
            module.channels[i].channel_choice.value = module.channel_names[channel_index]
            module.channels[i].image_name.value = OUTPUT_IMAGE_F % i

        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)
        workspace = Workspace(pipeline, module, image_set, cpo.ObjectSet(),
                              cpm.Measurements(), image_set_list)
        module.run(workspace)
        for i, channel_index in enumerate(channel_indexes):
            pixels = image_set.get_image(module.channels[i].image_name.value).pixel_data
            self.assertEqual(pixels.ndim, 2)
            self.assertEqual(tuple(pixels.shape), (20, 10))
            np.testing.assert_almost_equal(image[:, :, channel_index], pixels)
Esempio n. 4
0
    def make_workspace(self, file_name):
        fd = open(os.path.join(self.path, file_name), 'w')
        fd.write("As the poet said, 'Only God can make a tree' -- probably "
                 "because it's so hard to figure out how to get the "
                 "bark on.\n-- Woody Allen\n")
        fd.close()
        module = R.RenameOrRenumberFiles()
        module.image_name.value = IMAGE_NAME
        module.module_num = 1

        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)

        m = cpmeas.Measurements()
        m.add_image_measurement("FileName_%s" % IMAGE_NAME,
                                file_name)
        m.add_image_measurement("PathName_%s" % IMAGE_NAME,
                                self.path)

        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)

        workspace = cpw.Workspace(pipeline, module, image_set,
                                  cpo.ObjectSet(), m, image_set_list)
        return workspace, module
Esempio n. 5
0
    def make_workspace(self, primary_labels, secondary_labels):
        """Make a workspace that has objects for the input labels

        returns a workspace with the following
            object_set - has object with name "primary" containing
                         the primary labels
                         has object with name "secondary" containing
                         the secondary labels
        """
        isl = cpi.ImageSetList()
        module = cpmit.IdentifyTertiarySubregion()
        module.module_num = 1
        module.primary_objects_name.value = PRIMARY
        module.secondary_objects_name.value = SECONDARY
        module.subregion_objects_name.value = TERTIARY
        workspace = cpw.Workspace(cpp.Pipeline(), module, isl.get_image_set(0),
                                  cpo.ObjectSet(), cpm.Measurements(), isl)
        workspace.pipeline.add_module(module)

        for labels, name in ((primary_labels, PRIMARY), (secondary_labels,
                                                         SECONDARY)):
            objects = cpo.Objects()
            objects.segmented = labels
            workspace.object_set.add_objects(objects, name)
        return workspace
    def test_03_03_color_mask(self):
        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        np.random.seed(0)
        pixel_data = np.random.uniform(size=(10, 15, 3)).astype(np.float32)
        image_set.add(IMAGE_NAME, cpi.Image(pixel_data))

        masking_image = np.random.uniform(size=(10, 15))

        image_set.add(MASKING_IMAGE_NAME, cpi.Image(masking_image))
        expected_mask = masking_image > .5

        pipeline = cpp.Pipeline()
        module = M.MaskImage()
        module.source_choice.value = M.IO_IMAGE
        module.object_name.value = OBJECTS_NAME
        module.image_name.value = IMAGE_NAME
        module.masking_image_name.value = MASKING_IMAGE_NAME
        module.masked_image_name.value = MASKED_IMAGE_NAME
        module.invert_mask.value = False
        module.module_num = 1

        workspace = cpw.Workspace(pipeline, module, image_set, cpo.ObjectSet(),
                                  cpmeas.Measurements(), image_set_list)
        module.run(workspace)
        masked_image = workspace.image_set.get_image(MASKED_IMAGE_NAME)
        self.assertTrue(isinstance(masked_image, cpi.Image))
        self.assertTrue(
            np.all(masked_image.pixel_data[expected_mask, :] == pixel_data[
                expected_mask, :]))
        self.assertTrue(
            np.all(masked_image.pixel_data[~expected_mask, :] == 0))
        self.assertTrue(np.all(masked_image.mask == expected_mask))
        self.assertFalse(masked_image.has_masking_objects)
Esempio n. 7
0
 def execute(self,
             image,
             function,
             mask=None,
             custom_repeats=None,
             scale=None,
             module=None):
     '''Run the morph module on an input and return the resulting image'''
     INPUT_IMAGE_NAME = 'input'
     OUTPUT_IMAGE_NAME = 'output'
     if module is None:
         module = morph.Morph()
     module.functions[0].function.value = function
     module.image_name.value = INPUT_IMAGE_NAME
     module.output_image_name.value = OUTPUT_IMAGE_NAME
     if custom_repeats is None:
         module.functions[0].repeats_choice.value = morph.R_ONCE
     elif custom_repeats == -1:
         module.functions[0].repeats_choice.value = morph.R_FOREVER
     else:
         module.functions[0].repeats_choice.value = morph.R_CUSTOM
         module.functions[0].custom_repeats.value = custom_repeats
     if scale is not None:
         module.functions[0].scale.value = scale
     pipeline = cpp.Pipeline()
     object_set = cpo.ObjectSet()
     image_set_list = cpi.ImageSetList()
     image_set = image_set_list.get_image_set(0)
     workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                               cpmeas.Measurements(), image_set_list)
     image_set.add(INPUT_IMAGE_NAME, cpi.Image(image, mask=mask))
     module.run(workspace)
     output = image_set.get_image(OUTPUT_IMAGE_NAME)
     return output.pixel_data
 def make_workspace(self, images, masks):
     pipeline = cpp.Pipeline()
     object_set = cpo.ObjectSet()
     image_set_list = cpi.ImageSetList()
     image_set = image_set_list.get_image_set(0)
     module = A.Align()
     workspace = cpw.Workspace(pipeline,
                               module,
                               image_set,
                               object_set,
                               cpmeas.Measurements(),
                               image_set_list)
     for index, (pixels, mask) in enumerate(zip(images, masks)):
         if mask is None:
             image = cpi.Image(pixels)
         else:
             image = cpi.Image(pixels, mask=mask)
         input_name = 'Channel%d' % index
         output_name = 'Aligned%d' % index
         image_set.add(input_name, image)
         if index == 0:
             module.first_input_image.value = input_name
             module.first_output_image.value = output_name
         elif index == 1:
             module.second_input_image.value = input_name
             module.second_output_image.value = output_name
         else:
             module.add_image()
             ai = module.additional_images[-1]
             ai.input_image_name.value = input_name
             ai.output_image_name.value = output_name
     return workspace, module
Esempio n. 9
0
    def test_04_01_extent(self):
        module = cpmoas.MeasureObjectAreaShape()
        module.object_groups[0].name.value = "SomeObjects"
        module.calculate_zernikes.value = True
        object_set = cpo.ObjectSet()
        labels = np.zeros((10, 20), int)
        # 3/4 of a square is covered
        labels[5:7, 5:10] = 1
        labels[7:9, 5:15] = 1
        objects = cpo.Objects()
        objects.segmented = labels
        object_set.add_objects(objects, "SomeObjects")
        module.module_num = 1
        image_set_list = cpi.ImageSetList()
        measurements = cpmeas.Measurements()
        pipeline = cpp.Pipeline()
        pipeline.add_module(module)

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        workspace = cpw.Workspace(pipeline, module,
                                  image_set_list.get_image_set(0),
                                  object_set, measurements, image_set_list)
        module.run(workspace)
        values = measurements.get_current_measurement(
                "SomeObjects", "_".join((cpmoas.AREA_SHAPE, cpmoas.F_EXTENT)))
        self.assertEqual(len(values), 1)
        self.assertAlmostEqual(values[0], .75)
    def test_13_05_extra_lines_skip_rows(self):
        #
        # Regression test of issue #1211 - extra line at end / blank lines
        # Different code path from 13_04
        #
        path = os.path.join(example_images_directory(), "ExampleSBSImages")
        file_names = ['Channel2-01-A-01.tif', 'Channel2-02-A-02.tif']

        csv_text = '''"Image_FileName_DNA","Image_PathName_DNA"

"%s","%s"

"%s","%s"

''' % (file_names[0], path, file_names[1], path)
        pipeline, module, filename = self.make_pipeline(csv_text)
        try:
            assert isinstance(module, L.LoadData)
            m = cpmeas.Measurements()
            workspace = cpw.Workspace(pipeline, module, m, cpo.ObjectSet(), m,
                                      cpi.ImageSetList())
            module.wants_rows.value = True
            module.row_range.min = 2
            module.row_range.max = 3
            self.assertTrue(module.prepare_run(workspace))
            self.assertTrue(isinstance(m, cpmeas.Measurements))
            self.assertEqual(m.image_set_count, 1)
            self.assertTrue(
                'FileName_DNA' in m.get_feature_names(cpmeas.IMAGE))
            self.assertEqual(m[cpmeas.IMAGE, 'FileName_DNA', 1], file_names[0])
        finally:
            os.remove(filename)
 def test_13_06_load_default_input_folder(self):
     # Regression test of issue #1365 - load a file from the default
     # input folder and check that PathName_xxx is absolute
     csv_text = '''"Image_FileName_DNA","Image_PathName_DNA"\n"%s","%s"''' \
                % (self.test_filename, self.test_path)
     pipeline, module, filename = self.make_pipeline(csv_text)
     try:
         assert isinstance(module, L.LoadData)
         module.image_directory.dir_choice = cps.ABSOLUTE_FOLDER_NAME
         module.image_directory.custom_path = self.test_path
         m = cpmeas.Measurements()
         workspace = cpw.Workspace(pipeline, module, m, cpo.ObjectSet(), m,
                                   cpi.ImageSetList())
         self.assertTrue(module.prepare_run(workspace))
         self.assertEqual(
             m.get_measurement(cpmeas.IMAGE, "FileName_DNA", 1),
             self.test_filename)
         path_out = m.get_measurement(cpmeas.IMAGE, "PathName_DNA", 1)
         self.assertEqual(self.test_path, path_out)
         self.assertEqual(
             m.get_measurement(cpmeas.IMAGE, "URL_DNA", 1),
             L.pathname2url(os.path.join(self.test_path,
                                         self.test_filename)))
         module.prepare_group(workspace, {}, [1])
         module.run(workspace)
         img = workspace.image_set.get_image("DNA", must_be_grayscale=True)
         self.assertEqual(tuple(img.pixel_data.shape), self.test_shape)
     finally:
         os.remove(filename)
Esempio n. 12
0
    def rruunn(self,
               input_labels,
               relabel_option,
               merge_option=cellprofiler.modules.splitormergeobjects.
               UNIFY_DISTANCE,
               unify_method=cellprofiler.modules.splitormergeobjects.
               UM_DISCONNECTED,
               distance_threshold=5,
               minimum_intensity_fraction=.9,
               where_algorithm=cellprofiler.modules.splitormergeobjects.
               CA_CLOSEST_POINT,
               image=None,
               parent_object="Parent_object",
               parents_of=None):
        '''Run the SplitOrMergeObjects module

        returns the labels matrix and the workspace.
        '''
        module = cellprofiler.modules.splitormergeobjects.SplitOrMergeObjects()
        module.module_num = 1
        module.objects_name.value = INPUT_OBJECTS_NAME
        module.output_objects_name.value = OUTPUT_OBJECTS_NAME
        module.relabel_option.value = relabel_option
        module.merge_option.value = merge_option
        module.merging_method.value = unify_method
        module.parent_object.value = parent_object
        module.distance_threshold.value = distance_threshold
        module.minimum_intensity_fraction.value = minimum_intensity_fraction
        module.wants_image.value = (image is not None)
        module.where_algorithm.value = where_algorithm

        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)

        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        if image is not None:
            img = cpi.Image(image)
            image_set.add(IMAGE_NAME, img)
            module.image_name.value = IMAGE_NAME

        object_set = cpo.ObjectSet()
        o = cpo.Objects()
        o.segmented = input_labels
        object_set.add_objects(o, INPUT_OBJECTS_NAME)

        workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                                  cpmeas.Measurements(), image_set_list)
        if parents_of is not None:
            m = workspace.measurements
            ftr = cellprofiler.measurement.FF_PARENT % parent_object
            m[INPUT_OBJECTS_NAME, ftr] = parents_of
        module.run(workspace)
        output_objects = workspace.object_set.get_objects(OUTPUT_OBJECTS_NAME)
        return output_objects.segmented, workspace
    def test_13_04_extra_lines(self):
        #
        # Regression test of issue #1211 - extra line at end / blank lines
        #
        dir = os.path.join(example_images_directory(), "ExampleSBSImages")
        file_name = 'Channel2-01-A-01.tif'

        csv_text = '''"Image_FileName_DNA","Image_PathName_DNA"
"%s","%s"

''' % (file_name, dir)
        pipeline, module, filename = self.make_pipeline(csv_text)
        try:
            assert isinstance(module, L.LoadData)
            m = cpmeas.Measurements()
            workspace = cpw.Workspace(pipeline, module, m, cpo.ObjectSet(), m,
                                      cpi.ImageSetList())
            self.assertTrue(module.prepare_run(workspace))
            self.assertTrue(isinstance(m, cpmeas.Measurements))
            self.assertEqual(m.image_set_count, 1)
            self.assertTrue(
                'FileName_DNA' in m.get_feature_names(cpmeas.IMAGE))
            self.assertEqual(m[cpmeas.IMAGE, 'FileName_DNA', 1], file_name)
        finally:
            os.remove(filename)
Esempio n. 14
0
    def make_workspace(self, pixels, choices):
        '''Make a workspace for running UnmixColors

        pixels - input image
        choices - a list of choice strings for the images desired
        '''
        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)

        module = U.UnmixColors()
        module.input_image_name.value = INPUT_IMAGE
        module.outputs[0].image_name.value = output_image_name(0)
        module.outputs[0].stain_choice.value = choices[0]
        for i, choice in enumerate(choices[1:]):
            module.add_image()
            module.outputs[i + 1].image_name.value = output_image_name(i + 1)
            module.outputs[i + 1].stain_choice.value = choice

        module.module_num = 1
        pipeline.add_module(module)

        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        image = cpi.Image(pixels)
        image_set.add(INPUT_IMAGE, image)

        workspace = cpw.Workspace(pipeline, module, image_set, cpo.ObjectSet(),
                                  cpmeas.Measurements(), image_set_list)
        return workspace, module
 def make_workspace(self, labels, mode, distance=0, neighbors_labels=None):
     '''Make a workspace for testing MeasureObjectNeighbors'''
     module = M.MeasureObjectNeighbors()
     module.module_num = 1
     module.object_name.value = OBJECTS_NAME
     module.distance_method.value = mode
     module.distance.value = distance
     pipeline = cpp.Pipeline()
     pipeline.add_module(module)
     object_set = cpo.ObjectSet()
     image_set_list = cpi.ImageSetList()
     image_set = image_set_list.get_image_set(0)
     measurements = cpmeas.Measurements()
     measurements.group_index = 1
     measurements.group_number = 1
     workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                               measurements, image_set_list)
     objects = cpo.Objects()
     objects.segmented = labels
     object_set.add_objects(objects, OBJECTS_NAME)
     if neighbors_labels is None:
         module.neighbors_name.value = OBJECTS_NAME
     else:
         module.neighbors_name.value = NEIGHBORS_NAME
         objects = cpo.Objects()
         objects.segmented = neighbors_labels
         object_set.add_objects(objects, NEIGHBORS_NAME)
     return workspace, module
    def make_workspace(self, image, outline=None, labels=None):
        '''Make a workspace for testing ApplyThreshold'''
        m = cpmeas.Measurements()
        object_set = cpo.ObjectSet()
        module = O.OverlayOutlines()
        module.blank_image.value = False
        module.image_name.value = INPUT_IMAGE_NAME
        module.output_image_name.value = OUTPUT_IMAGE_NAME
        if outline is not None:
            module.outlines[0].outline_name.value = OUTLINE_NAME
            m.add(OUTLINE_NAME, cpi.Image(outline))
            module.outlines[0].outline_choice.value = O.FROM_IMAGES
        if labels is not None:
            objects = cpo.Objects()
            if len(labels) > 1:
                ijv = np.vstack([
                    np.column_stack(list(np.where(l > 0)) + [l[l > 0]])
                    for l in labels
                ])
                objects.set_ijv(ijv, shape=labels[0].shape)
            else:
                objects.segmented = labels[0]
            object_set.add_objects(objects, OBJECTS_NAME)
            module.outlines[0].outline_choice.value = O.FROM_OBJECTS
            module.outlines[0].objects_name.value = OBJECTS_NAME

        pipeline = cpp.Pipeline()
        workspace = cpw.Workspace(pipeline, module, m, object_set, m, None)
        m.add(INPUT_IMAGE_NAME, cpi.Image(image))
        return workspace, module
Esempio n. 17
0
    def test_01_01_combine(self):
        img = self.get_my_image()
        inj = cpm_inject.InjectImage("my_image", img)
        inj.module_num = 1
        ctg = cpm_ctg.ColorToGray()
        ctg.module_num = 2
        ctg.image_name.value = "my_image"
        ctg.combine_or_split.value = cpm_ctg.COMBINE
        ctg.red_contribution.value = 1
        ctg.green_contribution.value = 2
        ctg.blue_contribution.value = 3
        ctg.grayscale_name.value = "my_grayscale"
        pipeline = cpp.Pipeline()
        pipeline.add_module(inj)
        pipeline.add_module(ctg)
        pipeline.test_valid()

        measurements = cpm.Measurements()
        object_set = cpo.ObjectSet()
        image_set_list = cpi.ImageSetList()
        workspace = Workspace(pipeline, inj, None, None, measurements,
                              image_set_list, None)
        inj.prepare_run(workspace)
        inj.prepare_group(workspace, {}, [1])
        image_set = image_set_list.get_image_set(0)
        inj.run(Workspace(pipeline, inj, image_set, object_set, measurements, None))
        ctg.run(Workspace(pipeline, ctg, image_set, object_set, measurements, None))
        grayscale = image_set.get_image("my_grayscale")
        self.assertTrue(grayscale)
        img = grayscale.image
        self.assertAlmostEqual(img[0, 0], 1.0 / 6.0)
        self.assertAlmostEqual(img[0, 25], 1.0 / 3.0)
        self.assertAlmostEqual(img[25, 0], 1.0 / 2.0)
        self.assertAlmostEqual(img[25, 25], 0)
    def test_13_01_load_filename(self):
        #
        # Load a file, only specifying the FileName in the CSV
        #
        csv_text = '''"Image_FileName_DNA"
"%s"
''' % self.test_filename
        pipeline, module, filename = self.make_pipeline(csv_text)
        assert isinstance(module, L.LoadData)
        module.image_directory.dir_choice = cps.ABSOLUTE_FOLDER_NAME
        module.image_directory.custom_path = self.test_path
        m = cpmeas.Measurements()
        workspace = cpw.Workspace(pipeline, module, m, cpo.ObjectSet(), m,
                                  cpi.ImageSetList())
        self.assertTrue(module.prepare_run(workspace))
        self.assertEqual(m.get_measurement(cpmeas.IMAGE, "FileName_DNA", 1),
                         self.test_filename)
        path = m.get_measurement(cpmeas.IMAGE, "PathName_DNA", 1)
        self.assertEqual(path, self.test_path)
        self.assertEqual(
            m.get_measurement(cpmeas.IMAGE, "URL_DNA", 1),
            L.pathname2url(os.path.join(self.test_path, self.test_filename)))
        module.prepare_group(workspace, {}, [1])
        module.run(workspace)
        img = workspace.image_set.get_image("DNA", must_be_grayscale=True)
        self.assertEqual(tuple(img.pixel_data.shape), self.test_shape)
Esempio n. 19
0
    def make_tile_workspace(self, images):
        module = T.Tile()
        module.module_num = 1
        module.tile_method.value = T.T_ACROSS_CYCLES
        module.input_image.value = INPUT_IMAGE_NAME
        module.output_image.value = OUTPUT_IMAGE_NAME

        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)
        image_set_list = cpi.ImageSetList()
        for i, image in enumerate(images):
            image_set = image_set_list.get_image_set(i)
            image_set.add(INPUT_IMAGE_NAME, cpi.Image(image))

        workspace = cpw.Workspace(
            pipeline,
            module,
            image_set_list.get_image_set(0),
            cpo.ObjectSet(),
            cpmeas.Measurements(),
            image_set_list,
        )
        return workspace, module
    def test_13_03_extra_fields(self):
        #
        # Regression test of issue #853, extra fields
        #
        csv_text = '''"Image_URL_DNA"
"%(cp_logo_url)s", "foo"
"http:%(cp_logo_url_filename)s"
"bogusurl.png"
''' % globals()
        pipeline, module, filename = self.make_pipeline(csv_text)
        assert isinstance(module, L.LoadData)
        m = cpmeas.Measurements()
        workspace = cpw.Workspace(pipeline, module, m, cpo.ObjectSet(), m,
                                  cpi.ImageSetList())
        self.assertTrue(module.prepare_run(workspace))
        self.assertEqual(m.get_measurement(cpmeas.IMAGE, "FileName_DNA", 1),
                         cp_logo_url_filename)
        path = m.get_measurement(cpmeas.IMAGE, "PathName_DNA", 1)
        self.assertEqual(path, cp_logo_url_folder)
        self.assertEqual(m.get_measurement(cpmeas.IMAGE, "URL_DNA", 1),
                         cp_logo_url)
        self.assertEqual(m[cpmeas.IMAGE, "FileName_DNA", 2],
                         cp_logo_url_filename)
        self.assertEqual(m[cpmeas.IMAGE, "PathName_DNA", 2], "http:")
        self.assertEqual(m[cpmeas.IMAGE, "FileName_DNA", 3], "bogusurl.png")
        self.assertEqual(m[cpmeas.IMAGE, "PathName_DNA", 3], "")
        module.prepare_group(workspace, {}, [1])
        module.run(workspace)
        img = workspace.image_set.get_image("DNA", must_be_color=True)
        self.assertEqual(tuple(img.pixel_data.shape), cp_logo_url_shape)
Esempio n. 21
0
    def test_03_01_non_contiguous(self):
        '''make sure MeasureObjectAreaShape doesn't crash if fed non-contiguous objects'''
        module = cpmoas.MeasureObjectAreaShape()
        module.object_groups[0].name.value = "SomeObjects"
        module.calculate_zernikes.value = True
        object_set = cpo.ObjectSet()
        labels = np.zeros((10, 20), int)
        labels[1:9, 1:5] = 1
        labels[4:6, 6:19] = 1
        objects = cpo.Objects()
        objects.segmented = labels
        object_set.add_objects(objects, "SomeObjects")
        module.module_num = 1
        image_set_list = cpi.ImageSetList()
        measurements = cpmeas.Measurements()
        pipeline = cpp.Pipeline()
        pipeline.add_module(module)

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        workspace = cpw.Workspace(pipeline, module,
                                  image_set_list.get_image_set(0),
                                  object_set, measurements, image_set_list)
        module.run(workspace)
        values = measurements.get_current_measurement("SomeObjects",
                                                      "AreaShape_Perimeter")
        self.assertEqual(len(values), 1)
        self.assertEqual(values[0], 54)
    def make_workspace(self, pixel_data, mask=None):
        image = cpi.Image(pixel_data, mask)
        image_set_list = cpi.ImageSetList()

        image_set = image_set_list.get_image_set(0)
        image_set.add(IMAGE_NAME, image)

        module = ID.IdentifyDeadWorms()
        module.module_num = 1
        module.image_name.value = IMAGE_NAME
        module.object_name.value = OBJECTS_NAME

        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.LoadExceptionEvent))
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)

        workspace = cpw.Workspace(pipeline, module, image_set,
                                  cpo.ObjectSet(),
                                  cpmeas.Measurements(),
                                  image_set_list)
        return workspace, module
Esempio n. 23
0
    def test_01_00_zeros(self):
        """Run on an empty labels matrix"""
        object_set = cpo.ObjectSet()
        labels = np.zeros((10, 20), int)
        objects = cpo.Objects()
        objects.segmented = labels
        object_set.add_objects(objects, "SomeObjects")
        module = cpmoas.MeasureObjectAreaShape()
        settings = ["SomeObjects", "Yes"]
        module.set_settings_from_values(settings, 1, module.module_class())
        module.module_num = 1
        image_set_list = cpi.ImageSetList()
        measurements = cpmeas.Measurements()
        pipeline = cpp.Pipeline()
        pipeline.add_module(module)
        workspace = cpw.Workspace(pipeline, module,
                                  image_set_list.get_image_set(0),
                                  object_set, measurements, image_set_list)
        module.run(workspace)

        for f in (cpmoas.F_AREA, cpmoas.F_CENTER_X, cpmoas.F_CENTER_Y,
                  cpmoas.F_ECCENTRICITY, cpmoas.F_EULER_NUMBER,
                  cpmoas.F_EXTENT, cpmoas.F_FORM_FACTOR,
                  cpmoas.F_MAJOR_AXIS_LENGTH, cpmoas.F_MINOR_AXIS_LENGTH,
                  cpmoas.F_ORIENTATION, cpmoas.F_PERIMETER,
                  cpmoas.F_SOLIDITY, cpmoas.F_COMPACTNESS,
                  cpmoas.F_MAXIMUM_RADIUS, cpmoas.F_MEAN_RADIUS,
                  cpmoas.F_MEDIAN_RADIUS,
                  cpmoas.F_MIN_FERET_DIAMETER, cpmoas.F_MAX_FERET_DIAMETER):
            m = cpmoas.AREA_SHAPE + "_" + f
            a = measurements.get_current_measurement('SomeObjects', m)
            self.assertEqual(len(a), 0)
    def test_04_02_masked_edge(self):
        # Regression test of issue #1115
        labels = np.zeros((20, 50), int)
        labels[15:25, 15:25] = 1
        image = np.random.uniform(size=labels.shape).astype(np.float32)
        #
        # Mask the edge of the object
        #
        mask = ~cpmo.outline(labels).astype(bool)
        m = cpmeas.Measurements()
        m.add(IMAGE_NAME, cpi.Image(image, mask=mask))
        object_set = cpo.ObjectSet()
        o = cpo.Objects()
        o.segmented = labels
        object_set.add_objects(o, OBJECT_NAME)
        pipeline = P.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, P.RunExceptionEvent))

        pipeline.add_listener(callback)
        module = MOI.MeasureObjectIntensity()
        module.module_num = 1
        module.images[0].name.value = IMAGE_NAME
        module.objects[0].name.value = OBJECT_NAME
        pipeline.add_module(module)
        workspace = cpw.Workspace(pipeline, module, m, object_set, m, None)
        module.run(workspace)
 def make_workspace(self, image1, image2, objects=None):
     '''Make a workspace for testing Threshold'''
     module = M.MeasureColocalization()
     image_set_list = cpi.ImageSetList()
     image_set = image_set_list.get_image_set(0)
     for image_group, name, image in zip(module.image_groups,
                                         (IMAGE1_NAME, IMAGE2_NAME),
                                         (image1, image2)):
         image_group.image_name.value = name
         image_set.add(name, image)
     object_set = cpo.ObjectSet()
     if objects is None:
         module.images_or_objects.value = M.M_IMAGES
     else:
         module.images_or_objects.value = M.M_IMAGES_AND_OBJECTS
         module.object_groups[0].object_name.value = OBJECTS_NAME
         object_set.add_objects(objects, OBJECTS_NAME)
     pipeline = cpp.Pipeline()
     workspace = cpw.Workspace(pipeline,
                               module,
                               image_set,
                               object_set,
                               cpmeas.Measurements(),
                               image_set_list)
     return workspace, module
Esempio n. 26
0
    def prepare_run(self, message, session_id, grouping_allowed=False):
        '''Prepare a pipeline and measurements to run

        message - the run-request or run-groups-request message
        session_id - the session ID for the session
        grouping_allowed - true to allow grouped images
        '''
        pipeline = cpp.Pipeline()
        m = cpmeas.Measurements()
        object_set = cpo.ObjectSet()
        if len(message) < 2:
            self.raise_cellprofiler_exception(session_id,
                                              "Missing run request sections")
            return
        pipeline_txt = message.pop(0).bytes
        image_metadata = message.pop(0).bytes
        try:
            image_metadata = json.loads(image_metadata)
            for channel_name, channel_metadata in image_metadata:
                if len(message) < 1:
                    self.raise_cellprofiler_exception(
                        session_id,
                        "Missing binary data for channel %s" % channel_name)
                    return None, None, None
                pixel_data = self.decode_image(
                    channel_metadata,
                    message.pop(0).bytes,
                    grouping_allowed=grouping_allowed)
                m.add(channel_name, cpi.Image(pixel_data))
        except Exception, e:
            logger.warn("Failed to decode message", exc_info=1)
            self.raise_cellprofiler_exception(session_id, e.message)
            return None, None, None
    def test_04_01_wrong_image_size(self):
        '''Regression test of IMG-961 - object and image size differ'''
        np.random.seed(41)
        labels = np.ones((20, 50), int)
        image = np.random.uniform(size=(30, 40)).astype(np.float32)
        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        image_set.add('MyImage', cpi.Image(image))
        object_set = cpo.ObjectSet()
        o = cpo.Objects()
        o.segmented = labels
        object_set.add_objects(o, "MyObjects")
        pipeline = P.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, P.RunExceptionEvent))

        pipeline.add_listener(callback)
        module = MOI.MeasureObjectIntensity()
        module.module_num = 1
        module.images[0].name.value = "MyImage"
        module.objects[0].name.value = "MyObjects"
        pipeline.add_module(module)
        workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                                  cpmeas.Measurements(), image_set_list)
        module.run(workspace)
        feature_name = '%s_%s_%s' % (MOI.INTENSITY, MOI.INTEGRATED_INTENSITY,
                                     "MyImage")
        m = workspace.measurements.get_current_measurement(
            "MyObjects", feature_name)
        self.assertEqual(len(m), 1)
        self.assertAlmostEqual(m[0], np.sum(image[:20, :40]), 4)
 def make_workspace(self,
                    labels,
                    operation,
                    iterations=1,
                    wants_outlines=False,
                    wants_fill_holes=False):
     object_set = cpo.ObjectSet()
     objects = cpo.Objects()
     objects.segmented = labels
     object_set.add_objects(objects, INPUT_NAME)
     module = E.ExpandOrShrink()
     module.object_name.value = INPUT_NAME
     module.output_object_name.value = OUTPUT_NAME
     module.outlines_name.value = OUTLINES_NAME
     module.operation.value = operation
     module.iterations.value = iterations
     module.wants_outlines.value = wants_outlines
     module.wants_fill_holes.value = wants_fill_holes
     module.module_num = 1
     pipeline = cpp.Pipeline()
     pipeline.add_module(module)
     image_set_list = cpi.ImageSetList()
     workspace = cpw.Workspace(pipeline,
                               module,
                               image_set_list.get_image_set(0),
                               object_set,
                               cpmeas.Measurements(),
                               image_set_list)
     return workspace, module
Esempio n. 29
0
    def make_workspace(self, image, labels):
        module = D.DefineGrid()
        module.module_num = 1
        module.grid_image.value = GRID_NAME
        module.manual_image.value = INPUT_IMAGE_NAME
        module.display_image_name.value = INPUT_IMAGE_NAME
        module.object_name.value = OBJECTS_NAME
        module.save_image_name.value = OUTPUT_IMAGE_NAME
        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        image_set.add(INPUT_IMAGE_NAME, cpi.Image(image))
        object_set = cpo.ObjectSet()
        objects = cpo.Objects()
        objects.segmented = labels
        object_set.add_objects(objects, OBJECTS_NAME)
        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.LoadExceptionEvent))
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)
        measurements = cpmeas.Measurements()
        workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                                  measurements, image_set_list)
        return workspace, module
    def make_workspace(self, gridding, labels=None):
        module = I.IdentifyObjectsInGrid()
        module.module_num = 1
        module.grid_name.value = GRID_NAME
        module.output_objects_name.value = OUTPUT_OBJECTS_NAME
        module.guiding_object_name.value = GUIDING_OBJECTS_NAME
        image_set_list = cpi.ImageSetList()
        object_set = cpo.ObjectSet()
        if labels is not None:
            my_objects = cpo.Objects()
            my_objects.segmented = labels
            object_set.add_objects(my_objects, GUIDING_OBJECTS_NAME)
        pipeline = cpp.Pipeline()

        def callback(caller, event):
            self.assertFalse(isinstance(event, cpp.RunExceptionEvent))

        pipeline.add_listener(callback)
        pipeline.add_module(module)
        workspace = cpw.Workspace(
            pipeline,
            module,
            image_set_list.get_image_set(0),
            object_set,
            cpmeas.Measurements(),
            image_set_list,
        )
        workspace.set_grid(GRID_NAME, gridding)
        return workspace, module