示例#1
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)
示例#2
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)
示例#3
0
    def test_01_02_split_all(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.SPLIT
        ctg.use_red.value = True
        ctg.use_blue.value = True
        ctg.use_green.value = True
        ctg.red_name.value = "my_red"
        ctg.green_name.value = "my_green"
        ctg.blue_name.value = "my_blue"
        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))
        red = image_set.get_image("my_red")
        self.assertTrue(red)
        img = red.image
        self.assertAlmostEqual(img[0, 0], 1)
        self.assertAlmostEqual(img[0, 25], 0)
        self.assertAlmostEqual(img[25, 0], 0)
        self.assertAlmostEqual(img[25, 25], 0)
        green = image_set.get_image("my_green")
        self.assertTrue(green)
        img = green.image
        self.assertAlmostEqual(img[0, 0], 0)
        self.assertAlmostEqual(img[0, 25], 1)
        self.assertAlmostEqual(img[25, 0], 0)
        self.assertAlmostEqual(img[25, 25], 0)
        blue = image_set.get_image("my_blue")
        self.assertTrue(blue)
        img = blue.image
        self.assertAlmostEqual(img[0, 0], 0)
        self.assertAlmostEqual(img[0, 25], 0)
        self.assertAlmostEqual(img[25, 0], 1)
        self.assertAlmostEqual(img[25, 25], 0)
示例#4
0
    def test_01_03_combine_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.COMBINE
        module.grayscale_name.value = OUTPUT_IMAGE_F % 1
        module.rgb_or_channels.value = cpm_ctg.CH_CHANNELS
        module.add_channel()
        module.add_channel()

        channel_indexes = np.array([2, 0, 3])
        factors = np.random.uniform(size=3)
        divisor = np.sum(factors)
        expected = np.zeros((20, 10))
        for i, channel_index in enumerate(channel_indexes):
            module.channels[i].channel_choice.value = module.channel_names[
                channel_index]
            module.channels[i].contribution.value_text = "%.10f" % factors[i]
            expected += image[:, :, channel_index] * factors[i] / divisor

        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)
        pixels = image_set.get_image(module.grayscale_name.value).pixel_data
        self.assertEqual(pixels.ndim, 2)
        self.assertEqual(tuple(pixels.shape), (20, 10))
        np.testing.assert_almost_equal(expected, pixels)
示例#5
0
 def test_00_00_init(self):
     x = cpm_ctg.ColorToGray()