Ejemplo 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']
Ejemplo n.º 2
0
 def clear_namespace(self, interpreter, project):
     if project is None:
         return
     sys.path = self.old_syspath
     for k in project.ns.keys() + ['world', 'data', 'project']:
         if k in interpreter.user_ns:
             del interpreter.user_ns[k]
     from openalea.core.world import World
     world = World()
     world.clear()
Ejemplo n.º 3
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']
Ejemplo n.º 4
0
def add_objects_with_attributes_set():
    """
    Attributes are defined before adding object to world.
    Results is less signals sent by world
    """
    world = World()
    world.clear()
    obj1 = WorldObject("obj1", 1)
    obj2 = WorldObject("obj2", 2)

    obj1.set_attribute('a1', 1, 'IInt', constraints=c1)
    obj1.set_attribute('a2', True, 'IBool')
    obj2.set_attribute('b1', 2.34, 'IFloat', constraints=c2)

    world["obj1"] = obj1
    world["obj2"] = obj2
Ejemplo n.º 5
0
def add_objects_with_attributes_set():
    """
    Attributes are defined before adding object to world.
    Results is less signals sent by world
    """
    world = World()
    world.clear()
    obj1 = WorldObject("obj1", 1)
    obj2 = WorldObject("obj2", 2)

    obj1.set_attribute('a1', 1, 'IInt', constraints=c1)
    obj1.set_attribute('a2', True, 'IBool')
    obj2.set_attribute('b1', 2.34, 'IFloat', constraints=c2)

    world["obj1"] = obj1
    world["obj2"] = obj2
Ejemplo n.º 6
0
 def update_namespace(self, interpreter):
     """
     Definition: Update namespace
     """
     if self._cproject:
         if self._cproject.path.exists():
             os.chdir(self._cproject.path)
             sys.path.insert(0, str(self._cproject.path / 'lib'))
         else:
             os.chdir(self.tmpdir)
             sys.path.insert(0, str(self.tmpdir / 'lib'))
         interpreter.user_ns.update(self._cproject.ns)
         interpreter.user_ns['project'] = self._cproject
         interpreter.user_ns['data'] = self._cproject.path / 'data'
         from openalea.core.world import World
         world = World()
         world.update_namespace(interpreter)
Ejemplo n.º 7
0
def add_objects_then_attributes():

    world = World()
    world["obj1"] = 1
    world["obj2"] = 2

    obj1 = world["obj1"]
    obj2 = world["obj2"]

    obj1.set_attribute('a1', 1, 'IInt', constraints=c1)
    obj1.set_attribute('a2', True, 'IBool')
    obj2.set_attribute('b1', 2.34, 'IFloat', constraints=c2)
Ejemplo n.º 8
0
 def setUp(self):
     ev.events
     self.world = World()
     self.world.register_listener(ev)
Ejemplo n.º 9
0
 def initialize(self):
     self.world = World()
     self.world.register_listener(self)
Ejemplo n.º 10
0
class ImageStackViewer(QtGui.QTabWidget, AbstractListener):

    def __init__(self):
        QtGui.QTabWidget.__init__(self)
        AbstractListener.__init__(self)

        self.setAcceptDrops(True)

        self._image = {}
        self._viewer = {}

        self._create_connections()

    def initialize(self):
        self.world = World()
        self.world.register_listener(self)

    def notify(self, sender, event=None):
        signal, data = event
        if signal == 'world_sync':
            self.set_world(data)
        elif signal == 'world_object_removed':
            world, old = data
            self.remove_world_object(world, old)
        elif signal == 'world_object_changed':
            world, old, new = data
            self.set_world_object(world, new)
        elif signal == 'world_object_item_changed':
            world, obj, item, old, new = data
            if item == 'attribute':
                self.update_world_object(world, obj, item, old, new)

    def set_image(self, name, image):
        if name in self._viewer:
            viewer = self._viewer[name]
        else:
            viewer = ImageStackViewerWidget()
            viewer.setAttribute(QtCore.Qt.WA_DeleteOnClose)
            connect(viewer, viewer.stackChanged, self._on_stack_changed)
            self._viewer[name] = viewer
            self._image[viewer] = name
            self.addTab(viewer, name)

        viewer.setValue(image)

    def remove_image(self, name):
        if name in self._viewer:
            viewer = self._viewer[name]
            disconnect(viewer, viewer.stackChanged, self._on_stack_changed)
            self.removeTab(self.indexOf(viewer))
            viewer.close()
            del self._image[viewer]
            del self._viewer[name]

    def set_world_object(self, world, world_object):
        if not isinstance(world_object.data, SpatialImage):
            return
        self.set_image(world_object.name, world_object.data)

    def remove_world_object(self, world, world_object):
        if not isinstance(world_object.data, SpatialImage):
            return
        self.set_image(world_object.name, world_object.data)

    def set_world(self, world):
        # Clear viewer
        for image in self._viewer.keys():
            self.remove_image(image)

        # Set object in viewer
        for obj_name, world_object in world.items():
            self.set_world_object(world, world_object)

    def update_world_object(self, world, obj, item, old, new):
        attr_name = new['name']
        if attr_name.endswith('plane_position'):
            axis = list('xyz').index(attr_name[0])
            position = new['value']
            if obj.name in self._viewer:
                viewer = self._viewer[obj.name]
                viewer.change_axis(axis)
                viewer.slice_changed(position)

    def _create_connections(self):
        self.currentChanged.connect(self._on_current_image_changed)

    def _on_current_image_changed(self, idx):
        pass

    def _on_stack_changed(self, stack):
        name = self._image[self.sender()]
        if stack:
            world_object = self.world[name]
            cut_plane = '%s_plane_position' % ('xyz'[stack['axis']])
            world_object.set_attribute(cut_plane, stack['slice'])
Ejemplo n.º 11
0
 def setUp(self):
     ev.events
     self.world = World()
     self.world.register_listener(ev)
Ejemplo n.º 12
0
    def __init__(self, parent=None):
        #         super(Viewer, self).__init__()
        AbstractListener.__init__(self)
        view3D.__init__(self, parent=parent)

        self.setAccessibleName("3DViewer")
        self.setMinimumSize(100, 100)

        self.autofocus = True
        self._fps = False
        self.axis = False
        self.grid = True

        actionResetZoom = QtGui.QAction(QtGui.QIcon(":/images/resources/resetzoom.png"), "Home", self)
        self.actionAutoFocus = QtGui.QAction(QtGui.QIcon(":/images/resources/resetzoom.png"), "Auto Focus", self)
        self.actionAutoFocus.setCheckable(True)
        self.actionAutoFocus.setChecked(self.autofocus)
        self.actionAutoFocus.changed.connect(self._on_autofocus_changed)
        actionZoomOut = QtGui.QAction(QtGui.QIcon(":/images/resources/zoomout.png"), "Zoom Out", self)
        actionZoomIn = QtGui.QAction(QtGui.QIcon(":/images/resources/zoomin.png"), "Zoom In", self)
        actionShowAxis = QtGui.QAction(QtGui.QIcon(":/images/resources/axis.png"), "Show Axis", self)
        actionShowGrid = QtGui.QAction(QtGui.QIcon(":/images/resources/grid.png"), "Show Grid", self)
        actionRadius = QtGui.QAction(QtGui.QIcon(":/images/resources/growth2.png"), "Focus", self)
        actionShowFps = QtGui.QAction(QtGui.QIcon(":/images/resources/fps.png"), "Show FPS", self)

        actionBlack = QtGui.QAction(QtGui.QIcon(""), "Bg Black", self)
        actionWhite = QtGui.QAction(QtGui.QIcon(""), "Bg White", self)

        actionShowAxis.setShortcut(
            QtGui.QApplication.translate("MainWindow", "Ctrl+A", None, QtGui.QApplication.UnicodeUTF8))
        actionShowGrid.setShortcut(
            QtGui.QApplication.translate("MainWindow", "Ctrl+I", None, QtGui.QApplication.UnicodeUTF8))
        actionRadius.setShortcut(
            QtGui.QApplication.translate("MainWindow", "Ctrl+M", None, QtGui.QApplication.UnicodeUTF8))
        actionResetZoom.setShortcut(
            QtGui.QApplication.translate("MainWindow", "Ctrl+0", None, QtGui.QApplication.UnicodeUTF8))
        actionZoomOut.setShortcut(
            QtGui.QApplication.translate("MainWindow", "Ctrl+-", None, QtGui.QApplication.UnicodeUTF8))
        actionZoomIn.setShortcut(
            QtGui.QApplication.translate("MainWindow", "Ctrl++", None, QtGui.QApplication.UnicodeUTF8))

        QtCore.QObject.connect(actionResetZoom, QtCore.SIGNAL('triggered(bool)'), self.resetzoom)
        QtCore.QObject.connect(actionZoomOut, QtCore.SIGNAL('triggered(bool)'), self.zoomout)
        QtCore.QObject.connect(actionZoomIn, QtCore.SIGNAL('triggered(bool)'), self.zoomin)

        QtCore.QObject.connect(actionShowAxis, QtCore.SIGNAL('triggered(bool)'), self.show_hide_axis)
        QtCore.QObject.connect(actionShowGrid, QtCore.SIGNAL('triggered(bool)'), self.show_hide_grid)
        QtCore.QObject.connect(actionRadius, QtCore.SIGNAL('triggered(bool)'), self.update_radius)

        QtCore.QObject.connect(actionShowFps, QtCore.SIGNAL('triggered(bool)'), self.show_fps)

        QtCore.QObject.connect(actionBlack, QtCore.SIGNAL('triggered(bool)'), self.set_bg_black)
        QtCore.QObject.connect(actionWhite, QtCore.SIGNAL('triggered(bool)'), self.set_bg_white)

        world = World()
        world.register_listener(self)

        self.object_repr = {}
        self.object_scene = {}
        self.property = {}

        self._actions = [["Viewer", "Zoom", actionResetZoom, 0],
                         ["Viewer", "Zoom", actionZoomOut, 0],
                         ["Viewer", "Zoom", actionZoomIn, 0],
                         ["Viewer", "Zoom", self.actionAutoFocus, 0],
                         ["Viewer", "Camera", actionShowAxis, 0],
                         ["Viewer", "Camera", actionShowGrid, 0],
                         ["Viewer", "Camera", actionRadius, 0],
                         ["Viewer", "Camera", actionBlack, 0],
                         ["Viewer", "Camera", actionWhite, 0],
                         #["Viewer", "Informations", actionShowFps, 1]
                         ]
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
 def initialize(self):
     self.world = World()
     self.world.register_listener(self)
Ejemplo n.º 15
0
class ImageStackViewer(QtGui.QTabWidget, AbstractListener):
    def __init__(self):
        QtGui.QTabWidget.__init__(self)
        AbstractListener.__init__(self)

        self.setAcceptDrops(True)

        self._image = {}
        self._viewer = {}

        self._create_connections()

    def initialize(self):
        self.world = World()
        self.world.register_listener(self)

    def notify(self, sender, event=None):
        signal, data = event
        if signal == 'world_sync':
            self.set_world(data)
        elif signal == 'world_object_removed':
            world, old = data
            self.remove_world_object(world, old)
        elif signal == 'world_object_changed':
            world, old, new = data
            self.set_world_object(world, new)
        elif signal == 'world_object_item_changed':
            world, obj, item, old, new = data
            if item == 'attribute':
                self.update_world_object(world, obj, item, old, new)

    def set_image(self, name, image):
        if name in self._viewer:
            viewer = self._viewer[name]
        else:
            viewer = ImageStackViewerWidget()
            viewer.setAttribute(QtCore.Qt.WA_DeleteOnClose)
            connect(viewer, viewer.stackChanged, self._on_stack_changed)
            self._viewer[name] = viewer
            self._image[viewer] = name
            self.addTab(viewer, name)

        viewer.setValue(image)

    def remove_image(self, name):
        if name in self._viewer:
            viewer = self._viewer[name]
            disconnect(viewer, viewer.stackChanged, self._on_stack_changed)
            self.removeTab(self.indexOf(viewer))
            viewer.close()
            del self._image[viewer]
            del self._viewer[name]

    def set_world_object(self, world, world_object):
        if not isinstance(world_object.data, SpatialImage):
            return
        self.set_image(world_object.name, world_object.data)

    def remove_world_object(self, world, world_object):
        if not isinstance(world_object.data, SpatialImage):
            return
        self.set_image(world_object.name, world_object.data)

    def set_world(self, world):
        # Clear viewer
        for image in self._viewer.keys():
            self.remove_image(image)

        # Set object in viewer
        for obj_name, world_object in world.items():
            self.set_world_object(world, world_object)

    def update_world_object(self, world, obj, item, old, new):
        attr_name = new['name']
        if attr_name.endswith('plane_position'):
            axis = list('xyz').index(attr_name[0])
            position = new['value']
            if obj.name in self._viewer:
                viewer = self._viewer[obj.name]
                viewer.change_axis(axis)
                viewer.slice_changed(position)

    def _create_connections(self):
        self.currentChanged.connect(self._on_current_image_changed)

    def _on_current_image_changed(self, idx):
        pass

    def _on_stack_changed(self, stack):
        name = self._image[self.sender()]
        if stack:
            world_object = self.world[name]
            cut_plane = '%s_plane_position' % ('xyz'[stack['axis']])
            world_object.set_attribute(cut_plane, stack['slice'])