def rruunn(self,
               input_labels,
               relabel_option,
               unify_option=R.UNIFY_DISTANCE,
               distance_threshold=5,
               minimum_intensity_fraction=.9,
               where_algorithm=R.CA_CLOSEST_POINT,
               image=None,
               wants_outlines=False,
               outline_name="None",
               parent_object="Parent_object",
               parent_labels=np.zeros((10, 20), int)):
        '''Run the RelabelObjects module
        
        returns the labels matrix and the workspace.
        '''
        module = R.RelabelObjects()
        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.unify_option.value = unify_option
        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
        module.wants_outlines.value = wants_outlines
        module.outlines_name.value = outline_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()
        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)

        parent_object_set = cpo.ObjectSet()
        p = cpo.Objects()
        p.segmented = parent_labels
        object_set.add_objects(p, parent_object)

        workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                                  cpmeas.Measurements(), image_set_list)
        module.run(workspace)
        output_objects = workspace.object_set.get_objects(OUTPUT_OBJECTS_NAME)
        return output_objects.segmented, workspace
示例#2
0
 def run_module(self, image, labels, center_labels = None, bin_count = 4):
     '''Run the module, returning the measurements
     
     image - matrix representing the image to be analyzed
     labels - labels matrix of objects to be analyzed
     center_labels - labels matrix of alternate centers or None for self
                     centers
     bin_count - # of radial bins
     '''
     module = M.MeasureObjectRadialDistribution()
     module.images[0].image_name.value = IMAGE_NAME
     module.objects[0].object_name.value = OBJECT_NAME
     object_set = cpo.ObjectSet()
     main_objects = cpo.Objects()
     main_objects.segmented = labels
     object_set.add_objects(main_objects, OBJECT_NAME)
     if center_labels is None:
         module.objects[0].center_choice.value = M.C_SELF
     else:
         module.objects[0].center_choice.value = M.C_OTHER
         module.objects[0].center_object_name.value = CENTER_NAME
         center_objects = cpo.Objects()
         center_objects.segmented = center_labels
         object_set.add_objects(center_objects, CENTER_NAME)
     module.bin_counts[0].bin_count.value = bin_count
     pipeline = cpp.Pipeline()
     measurements = cpmeas.Measurements()
     image_set_list = cpi.ImageSetList()
     image_set = image_set_list.get_image_set(0)
     img = cpi.Image(image)
     image_set.add(IMAGE_NAME, img)
     workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                               measurements, image_set_list)
     module.run(workspace)
     return measurements
 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
示例#4
0
 def run_module(self, image, labels, center_labels = None, 
                center_choice = M.C_CENTERS_OF_OTHER,
                bin_count = 4,
                maximum_radius = 100, wants_scaled = True, 
                wants_workspace=False):
     '''Run the module, returning the measurements
     
     image - matrix representing the image to be analyzed
     labels - labels matrix of objects to be analyzed
     center_labels - labels matrix of alternate centers or None for self
                     centers
     bin_count - # of radial bins
     '''
     module = M.MeasureObjectRadialDistribution()
     module.images[0].image_name.value = IMAGE_NAME
     module.objects[0].object_name.value = OBJECT_NAME
     object_set = cpo.ObjectSet()
     main_objects = cpo.Objects()
     main_objects.segmented = labels
     object_set.add_objects(main_objects, OBJECT_NAME)
     if center_labels is None:
         module.objects[0].center_choice.value = M.C_SELF
     else:
         module.objects[0].center_choice.value = center_choice
         module.objects[0].center_object_name.value = CENTER_NAME
         center_objects = cpo.Objects()
         center_objects.segmented = center_labels
         object_set.add_objects(center_objects, CENTER_NAME)
     module.bin_counts[0].bin_count.value = bin_count
     module.bin_counts[0].wants_scaled.value = wants_scaled
     module.bin_counts[0].maximum_radius.value = maximum_radius
     module.add_heatmap()
     module.add_heatmap()
     module.add_heatmap()
     for i, (a, f) in enumerate(
         ((M.A_FRAC_AT_D, M.F_FRAC_AT_D),
          (M.A_MEAN_FRAC, M.F_MEAN_FRAC),
          (M.A_RADIAL_CV, M.F_RADIAL_CV))):
         module.heatmaps[i].image_name.value = IMAGE_NAME
         module.heatmaps[i].object_name.value = OBJECT_NAME
         module.heatmaps[i].bin_count.value = str(bin_count)
         module.heatmaps[i].wants_to_save_display.value = True
         display_name = HEAT_MAP_NAME+f
         module.heatmaps[i].display_name.value = display_name
         module.heatmaps[i].colormap.value = "gray"
         module.heatmaps[i].measurement.value = a
     pipeline = cpp.Pipeline()
     measurements = cpmeas.Measurements()
     image_set_list = cpi.ImageSetList()
     image_set = measurements
     img = cpi.Image(image)
     image_set.add(IMAGE_NAME, img)
     workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                               measurements, image_set_list)
     module.run(workspace)
     if wants_workspace:
         return measurements, workspace
     return measurements
示例#5
0
    def test_05_01_overlapping(self):
        '''Test object measurement with two overlapping objects in ijv format'''

        i, j = np.mgrid[0:10, 0:20]
        m = (i > 1) & (i < 9) & (j > 1) & (j < 19)
        m1 = m & (i < j)
        m2 = m & (i < 9 - j)
        mlist = []
        olist = []
        for m in (m1, m2):
            objects = cpo.Objects()
            objects.segmented = m.astype(int)
            olist.append(objects)
        ijv = np.column_stack(
            (np.hstack([np.argwhere(m)[:, 0] for m in (m1, m2)]),
             np.hstack([np.argwhere(m)[:, 1] for m in (m1, m2)]),
             np.array([1] * np.sum(m1) + [2] * np.sum(m2))))
        objects = cpo.Objects()
        objects.ijv = ijv
        olist.append(objects)
        for objects in olist:
            module = cpmoas.MeasureObjectAreaShape()
            module.object_groups[0].name.value = "SomeObjects"
            module.calculate_zernikes.value = True
            object_set = cpo.ObjectSet()
            object_set.add_objects(objects, "SomeObjects")
            module.module_num = 1
            image_set_list = cpi.ImageSetList()
            measurements = cpmeas.Measurements()
            mlist.append(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)
        for c in module.get_measurement_columns(None):
            oname, feature = c[:2]
            if oname != "SomeObjects":
                continue
            measurements = mlist[0]
            self.assertTrue(isinstance(measurements, cpmeas.Measurements))
            v1 = measurements.get_current_measurement(oname, feature)
            self.assertEqual(len(v1), 1)
            v1 = v1[0]
            measurements = mlist[1]
            v2 = measurements.get_current_measurement(oname, feature)
            self.assertEqual(len(v2), 1)
            v2 = v2[0]
            expected = (v1, v2)
            v = mlist[2].get_current_measurement(oname, feature)
            self.assertEqual(tuple(v), expected)
示例#6
0
 def test_05_01_relate_zero_parents_and_children(self):
     """Test the relate method if both parent and child label matrices are zeros"""
     x = cpo.Objects()
     x.segmented = np.zeros((10, 10), int)
     y = cpo.Objects()
     y.segmented = np.zeros((10, 10), int)
     children_per_parent, parents_of_children = x.relate_children(y)
     self.assertEqual(np.product(children_per_parent.shape), 0)
     self.assertEqual(np.product(parents_of_children.shape), 0)
示例#7
0
 def test_05_03_relate_one_parent_no_children(self):
     x = cpo.Objects()
     labels = np.zeros((10, 10), int)
     labels[3:6, 3:6] = 1
     x.segmented = labels
     y = cpo.Objects()
     y.segmented = np.zeros((10, 10), int)
     children_per_parent, parents_of_children = x.relate_children(y)
     self.assertEqual(np.product(children_per_parent.shape), 1)
     self.assertEqual(children_per_parent[0], 0)
     self.assertEqual(np.product(parents_of_children.shape), 0)
示例#8
0
    def make_workspace(self,
                       labels,
                       overlap_choice,
                       masking_objects=None,
                       masking_image=None,
                       renumber=True,
                       wants_outlines=False):
        module = M.MaskObjects()
        module.module_num = 1
        module.object_name.value = INPUT_OBJECTS
        module.remaining_objects.value = OUTPUT_OBJECTS
        module.mask_choice.value = (M.MC_OBJECTS if masking_objects is not None
                                    else M.MC_IMAGE)
        module.masking_image.value = MASKING_IMAGE
        module.masking_objects.value = MASKING_OBJECTS
        module.retain_or_renumber.value = (M.R_RENUMBER
                                           if renumber else M.R_RETAIN)
        module.overlap_choice.value = overlap_choice
        module.wants_outlines.value = wants_outlines
        module.outlines_name.value = OUTPUT_OUTLINES

        pipeline = cpp.Pipeline()

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

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

        object_set = cpo.ObjectSet()
        io = cpo.Objects()
        io.segmented = labels
        object_set.add_objects(io, INPUT_OBJECTS)

        if masking_objects is not None:
            oo = cpo.Objects()
            oo.segmented = masking_objects
            object_set.add_objects(oo, MASKING_OBJECTS)

        image_set_list = cpi.ImageSetList()
        image_set = image_set_list.get_image_set(0)
        if masking_image is not None:
            mi = cpi.Image(masking_image)
            image_set.add(MASKING_IMAGE, mi)

        workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                                  cpmeas.Measurements(), image_set_list)
        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
 def test_03_01_export_objects(self):
     module, workspace = self.prepare_workspace()
     assert isinstance(module, E.ExportToCellH5)
     labels = np.zeros((21, 17), int)
     labels[1:4, 2:5] = 1
     labels[11:14, 12:15] = 2
     centers = np.array([[2, 3], [12, 13]])
     minima = np.array([[1, 2], [11, 12]])
     maxima = np.array([[3, 4], [13, 14]])
     objects = cpo.Objects()
     objects.segmented = labels
     workspace.object_set.add_objects(objects, OBJECTS_NAME)
     module.add_objects()
     module.objects_to_export[0].objects_name.value = OBJECTS_NAME
     module.run(workspace)
     with cellh5.ch5open(
             os.path.join(self.temp_dir, module.file_name.value),
             "r") as ch5:
         well = self.get_well_name(0)
         site = self.get_site_name(0)
         self.assertTrue(ch5.has_position(well, site))
         pos = ch5.get_position(well, site)
         image_defs = ch5.image_definition
         object_channels = image_defs[cellh5.CH5Const.REGION]
         self.assertEqual(len(object_channels), 1)
         self.assertEqual(object_channels[0, "region_name"], OBJECTS_NAME)
         self.assertEqual(object_channels[0, "channel_idx"], 0)
         centers_out = pos.get_center([0, 1], OBJECTS_NAME)
         np.testing.assert_array_equal(centers_out[:]["x"], centers[:, 1])
         np.testing.assert_array_equal(centers_out[:]["y"], centers[:, 0])
         self.assertEqual(len(pos.get_object_table(OBJECTS_NAME)), 2)
         labels_out = \
             pos[cellh5.CH5Const.IMAGE][cellh5.CH5Const.REGION][0, 0, 0]
         np.testing.assert_array_equal(labels, labels_out)
    def run(self, workspace):
        input_objects = workspace.object_set.get_objects(self.object_name.value)
        output_objects = cpo.Objects()
        output_objects.segmented = self.do_labels(input_objects.segmented)
        if (input_objects.has_small_removed_segmented and 
            self.operation not in (O_EXPAND, O_EXPAND_INF, O_DIVIDE)):
            output_objects.small_removed_segmented = \
                self.do_labels(input_objects.small_removed_segmented)
        if (input_objects.has_unedited_segmented and
            self.operation not in (O_EXPAND, O_EXPAND_INF, O_DIVIDE)):
            output_objects.unedited_segmented = \
                self.do_labels(input_objects.unedited_segmented)
        workspace.object_set.add_objects(output_objects,
                                         self.output_object_name.value)
        add_object_count_measurements(workspace.measurements, 
                                      self.output_object_name.value,
                                      np.max(output_objects.segmented))
        add_object_location_measurements(workspace.measurements,
                                         self.output_object_name.value,
                                         output_objects.segmented)
        if self.wants_outlines.value:
            outline_image = cpi.Image(outline(output_objects.segmented) > 0,
                                      parent_image = input_objects.parent_image)
            workspace.image_set.add(self.outlines_name.value, outline_image)

        if self.show_window:
            workspace.display_data.input_objects_segmented = input_objects.segmented
            workspace.display_data.output_objects_segmented = output_objects.segmented
示例#12
0
 def test_06_05_last_object_masked(self):
     # Regression test of issue #1553
     # MeasureCorrelation was truncating the measurements
     # if the last had no pixels or all pixels masked.
     #
     r = np.random.RandomState()
     r.seed(65)
     image1 = r.uniform(size=(20, 20))
     image2 = r.uniform(size=(20, 20))
     labels = np.zeros((20, 20), int)
     labels[3:8, 3:8] = 1
     labels[13:18, 13:18] = 2
     mask = labels != 2
     objects = cpo.Objects()
     objects.segmented = labels
     
     for mask1, mask2 in ((mask, None), (None, mask), (mask, mask)):
         workspace, module = self.make_workspace(
             cpi.Image(image1, mask=mask1),
             cpi.Image(image2, mask=mask2),
             objects)
         module.run(workspace)
         m = workspace.measurements
         feature = M.F_CORRELATION_FORMAT % (IMAGE1_NAME, IMAGE2_NAME)
         values = m[OBJECTS_NAME, feature]
         self.assertEqual(len(values), 2)
         self.assertTrue(np.isnan(values[1]))
示例#13
0
 def test_05_06_relate_one_parent_two_children(self):
     x = cpo.Objects()
     labels = np.zeros((10, 10), int)
     labels[3:6, 3:9] = 1
     x.segmented = labels
     y = cpo.Objects()
     labels = np.zeros((10, 10), int)
     labels[3:6, 3:6] = 1
     labels[3:6, 7:9] = 2
     y.segmented = labels
     children_per_parent, parents_of_children = x.relate_children(y)
     self.assertEqual(np.product(children_per_parent.shape), 1)
     self.assertEqual(children_per_parent[0], 2)
     self.assertEqual(np.product(parents_of_children.shape), 2)
     self.assertEqual(parents_of_children[0], 1)
     self.assertEqual(parents_of_children[1], 1)
 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
示例#15
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)
示例#16
0
 def test_04_01_mis_size(self):
     x = cpo.Objects()
     x.segmented = self.__segmented10
     self.assertRaises(AssertionError, x.set_unedited_segmented,
                       np.ones((5, 5)))
     self.assertRaises(AssertionError, x.set_small_removed_segmented,
                       np.ones((5, 5)))
 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)
示例#18
0
 def test_01_01_run_empty(self):
     #
     # Test on an image devoid of objects
     #
     objects = cpo.Objects()
     objects.segmented = np.zeros((35, 43), int)
     self.run_tteesstt(objects, 1)
示例#19
0
 def test_06_02_cropped_objects(self):
     '''Test images and objects with a cropping mask'''
     np.random.seed(0)
     image1 = np.random.uniform(size=(20, 20))
     i1 = cpi.Image(image1)
     crop_mask = np.zeros((20, 20), bool)
     crop_mask[5:15, 5:15] = True
     i2 = cpi.Image(image1[5:15, 5:15], crop_mask=crop_mask)
     labels = np.zeros((10, 10), int)
     labels[:4, :4] = 1
     labels[6:, 6:] = 2
     o = cpo.Objects()
     o.segmented = labels
     #
     # Make the objects have the cropped image as a parent
     #
     o.parent_image = i2
     workspace, module = self.make_workspace(i1, i2, o)
     module.run(workspace)
     m = workspace.measurements
     mi = module.get_measurement_images(None, OBJECTS_NAME, "Correlation",
                                        "Correlation")
     corr = m.get_current_measurement(OBJECTS_NAME,
                                      "Correlation_Correlation_%s" % mi[0])
     self.assertAlmostEqual(corr[0], 1)
     self.assertAlmostEqual(corr[1], 1)
示例#20
0
 def test_07_01_make_ijv_outlines(self):
     np.random.seed(70)
     x = cpo.Objects()
     ii,jj = np.mgrid[0:10,0:20]
     masks = [(ii-ic)**2 + (jj - jc) **2 < r **2 
              for ic, jc, r in ((4,5,5), (4,12,5), (6, 8, 5))]
     i = np.hstack([ii[mask] for mask in masks])
     j = np.hstack([jj[mask] for mask in masks])
     v = np.hstack([[k+1] * np.sum(mask) for k, mask in enumerate(masks)])
     
     x.set_ijv(np.column_stack((i,j,v)), ii.shape)
     x.parent_image = cpi.Image(np.zeros((10,20)))
     colors = np.random.uniform(size=(3, 3)).astype(np.float32)
     image = x.make_ijv_outlines(colors)
     i1 = [i for i, color in enumerate(colors) if np.all(color == image[0,5,:])]
     self.assertEqual(len(i1), 1)
     i2 = [i for i, color in enumerate(colors) if np.all(color == image[0,12,:])]
     self.assertEqual(len(i2), 1)
     i3 = [i for i, color in enumerate(colors) if np.all(color == image[-1,8,:])]
     self.assertEqual(len(i3), 1)
     self.assertNotEqual(i1[0], i2[0])
     self.assertNotEqual(i2[0], i3[0])
     colors = colors[np.array([i1[0], i2[0], i3[0]])]
     outlines = np.zeros((10,20,3), np.float32)
     alpha = np.zeros((10,20))
     for i, (color, mask) in enumerate(zip(colors, masks)):
         my_outline = outline(mask)
         outlines[my_outline] += color
         alpha[my_outline] += 1
     alpha[alpha == 0] = 1
     outlines /= alpha[:,:,np.newaxis]
     np.testing.assert_almost_equal(outlines, image)
示例#21
0
 def test_06_05_ijv_three_overlapping(self):
     #
     # This is a regression test of a bug where a segmentation consists
     # of only one point, labeled three times yielding two planes instead
     # of three.
     #
     ijv = np.array([[4, 5, 1],
                     [4, 5, 2], 
                     [4, 5, 3]])
     x = cpo.Objects()
     x.set_ijv(ijv, (8, 9))
     labels = []
     indices = np.zeros(3, bool)
     for l, i in x.get_labels():
         labels.append(l)
         self.assertEqual(len(i), 1)
         self.assertTrue(i[0] in (1, 2, 3))
         indices[i[0]-1] = True
     self.assertTrue(np.all(indices))
     self.assertEqual(len(labels), 3)
     lstacked = np.dstack(labels)
     i, j, k = np.mgrid[0:lstacked.shape[0],
                        0:lstacked.shape[1],
                        0:lstacked.shape[2]]
     self.assertTrue(np.all(lstacked[(i != 4) | (j != 5)] == 0))
     self.assertEqual((1, 2, 3), tuple(sorted(lstacked[4, 5, :])))
示例#22
0
 def test_06_04_ijv_to_labels_overlapping(self):
     '''Convert an ijv representation with overlap to labels'''
     ijv = np.array([[1,1,1],
                     [1,2,1],
                     [2,1,1],
                     [2,2,1],
                     [1,3,2],
                     [2,3,2],
                     [2,3,3],
                     [4,4,4],
                     [4,5,4],
                     [4,5,5],
                     [5,5,5]])
     x = cpo.Objects()
     x.ijv = ijv
     labels = x.get_labels()
     self.assertEqual(len(labels), 2)
     unique_a = np.unique(labels[0][0])[1:]
     unique_b = np.unique(labels[1][0])[1:]
     for a in unique_a:
         self.assertTrue(a not in unique_b)
     for b in unique_b:
         self.assertTrue(b not in unique_a)
     for i, j, v in ijv:
         mylabels = labels[0][0] if v in unique_a else labels[1][0]
         self.assertEqual(mylabels[i,j], v)
示例#23
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
示例#24
0
    def make_workspace_ijv(self):
        module = C.ConvertToImage()
        shape = (14, 16)
        r = np.random.RandomState()
        r.seed(0)
        i = r.randint(0, shape[0], size=np.prod(shape))
        j = r.randint(0, shape[1], size=np.prod(shape))
        v = r.randint(1, 8, size=np.prod(shape))
        order = np.lexsort((i, j, v))
        ijv = np.column_stack((i, j, v))
        ijv = ijv[order, :]
        same = np.all(ijv[:-1, :] == ijv[1:, :], 1)
        ijv = ijv[~same, :]

        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)
        objects = cpo.Objects()
        objects.set_ijv(ijv, shape)
        object_set.add_objects(objects, OBJECTS_NAME)
        self.assertGreater(len(objects.get_labels()), 1)
        module.image_name.value = IMAGE_NAME
        module.object_name.value = OBJECTS_NAME
        return (workspace, module, ijv)
示例#25
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
示例#26
0
    def test_02_02_mask_invert(self):
        labels = np.zeros((10,15),int)
        labels[2:5,3:8] = 1
        labels[5:8, 10:14] = 2
        object_set = cpo.ObjectSet()
        objects = cpo.Objects()
        objects.segmented = labels
        object_set.add_objects(objects, OBJECTS_NAME)
        
        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)).astype(np.float32)
        image_set.add(IMAGE_NAME, cpi.Image(pixel_data))

        pipeline = cpp.Pipeline()
        module = M.MaskImage()
        module.source_choice.value = M.IO_OBJECTS
        module.object_name.value = OBJECTS_NAME
        module.image_name.value = IMAGE_NAME
        module.masked_image_name.value = MASKED_IMAGE_NAME
        module.invert_mask.value = True
        module.module_num = 1
        
        workspace = cpw.Workspace(pipeline, module, image_set, object_set,
                                  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[labels == 0] ==
                               pixel_data[labels == 0]))
        self.assertTrue(np.all(masked_image.pixel_data[labels > 0] == 0))
        self.assertTrue(np.all(masked_image.mask == (labels == 0)))
        self.assertTrue(np.all(masked_image.masking_objects.segmented == labels))
 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)
示例#28
0
    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)
示例#29
0
 def test_06_03_no_objects(self):
     '''Test images with no objects'''
     labels = np.zeros((10, 10), int)
     i, j = np.mgrid[0:10, 0:10]
     image1 = ((i + j) % 2).astype(float)
     image2 = image1.copy()
     i1 = cpi.Image(image1)
     i2 = cpi.Image(image2)
     o = cpo.Objects()
     o.segmented = labels
     workspace, module = self.make_workspace(i1, i2, o)
     module.run(workspace)
     m = workspace.measurements
     mi = module.get_measurement_images(None, OBJECTS_NAME, "Correlation",
                                        "Correlation")
     corr = m.get_current_measurement(OBJECTS_NAME,
                                      "Correlation_Correlation_%s" % mi[0])
     self.assertEqual(len(corr), 0)
     self.assertEqual(len(m.get_object_names()), 2)
     self.assertTrue(OBJECTS_NAME in m.get_object_names())
     columns = module.get_measurement_columns(None)
     image_features = m.get_feature_names(cpmeas.IMAGE)
     object_features = m.get_feature_names(OBJECTS_NAME)
     self.assertEqual(len(columns),
                      len(image_features) + len(object_features))
     for column in columns:
         if column[0] == cpmeas.IMAGE:
             self.assertTrue(column[1] in image_features)
         else:
             self.assertEqual(column[0], OBJECTS_NAME)
             self.assertTrue(column[1] in object_features)
 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)