Exemplo n.º 1
0
class WorldTest(TestCase):

    def setUp(self):
        ev.events
        self.world = World()
        self.world.register_listener(ev)

    def tearDown(self):
        self.world.unregister_listener(ev)
        ev.events
        del self.world

    def test_world_objects(self):
        wo = WorldObject(name='o', data=1)
        assert wo.name == 'o'
        assert wo.data == 1

    def test_world(self):
        obj = self.world.add(1, 'a')
        events = ev.events
        self.check_events(events,
                          names=['world_object_changed'],
                          values={0: {0: self.world, 1: None, 2: obj}}
                          )
        attribute_dict = dict(name='attr1', value=1, interface='IInt', label="Attribute 1")
        final_dict = dict(name='attr1', value=1, interface='IInt', label="Attribute 1", constraints=None)
        obj.set_attribute(**attribute_dict)
        events = ev.events
        self.check_events(events,
                          names=['world_object_item_changed'],
                          values={0: {0: self.world, 1: obj, 2: "attribute", 3: None, 4: final_dict}}
                          )
        assert obj['attr1'] == attribute_dict['value']
Exemplo n.º 2
0
class WorldTest(TestCase):
    def setUp(self):
        ev.events
        self.world = World()
        self.world.register_listener(ev)

    def tearDown(self):
        self.world.unregister_listener(ev)
        ev.events
        del self.world

    def test_world_objects(self):
        wo = WorldObject(name='o', data=1)
        assert wo.name == 'o'
        assert wo.data == 1

    def test_world(self):
        obj = self.world.add(1, 'a')
        events = ev.events
        self.check_events(events,
                          names=['world_object_changed'],
                          values={0: {
                              0: self.world,
                              1: None,
                              2: obj
                          }})
        attribute_dict = dict(name='attr1',
                              value=1,
                              interface='IInt',
                              label="Attribute 1")
        final_dict = dict(name='attr1',
                          value=1,
                          interface='IInt',
                          label="Attribute 1",
                          constraints=None)
        obj.set_attribute(**attribute_dict)
        events = ev.events
        self.check_events(events,
                          names=['world_object_item_changed'],
                          values={
                              0: {
                                  0: self.world,
                                  1: obj,
                                  2: "attribute",
                                  3: None,
                                  4: final_dict
                              }
                          })
        assert obj['attr1'] == attribute_dict['value']
def nuclei_active_region_segmentation(input_img,
                                      positions,
                                      omega_energies=dict(intensity=1.0,
                                                          gradient=1.5,
                                                          smoothness=10000.0),
                                      intensity_min=20000.,
                                      iterations=10,
                                      display=False):
    """
    3D extension of the multiple region extension of the binary level set implementation
    """

    segmentation_start_time = time()
    print "--> Active region segmentation (", len(positions), " regions )"

    from copy import deepcopy

    reference_img = deepcopy(input_img)

    size = np.array(reference_img.shape)
    voxelsize = np.array(reference_img.voxelsize)

    if display:
        from openalea.core.world import World
        world = World()

    if omega_energies.has_key('gradient'):
        from scipy.ndimage.filters import gaussian_gradient_magnitude
        start_time = time()
        print "  --> Computing image gradient"
        gradient = gaussian_gradient_magnitude(
            np.array(reference_img, np.float64),
            sigma=0.5 / np.array(reference_img.voxelsize))
        gradient_img = SpatialImage(np.array(gradient, np.uint16),
                                    voxelsize=reference_img.voxelsize)
        end_time = time()
        print "  <-- Computing image gradient         [", end_time - start_time, " s]"

    start_time = time()
    print "  --> Creating seed image"
    print positions.keys()
    seed_img = seed_image_from_points(size,
                                      voxelsize,
                                      positions,
                                      point_radius=1.0)
    regions_img = np.copy(seed_img)
    end_time = time()
    print "  <-- Creating seed image       (", len(np.unique(
        regions_img)) - 1, " regions )  [", end_time - start_time, " s]"

    if display:
        world.add(seed_img,
                  'active_regions_seeds',
                  colormap='glasbey',
                  voxelsize=voxelsize,
                  alphamap='constant',
                  volume=False,
                  cut_planes=True)
        raw_input()

    for iteration in xrange(iterations):
        start_time = time()
        print "  --> Active region energy gradient descent : iteration", iteration, " (", len(
            np.unique(regions_img)) - 1, " regions )"
        previous_regions_img = np.copy(regions_img)
        regions_img = active_regions_energy_gradient_descent(
            regions_img,
            reference_img,
            omega_energies=omega_energies,
            intensity_min=intensity_min,
            gradient_img=gradient)
        change = ((regions_img - previous_regions_img) != 0.).sum() / float(
            (regions_img > 1.).sum())
        end_time = time()
        print "  --> Active region energy gradient descent : iteration", iteration, "  (Evolution : ", int(
            100 * change), " %)  ", "[", end_time - start_time, " s]"

        if display:
            world.add(regions_img,
                      'active_regions',
                      colormap='invert_grey',
                      voxelsize=voxelsize,
                      intensity_range=(1, 2))

    segmented_img = SpatialImage(regions_img,
                                 voxelsize=reference_img.voxelsize)
    if display:
        world.add(segmented_img,
                  'active_regions',
                  colormap='glasbey',
                  voxelsize=voxelsize,
                  alphamap='constant')
        raw_input()

    segmentation_end_time = time()
    print "<-- Active region segmentation (", len(
        np.unique(segmented_img)
    ) - 1, " regions )    [", segmentation_end_time - segmentation_start_time, " s]"

    return segmented_img