def display3D(img, list_remove=[], dictionary=None, lut=black_and_white, lut_range = False, cell_separation = False, verbose=False, labels=False):
    """
    paramètres :
        - img (SpatialImage ou SpatialImageAnalysis) : segmented tissu
        - list_remove (list) : une liste des cellules à enlever lors de l'affichage
        - dictionary (dict) : dictionnaire cells->scalar
        - lut : -Look-Up Table- disponibles dans 'colormaps.py'
        - lut_range (list) : list of 2 values defing the range (min, max) of the lut.
        - cell_separation (bool) : if True add a "separation" between cells.
        - verbose (bool) : pour afficher ou non les progressions
        - labels (bool) : display labels of cell in 3D.

    Examples : 
        im1 = imread('/home/vince/softs/vplants/vplants/trunk/vtissue/imaging/mars_alt/test/data/segmentation/imgSeg.inr.gz')
        im1a=SpatialImageAnalysis(im1)
        dictionary=dict(zip(im1a.labels(), im1a.volume()))
        labs=im1a.labels()
        L1=im1a.L1()[1]
        filtre=[i for i in labs if i not in L1]
        display3D(im1, verbose=True)

    Fonction maitre en deux parties :
        1. Gestion du format de l'objet donné en paramètre;
        2. Gestion de l'affichage.
    """
    if cell_separation:
        # -- Management of file format
        if isinstance(img,SpatialImageAnalysis3D):
            im = compute_cell_separation(img.image)
        elif isinstance(img,SpatialImage):
            im = compute_cell_separation(img)
        else:
            print "for now this file format is not managed by display3D"
            return None

    # -- Management of file format
    if isinstance(img,SpatialImageAnalysis3D):
        if list_remove == None:
            list_remove = img._ignoredlabels
        a, a2, sc, m, m2 = rootSpI(img.image, list_remove = list_remove, sc = dictionary, lut_range = lut_range, verbose=verbose)
    elif isinstance(img,SpatialImage):
        a, a2, sc, m, m2 = rootSpI(img, list_remove = list_remove, sc = dictionary, lut_range = lut_range, verbose=verbose)
    else:
        print "for now this file format is not managed by display3D"
        return None

    # -- choice of colormap
    m.lookup_table = lut(m.lookup_table)
    from openalea.image.all import black_and_white
    m2.lookup_table = black_and_white(m2.lookup_table)
    # -- switching on the viewer and loading the object and the scalarbar
    viewer = ivtk.viewer()
    viewer.scene.add_actor(a)
    viewer.scene.add_actor(a2)
    if dictionary != None and lut_range != None:
        viewer.scene.add_actor(sc)
    if labels:
        if isinstance(img,SpatialImageAnalysis3D):
            lab=create_labels(img, viewer.scene.renderer)
            viewer.scene.add_actor(lab)
def main(instantiate_gui=True):
    """Simple test case."""
    from tvtk.tools import ivtk
    v = ivtk.viewer(browser=False, instantiate_gui=instantiate_gui)
    cs = tvtk.ConeSource()
    m = tvtk.PolyDataMapper(input=cs.output)
    a = tvtk.Actor(mapper=m)
    v.scene.add_actor(a)
    v.scene.reset_zoom()
    b = PipelineBrowser(v.scene)
    b.show()
    return v, b, a
def main(instantiate_gui=True):
    """Simple test case."""
    from tvtk.tools import ivtk

    v = ivtk.viewer(browser=False, instantiate_gui=instantiate_gui)
    cs = tvtk.ConeSource()
    m = tvtk.PolyDataMapper(input_connection=cs.output_port)
    a = tvtk.Actor(mapper=m)
    v.scene.add_actor(a)
    v.scene.reset_zoom()

    b = PipelineBrowser(v.scene)
    b.show()

    return v, b, a
Exemple #4
0
def figure(outline=True, browser=True):
    """Simple helper function that returns a usable figure.

    Parameters
    ----------

    - outline : `bool` (default: True)

      If True, create an outline bounding box along with an axes
      marker for the scene.

    - browser : `bool` (default, True)

      If True, creates an IVTK scene with an embedded PipelineBrowser.
      If False, does not create it.
    """
    v = ivtk.viewer(browser)
    f = Figure(v.scene)
    if outline:
        o = Outline()
        f.add(o)
    v.scene.reset_zoom()
    return f
Exemple #5
0
def figure(outline=True, browser=True):
    """Simple helper function that returns a usable figure.

    Parameters
    ----------

    - outline : `bool` (default: True)

      If True, create an outline bounding box along with an axes
      marker for the scene.

    - browser : `bool` (default, True)

      If True, creates an IVTK scene with an embedded PipelineBrowser.
      If False, does not create it.
    """
    v = ivtk.viewer(browser)
    f = Figure(v.scene)
    if outline:
        o = Outline()
        f.add(o)
    v.scene.reset_zoom()
    return f
  mbg, mb, mbc = TutorialTree()

  q = map(list, mbc.q)
  q[1] = [np.pi/2.]
  q[2] = [-np.pi/4.]
  q[3] = [-np.pi/2.]
  q[4] = [0.5]
  mbc.q = q
  rbd.forwardKinematics(mb, mbc)

  X_s = sva.PTransformd(sva.RotY(-np.pi/2.), e.Vector3d(0.1, 0., 0.))
  mbv = MultiBodyViz(mbg, mb, endEffectorDict={'b4':(X_s, 0.1, (0., 1., 0.))})

  # test MultiBodyViz
  from tvtk.tools import ivtk
  viewer = ivtk.viewer()
  mbv.addActors(viewer.scene)
  mbv.display(mb, mbc)

  # test axis
  from axis import Axis
  a1 = Axis(text='test', length=0.2)
  a1.addActors(viewer.scene)
  a1.X = sva.PTransformd(sva.RotX(np.pi/2.), e.Vector3d.UnitX())

  # test vector6d
  from vector6d import ForceVecViz, MotionVecViz
  M = sva.MotionVecd(e.Vector3d(0.2, 0.1, 0.), e.Vector3d(0.1, 0., 0.2))
  F = sva.ForceVecd(e.Vector3d(-0.2, -0.1, 0.), e.Vector3d(-0.1, 0., -0.2))
  MV = MotionVecViz(M, a1.X)
  FV = ForceVecViz(F, sva.PTransformd(sva.RotX(np.pi/2.), e.Vector3d.UnitX()*1.4))
def display3D(img,
              list_remove=[],
              dictionary=None,
              lut=black_and_white,
              lut_range=False,
              cell_separation=False,
              verbose=False,
              labels=False):
    """
    paramètres :
        - img (SpatialImage ou SpatialImageAnalysis) : segmented tissu
        - list_remove (list) : une liste des cellules à enlever lors de l'affichage
        - dictionary (dict) : dictionnaire cells->scalar
        - lut : -Look-Up Table- disponibles dans 'colormaps.py'
        - lut_range (list) : list of 2 values defing the range (min, max) of the lut.
        - cell_separation (bool) : if True add a "separation" between cells.
        - verbose (bool) : pour afficher ou non les progressions
        - labels (bool) : display labels of cell in 3D.

    Examples : 
        im1 = imread('/home/vince/softs/vplants/vplants/trunk/vtissue/imaging/mars_alt/test/data/segmentation/imgSeg.inr.gz')
        im1a=SpatialImageAnalysis(im1)
        dictionary=dict(zip(im1a.labels(), im1a.volume()))
        labs=im1a.labels()
        L1=im1a.L1()[1]
        filtre=[i for i in labs if i not in L1]
        display3D(im1, verbose=True)

    Fonction maitre en deux parties :
        1. Gestion du format de l'objet donné en paramètre;
        2. Gestion de l'affichage.
    """
    if cell_separation:
        # -- Management of file format
        if isinstance(img, SpatialImageAnalysis3D):
            im = compute_cell_separation(img.image)
        elif isinstance(img, SpatialImage):
            im = compute_cell_separation(img)
        else:
            print "for now this file format is not managed by display3D"
            return None

    # -- Management of file format
    if isinstance(img, SpatialImageAnalysis3D):
        if list_remove == None:
            list_remove = img._ignoredlabels
        a, a2, sc, m, m2 = rootSpI(img.image,
                                   list_remove=list_remove,
                                   sc=dictionary,
                                   lut_range=lut_range,
                                   verbose=verbose)
    elif isinstance(img, SpatialImage):
        a, a2, sc, m, m2 = rootSpI(img,
                                   list_remove=list_remove,
                                   sc=dictionary,
                                   lut_range=lut_range,
                                   verbose=verbose)
    else:
        print "for now this file format is not managed by display3D"
        return None

    # -- choice of colormap
    m.lookup_table = lut(m.lookup_table)
    from openalea.image.all import black_and_white
    m2.lookup_table = black_and_white(m2.lookup_table)
    # -- switching on the viewer and loading the object and the scalarbar
    viewer = ivtk.viewer()
    viewer.scene.add_actor(a)
    viewer.scene.add_actor(a2)
    if dictionary != None and lut_range != None:
        viewer.scene.add_actor(sc)
    if labels:
        if isinstance(img, SpatialImageAnalysis3D):
            lab = create_labels(img, viewer.scene.renderer)
            viewer.scene.add_actor(lab)
Exemple #8
0
#!/usr/bin/env python

from IPython.display import Image
from tvtk.tools import ivtk
#from graph import Axis

viewer = ivtk.viewer()
viewer.size = (640, 480)

viewer.scene.camera.focal_point = (0.175, 0.321, 0.0)
viewer.scene.camera.position = (0.175, 0.321, 3.3)

display_number = 1


def display():
    global display_number
    path = 'img/%s.png' % display_number
    display_number += 1
    viewer.scene.save(path)
    return Image(path)


import numpy as np
import eigen3 as e
import spacevecalg as sva
Exemple #9
0
    def render(self, filename=None, crop=True, add_actors=[]):
        renderer = tvtk.Renderer(background = (1, 1, 1))

        subset = tvtk.ExtractVOI(
                sample_rate = (self.sample_rate, self.sample_rate, 1),
                voi = (self._x_min, self._x_max, self._y_min, self._y_max, 0, 0))
        configure_input(subset, self._dtm_reader)

        cropped = tvtk.Threshold()
        configure_input(cropped, subset)
        cropped.threshold_by_upper(-9998)

        geom = tvtk.GeometryFilter()
        configure_input(geom, cropped)
        surface1 = tvtk.WarpScalar(scale_factor = self.z_exaggeration)
        configure_input(surface1, geom)
        triangles = tvtk.TriangleFilter()
        configure_input(triangles, surface1)
        reduced = tvtk.DecimatePro(target_reduction = 0.5, preserve_topology = True)
        configure_input(reduced, triangles)
        strips = tvtk.Stripper()
        configure_input(strips, reduced)
        texture_plane = tvtk.TextureMapToPlane(
                origin = (0, self._y_max, 0),
                point1 = (self._x_max, self._y_max, 0),
                point2 = (0, 0, 0))
        configure_input(texture_plane, strips)

        map_normals = tvtk.PolyDataNormals()
        configure_input(map_normals, texture_plane)
        surface = tvtk.PolyDataMapper(scalar_visibility = False)
        configure_input(surface, map_normals)
        #map_image = tvtk.PNGReader(file_name = overlay_file)
        map_texture = tvtk.Texture(interpolate = True)
        configure_input(map_texture, self._overlay)

        geomap_actor = tvtk.Actor(mapper = surface, texture = map_texture, visibility = True)
        renderer.add_actor(geomap_actor)

        overhead_light = tvtk.Light()
        overhead_light.set_color(1, 1, 1)
        overhead_light.focal_point = ((self._x_max - self._x_min) / 2, (self._y_max - self._y_min) / 2, 0)
        overhead_light.position = ((self._x_max - self._x_min) / 2, (self._y_max - self._y_min) / 2, 2000)
        overhead_light.intensity = 0.5
        renderer.add_light(overhead_light)

        headlight = tvtk.Light(light_type = 'headlight')
        renderer.add_light(headlight)

        renderer.active_camera.set(**self.camera_settings)

        ## add axes indicator:
        #axes = tvtk.AxesActor()
        #axes.total_length = (300,) * 3
        #text_property = tvtk.TextProperty()
        #text_property.font_family = 'arial'
        #text_property.font_size = 40
        #text_property.color = (0, 0, 0)
        #axes.x_axis_caption_actor2d.text_actor.text_scale_mode = False
        #axes.y_axis_caption_actor2d.text_actor.text_scale_mode = False
        #axes.z_axis_caption_actor2d.text_actor.text_scale_mode = False
        #axes.x_axis_caption_actor2d.caption_text_property = text_property
        #axes.y_axis_caption_actor2d.caption_text_property = text_property
        #axes.z_axis_caption_actor2d.caption_text_property = text_property
        #axes.x_axis_caption_actor2d.position = [10, 0]
        #axes.y_axis_caption_actor2d.position = [20, -20]
        #axes.z_axis_caption_actor2d.position = [20, 0]
        #axes.x_axis_shaft_property.line_width = 3
        #axes.y_axis_shaft_property.line_width = 3
        #axes.z_axis_shaft_property.line_width = 3
        #renderer.add_actor(axes)

        ## shift it a little bit:
        #transform = tvtk.Transform()
        #transform.translate((400, 400, 0))
        #axes.user_transform = transform

        # add additional actors:
        for actor in add_actors:
            renderer.add_actor(actor)

        if filename is None:
            v = ivtk.viewer()
            v.scene.add_actors(renderer.actors)
            cam = v.scene.camera
        else:
            render_window = tvtk.RenderWindow(size = (840, 700), position = (100, 100))
            render_window.add_renderer(renderer)
            cam = renderer.active_camera

        if filename is not None:
            render_window.render()
            render_large = tvtk.RenderLargeImage(input = renderer, magnification = 2)
            writer = tvtk.PNGWriter(file_name = filename)
            configure_input(writer, render_large)
            writer.write()

            if crop:
                # crop image to non-white pixels:
                image = Image.open(filename)
                bg = Image.new(image.mode, image.size, (255, 255, 255))
                diff = ImageChops.difference(image, bg)
                bbox = diff.getbbox()
                image = image.crop(bbox)
                image.save(filename)