Cours Vtk Marcela Hernández Hoyos CREATIS Janvier 2000.
-
Upload
charlot-pollet -
Category
Documents
-
view
124 -
download
4
Transcript of Cours Vtk Marcela Hernández Hoyos CREATIS Janvier 2000.
Cours Vtk
Marcela Hernández HoyosCREATIS
Janvier 2000
Contenu Qu’est-ce que c’est ?
Pourquoi VTK?
Documentation
Syntaxe
POO : Quelques concepts de base
Modèles d'objets VTK Modèle de visualisation Modèle graphique Modèle de traitement
Exemple d'une application
Tcl/Tk & Vtk & C++
Qu'est-ce que c'est ?
Visualization ToolKit
Niveau d'application (C++,Tcl/Tk)
VTK
Librairie graphique (openGL)
Librairie de classes C++(compilée)
Composant de communication avec des langages interpretés :
Tcl/Tk, Java, Python
Système Orienté Objet
Pour quoi VTK?
Gratuit
Code source C++• Vous avez le contrôle
POO
Extensible • Possibilité de création de nouvelles classes
Plate-forme/librairie indépendante
Algorithmes avancés et très utiles
Conversion des données en images
Nombreux utilisateurs + liste de discussion
Documentation Livres
• The VisualizationToolkit, 2nd edition» Schroeder, Martin, Lorenson. Prentice Hall.
• VTK User's Guide» Schroeder, Martin. Kitware, Inc.
Page web• http://www.kitware.com /vtk.html
» Software, FAQ’s, listes de discussion, exemples, links, etc
Autres exemples• Répertoire d'installation VTK
• graphics/examplesTcl
D. Fibroulet
Syntaxe utilisée dans ces notes
Pour les méthodes (fonctions)• Description d'une méthode
• Pseudo-syntaxe de la méthodecode Tcl/Tk
Exemple• Ajouter / Supprimer un renderer
• AddRenderer (vtkRenderer)
• RemoveRenderer (vtkRenderer)
vtkRendererWindow myWindow
vtkRenderer myRenderer
myWindow AddRenderer myRenderer
POO ???
VTK
Librairie de classes C++(compilée)
Système Orienté Objet
Programmation Orientée Objet
Concepts de base
POO : Quelques concepts de base
Structure de données
ChampsFonctions
Variables
Attributs Méthodes
Objet
Programmationprocedurale
POOClasse
Exemple - Programmation procéduraletypedef struct { int x; int y;} point2D;
typedef struct { int x; int y; int z;} point3D;
void printPoint2D(point2D *p) { printf("x:%d, y:%d",p->x, p->y) }
void printPoint3D(point3D *p) { printf("x:%d, y:%d,z:%d",p->x, p->y,p->z) }
point2D *p2D;point3D *p3D;
.
.
.
p2D = malloc …p3D = malloc …
.
.
.
printPoint2D(p2D);printPoint3D(p3D);
Structure de données
Fonction
Variable
Champs
Appel aux fonctions
Exemple - POOclass point2D {public: void print(); point2D *New(); protected: int x; int y;}
class point3D {public: void print(); point3D *New(); protected: int x; int y; int z;}
point2D *p2D = point2D :: New;point3D *p3D = point3D :: New;
.
.
.
.
.
.
p2D -> print();p3D->print();
ClasseObjets
Méthodes
Attributs
Appel aux méthodes
VTKUn système de Visualisation
Orienté Objet
Exemple - Sphèrecatch {load vtktcl};source vtkInt.tcl;source colors.tcl
vtkSphereSource sphere sphere SetRadius 5 sphere SetThetaResolution 36 sphere SetPhiResolution 18
vtkPolyDataMapper isoMapper isoMapper SetInput [sphere GetOutput] isoMapper ScalarVisibilityOn
vtkActor isoActor isoActor SetMapper isoMapper eval [isoActor GetProperty] SetColor $peacock
vtkRenderer ren1 ren1 AddActor isoActor ren1 SetBackground 1 1 1
vtkRenderWindow renWin renWin AddRenderer ren1 renWin SetSize 500 500
vtkRenderWindowInteractor iren iren SetRenderWindow renWin iren Initialize
Source
Mapper
Actor
Renderer
Render Window
Exemple - Volume
Lecture, traitement et affichage de données sous la forme d'images
Deux étapes• Conversion de données en primitives graphiques
» Points, lignes, triangles, …
• Conversion de données graphiques en images» Affichage des primitives graphiques à l'écran
Les objets VTK sont organisés en trois modèles:• Modèle de visualisation
» Étape 1 : Représentation géométrique des données
• Modèle graphique» Étape 2 : Rendu de la représentation géométrique
• Modèle de traitement» Traitement d'images
Vtk - Système de Visualisation
Vtk - Système de Visualisation
Modèle de Visualisation
Modèle graphique
Données
Modèle de Traitement
Source(Reader)
Source(Procedural)
Filter
Mapper(Writer)
MapperLecture
Création de nouvelles données
Écriture
Transformation des données en
primitives graphiques
Affichage
Modèle de Visualisation
Modèle de visualisation
Objectif• Transformer les données en primitives graphiques
• Construire la représentation géométriques des objets à afficher
Basé sur un paradigme "pipeline" • La transformation des données est décomposée en modules
• Chaque module réalise une opération précise sur les données (transformation)
• Les modules sont connectés entre eux pour former un réseau ou pipeline
• Les données circulent à l'intérieur du pipeline, en passant d'un module à l'autre
Modèle de visualisation
Deux types d'objets:• Objets "data"
» Données qui circulent dans le pipeline
» Appelés datasets
• Objets "process"» Modules ou composants algorithmiques du pipeline
Process A
dataset A dataset B
Process B Process C
sortie
entrée
Objets ProcessObjet
Process
Source Filter Mapper
Démarre le pipeline•Lecture de données externes (images)•Génération de nouvelles données (graphiques)
Traite les objets donnée•Reçoit une ou plusieurs entrées•Génère une ou plusieurs sorties
Finit le pipeline•Génère des primitives graphiques•Communique le pipeline de visualisation avec le modèle graphique
Source Filter Mapper
aucune entrée
1 sortie
1 entrée
1 sortie
1 entrée
aucune sortie
Pipeline de visualisation
Source
Source
objet data
objet data
Filter
Filter
objet data
objet data
Filter
objet data
MapperModèle
graphique
Exemplecatch {load vtktcl};source vtkInt.tcl;source colors.tcl
vtkSphereSource sphere sphere SetRadius 5 sphere SetThetaResolution 36 sphere SetPhiResolution 18
vtkPolyDataMapper isoMapper isoMapper SetInput [sphere GetOutput] isoMapper ScalarVisibilityOn
vtkActor isoActor isoActor SetMapper isoMapper eval [isoActor GetProperty] SetColor $peacock
vtkRenderer ren1 ren1 AddActor isoActor ren1 SetBackground 1 1 1
vtkRenderWindow renWin renWin AddRenderer ren1 renWin SetSize 500 500
vtkRenderWindowInteractor iren iren SetRenderWindow renWin iren Initialize
Source
Mapper
Actor
Renderer
Render Window
Objets Data ou Datasets
Un dataset est composé de :• Structure topologique (liste de cells)
» Détermine la forme de l'objet (triangle, sphère, maillage, etc.)
» Ne varie pas avec certaines transformations géométriques (translation, rotation et changement d'échelle)
» Un objet contient une ou plusieurs cells
• Structure géométrique (liste de points)» Instanciation de la structure topologique
» Coordonnées des points qui conforment les cells
• Attributs» Information complémentaire associée aux points ou aux cells
(température en un point, masse d'une cell, etc)
objet data ou dataset
Cells Atomes qui conforment un dataset
Une cell est une organisation topologique de points (coordonnées x,y,z)
Définie par : • Type
• Liste ordonnée de points
Maillage = liste de triangles
Triangle = liste de points
Objet
Cell
0
1
3
2
TétraèdreHexaèdre
0 1
34
5
67
2
Types de cells
Vertex
Polyvertex
Line
Polyline
Triangle
Triangle Strip
Quadrilateral
Pixel
Polygon
Tetrahedron
Hexahedron
Voxel
Types de Datasets
vtkStructuredPointsImages 2D et 3D
Points structurés Grille rectiligne
vtkRectilinearGridMaillage carré
vtkStructuredGridMaillage 2D
Grille structurée Données polygonales
vtkPolyDataPoints, lignes,polygones
vtkUnstructuredGridMaillage 2D / 3D non structuré
Grille non structurée
Exemples de maillages
Les cells peuvent avoir des différentes formes et tailles• 2D : triangles, quadrilatéraux, ...
• 3D : tétraèdres, hexaèdres, pyramides, …
Les maillages peuvent contenir un ou plusieurs type de cells
Type des attributs associés aux points et aux cells d'un dataset
vtkScalarsValeur simple
Scalaires vtkVectors
Magnitude etdirection (3D)
Vecteur
(u,v,w)vtkNormalsDirection (3D)
Normal
(nx,ny,nz)|n| = 1
vtkTCoordsCorrespondance entre un indice et une carte de textures
Coordonnée de texture
s
t
2D: (u,v)3D: (u,v,w)
vtkTensorsMatrice n x n
Tenseur
a11 a12 a13
a21 a22 a23
a31 a32 a33
Tableau de données
vtkFieldDataTableau de tableauxChaque tableau peut être dedifférent type
Tableau 0 Tableau 1 Tableau n-1. . .
Modèle Graphique
Modèle graphique
Objectif• Transformer des données graphiques en images et les
afficher à l'écran
Regroupe les caractéristiques d'un système graphique 3D (infographie)
Les principales classes VTK du modèle graphique:• Render Window
• RendererLight
Camera
Actor» Property
» Transform
» Mapper
Modèle graphiqueRender Window
Renderer :
Actor : PropertyTransformMapper
CameraLight
Render Window
Gère la(s) fenêtre(s) dans laquelle on va afficher les images ou les objets graphiques
Fonctionnalité par défaut d'une fenêtre windows
Indépendante des dispositifs graphiques
Gère l'ensemble de renders contenus dans la fenêtre• Plusieurs renderers peuvent dessiner dans une même fenêtre (render
window) pour créer une scène (image finale)
Renderer
Classe vtkRenderWindow
Méthodes
• Ajouter / Supprimer un renderer• AddRenderer (vtkRenderer)
• RemoveRenderer (vtkRenderer)
• Configuration de l'écran• FullScreenOn ()
• FullScreenOff ()
• BordersOn ()
• BordersOff ()
Renderer Coordonne la(s) source(s) de lumière, la camera et les actors pour
générer l'image d'une scène
Une scène comporte :• Au moins un actor, une camera et une source de lumière• Si les objets camera et light ne sont pas définis, ils sont créés
automatiquement par le renderer
Actor : ce que l'on voit
Camera : détermine comment projeter une géométrie 3D sur une image 2D
Light : représente et manipule l'éclairage de la scène (en 3D)
Classe vtkRenderer Méthodes
• Ajouter/Supprimer des actors et des lights• AddActor (vtkActor) / RemoveActor (vtkActor)
• AddLight (vtkLight) / RemoveLight (vtkLight)
• Déterminer la camera à utiliser pour le rendu• SetActiveCamera (vtkCamera)
• Créer l'image résultant du rendu• Render
• Conversion de coordonnées• ViewToWorld (float, float, float) / void WorldToView (float, float, float)
x
y
z
x
y
Monde Vue
Classe vtkLight
Méthodes• Fixer la couleur de la lumière
• SetColor (float ,float ,float) / GetColor ()
• Déterminer la position de la source• SetPosition (float ,float ,float ) / GetPosition ()
• Définir l'intensité (de 0 à 1)• SetIntensity (float ) / GetIntensity ()
• Allumer / Éteindre• SwitchOn ()
• SwitchOff ()
Classe vtkCamera Méthodes
• Fixer la position de la camera en coordonnées monde• SetPosition (float ,float ,float ) / GetPosition ()
• Déterminer la position du point focal de la camera• SetFocalPoint (float ,float ,float ) / GetFocalPoint ()
• Calculer la distance entre la position de la camera et celle du point focal
• ComputeDistance ()
Direction de projectionPoint focal
Position
Plan frontal de clipping
Plan arrière de clipping
Actor
Objet dessiné par un renderer dans une scène
Un actor ne représente pas directement sa géométrie ni son apparence
Celles-ci sont définies en termes de :• Property• Mapper• Transform
Actor
Classe vtkActor Méthodes
• Associer l'objet property qui détermine les propriétés d'apparence de l'actor
• SetProperty (vtkProperty) / GetProperty ()» Un objet property est crée par défaut
» Plusieurs actors peuvent partager le même objet property
• Associer l'objet mapper qui détermine la géométrie de l'actor• SetMapper (vtkMapper) / GetMapper ()
• Définir la matrice de transformations qui détermine l'échelle, la position et l'orientation de l'actor
• SetUserMatrix (vtkMatrix4x4 *)
Généralement• Il ne faut pas définir explicitement les propriétés ni les
transformations. Des valeurs par défaut son déterminées lors de la création de l'actor
Property
Détermine l'apparence de la surface d'un actor
Classe VTK : vtkProperty
Méthodes• Représentation de la géométrie de la surface
• SetRepresentationToPoints ()
• SetRepresentationToWireframe ()
• SetRepresentationToSurface ()
• Déterminer la couleur de la surface• SetColor (float ,float ,float )
• Fixer l'opacité de la surface (0 transparent, 1.0 opaque)• SetOpacity (float )
Mapper Chargé du rendu (rendering)
Lie le modèle de visualisation et le modèle graphique• Détermine la géométrie de l'actor
» Combinaison de points (sommets), lignes, polygones, etc
• Définit la couleur des sommets» Fait référence à une palette de couleurs
Tout actor doit avoir un mapper associé pour pouvoir être affiché à l'écran
Classes VTK : vtkMapper, vtkPolyDataMapper, vtkDataSetMapper
Classe vtkPolyDataMapper
Méthodes• Spécifier les données d'entrée au mapper (données à afficher)
• SetInput (vtkPolyData)
• Associer la palette de couleurs• SetLookupTable (vtkLookupTable)
• Créer une palette de couleurs par défaut• CreateDefaultLookupTable ()
• Déterminer si le rendu est fait de manière immédiate ou pas• ImmediateModeRenderingOn ()
• ImmediateModeRenderingOff ()
Transform
Translation Changement d'échelle Rotation
x
y
z
w
tx
ty
tz
x
y
z
'
'
'
'
1 0 0
0 1 0
0 0 1
0 0 0 1 1
Translation (tx,ty,tz)
Ts
sx
sy
sz
0 0 0
0 0 0
0 0 0
0 0 0 1Chgt d'échelle (sx,sy,sz)
TRx
1 0 0 0
0 0
0 0
0 0 0 1
cos sin
sin cos
Rotation autour de x
Garde une pile de matrices de transformation
Une seule matrice courante de transformation
Fournit de méthodes pour effectuer les opérations de translation, changement d'échelle et rotation
Classe vtkTransform
Méthodes• Créer d'une matrice identité
• Identity ()
• Créer une matrice de rotation et la concaténer avec la matrice courante de transformation
• RotateX (float), RotateY (float ), RotateZ (float )
• Changer d'échelle la matrice courante de transformation• Scale (float ,float ,float )
• Déplacer la matrice courante de transformation• Translate (float ,float ,float )
• Transposer la matrice courante de transformation • Transpose ()
• Invertir la matrice courante de transformation • Inverse ()
Modèle de Traitement
Modèle de traitement
Objectif• Traitement d'images
Implémentation particulière du pipeline de visualisation pour le traitement de datasets de type "Points structurés" (vtkStructuredPoints)
• 2D» Images
» Bitmaps
• 3D» Volumes (piles de datasets 2D)
Classes spécialisées pour :• Lecture
• Ecriture
• Affichage• Traitement
Lecture d'images (2D et 3D)
vtkImageReader• Lecture de n'importe quel type d'image
• Il faut indiquer les dimensions et le type de l'image (pour sauter l'entête)
• Les volumes sont lus comme une séquence d'images
• Possibilité de lire un région d'intérêt (ROI/VOI)
vtkBMPReader• Images BMP
vtkTIFFReader• Images TIFF
Exemple de lecture
vtkImageReader monReader
monReader SetDataByteOrderToLittleEndian
monReader SetDataExtent 0 255 0 255 34 85
monReader SetFilePrefix "000"
monReader SetFilePattern "%s%d.ima"
monReader SetDataScalarTypeToUnsignedShort
monReader Update
Écriture d'images
vtkImageWriter• Ecriture de n'importe quel type d'image
• Le type de l'image à sauvegarder est le même que celui de l'image en entrée
• Les dimensions déterminent si les données doivent être sauvegardés en plusieurs fichiers
vtkBMPWriter
vtkTIFFWriter
Affichage d'images
Mapper• vtkImageMapper
• vtkDataSetMapper
• vtkPolyDataMapper
• vtkVolumeMapper
Actor• vtkActor
• vtkActor2D
Renderer• vtkRenderer
Traitement
vtkImageAnisotropicDiffusion2D/3D• Lissage par la méthode de diffusion anisotrope
vtkImageContinuousDilate3D (vtkImageContinuousErode3D)
• Opérations morphologiques de dilatation/érosion
vtkImageCityBlockDistance • Carte de distances 1,2 or 3D
vtkImageFFT• Transformée de Fourier
vtkImageGaussianSmooth• Filtrage gaussien
Traitement
vtkImageGradient• Gradient de l'image
vtkImageMarchingCubes• Génération d'isosurfaces (rendu de surfaces)
vtkImageMedian3D• Filtrage médian
vtkImageResample• Re-échantillonnage d'une image avec interpolation linaire
vtkImageSkeleton2D• Squelettisation d'images 2D
Traitement
vtkImageSobel2D/3D• Opérateur de sobel
vtkImageThreshold• Seuillage
vtkVolumeRayCastIsosurfaceFunction• Rendu surfacique d'un volume
vtkVolumeRayCastMIPFunction• Création de l'image MIP (maximum intensity projection)
d'un volume
Exemple d'une Application
Tcl/Tk & VTK & C++
Vtk & C++ VTK est une librairie de classes C++
• Aucun problème de communication
Pour programmer :• Inclure les fichier "headers" correspondants (.h)• Programmer en C++
#include "vtk.h"
#include "vtkImageReader.h"
#include "vtkImageData.h"
#include "vtkImageCache.h"
#include "vtkScalars.h"
extern "C" {
#include "idvol.h"
}
Pour programmer en même temps avec libido (C)
VTK et Tcl/Tk
En Tcl• Charger la librairie (load vtktcl)
Pour chaque classe VTK• Il existe une nouvelle commande Tcl pour créer les objets• Une fois l'objet est crée, le nom de l'objet devient une commande pour appeler ses méthodes
Tcl/TkLibrairie de classes C++
(compilée)
Composant de communication avec des langages interpretés : Tcl/Tk, Java,
Python
VTK
Exemple
load vtktcl
vtkActor actorToto
actorToto print
actorToto SetDebug 1
puts [actorToto GetDebug]
set property [actorToto GetProperty]
$property Print
$property SetColor 1 0 0
puts [$property GetColor]
Charger la librairie
Commande Tcl vtkActorNouvelle commande actorToto
Nouvelle commande $property
Interface graphique du logiciel
Normalement• Les "Render Window" sont des fenêtres indépendantes
• Le logiciel aura une fenêtre séparée pour chaque render window
Pour combiner les Render Window (de VTK) et les objets graphiques d'interface Tk dans une seule fenêtre
• Widget vtkTkRenderWidget» C'est un widget Tk comme les autres
» Possède une méthode spéciale pour communiquer avec VTK
vtkRenderer monRenderer
vtkTkRenderWidget .maFenetre -width 300 -height 300
set RenWin [.maFenetre GetRenderWindow]
$RenWin AddRenderer monRenderer
Communication avec DLLs
DLL C++ avec VTKLogiciel Tcl/Tk
VTK
VTK
Création d'un objet VTK en Tcl/Tk et manipulation en C++
•Récupérer le pointeur de l'objet (adresse) avec la méthode print•Passer l'adresse à la fonction de la dll (avec le cast correspondant)