Modélisation avec VTK Odyssée Merveille et Hugues Talbot 8 octobre 2014
Sommaire 1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK 2 / 25
1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK 3 / 25
VTK VTK (Visualisation Toolkit) est une librairie open-source créée par Kitware permettant la visualisation de données 2D/3D. Elle est écrite en C++ mais s interface aisément avec Tck/Tk, Java et Python. Modélisation avec VTK 4 / 25
Première Scène avec Vtk 1 i m p o r t v t k 3 c y l i n d e r = v t k. v t k C y l i n d e r S o u r c e ( ) #Source 5 mapper = v t k. vtkpolydatamapper ( ) # Mapper mapper. S e t I n p u t ( c y l i n d e r. GetOutput ( ) ) 7 a c t o r = v t k. v t k A c t o r ( ) # Actor a c t o r. SetMapper ( mapper ) 9 r e n = v t k. v t k R e n d e r e r ( ) # R e n d e r e r 11 r e n. AddActor ( a c t o r ) renwin = v t k. vtkrenderwindow ( ) # RendererWindow 13 renwin. AddRenderer ( r e n ) 15 i r e n = v t k. v t k R e n d e r W i n d o w I n t e r a c t o r ( ) # I n t e r a c t o r i r e n. SetRenderWindow ( renwin ) 17 i r e n. I n i t i a l i z e ( ) 19 renwin. Render ( ) i r e n. S t a r t ( ) 21 d e l renwin, i r e n Modélisation avec VTK 5 / 25
Première Scène avec Vtk Exemple d options : # C y l i n d e r 2 c y l i n d e r. S e t C e n t e r ( i n t, i n t, i n t ) c y l i n d e r. S e t R a d i u s ( f l o a t ) 4 c y l i n d e r. S e t H e i g h t ( f l o a t ) c y l i n d e r. S e t R e s o l u t i o n ( i n t ) 6 # Actor 8 a c t o r. G e t P r o p e r t y ( ). S e t C o l o r ( i n t, i n t, i n t ) # RGB v a l u e s Modélisation avec VTK 6 / 25
Première Scène avec Vtk Au lieu d utiliser un interactor, on peut créer une animation automatique : 1 f o r i i n r a n g e ( 9 0 ) : time. s l e e p ( 0. 0 3 ) 3 renwin. Render ( ) r e n. GetActiveCamera ( ). E l e v a t i o n ( 1 ) Modélisation avec VTK 7 / 25
1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK 8 / 25
Principe Isosurface Analogue en 3D d une courbe de niveau en 2D. C est l ensemble des points de l image dont le niveau de gris est constant. Modélisation avec VTK 9 / 25
Marching Cubes Intérêt Permet de construire une surface triangulée à partir d un champ scalaire discret. Isosurface à 100 : Modélisation avec VTK 10 / 25
Exemple d isosurface Modélisation avec VTK 11 / 25
Code VTK 1 i m p o r t v t k 3 # L e c t u r e des images r e a d e r=v t k. v t k S t r u c t u r e d P o i n t s R e a d e r ( ) 5 r e a d e r. SetFileName ( " chemin_vers_donnees /mummy. 1 2 8. v t k " ) 7 # C r e a t i o n de l i s o s u r f a c e contour_bone=v t k. v t k C o n t o u r F i l t e r ( ) 9 contour_bone. S e t I n p u t ( r e a d e r. GetOutput ( ) ) contour_ bone. SetNumberOfContours ( 1 ) 11 contour_bone. S e t V a l u e ( 0, 1 1 0 ) 13 # Look Up Table lut_bone=v t k. vtklookuptable ( ) 15 lut_bone. SetNumberOfColors ( 2 5 6 ) lut_bone. SetTableRange ( 0, 2 5 5 ) 17 lut_bone. SetHueRange ( 0. 0, 0. 5 ) # T e i n t e de l a c o u l e u r lut_bone. S e t S a t u r a t i o n R a n g e ( 0. 5, 1 ) # I n t e n s i t e de l a c o u l e u r 19 lut_bone. SetValueRange ( 0. 5, 1. 0 ) # B r i l l a n c e de l a c o u l e u r lut_bone. SetAlphaRange ( 1, 1 ) # T r a n s p a r e n c e Modélisation avec VTK 12 / 25
Code VTK # C r e a t i o n du Mapper e t A c t e u r 2 mapper_bone=v t k. vtkpolydatamapper ( ) mapper_bone. S e t I n p u t ( contour_bone. GetOutput ( ) ) 4 mapper_bone. SetLookupTable ( lut_ bone ) 6 actor_bone=v t k. v t k A c t o r ( ) actor_ bone. SetMapper ( mapper_bone ) 8 # C r e a t i o n du R e n d e r e r e t RenderWindow 10 r e n=v t k. v t k R e n d e r e r ( ) r e n. AddActor ( actor_bone ) 12 r e n. SetBackground ( 1, 1, 1 ) renwin=v t k. vtkrenderwindow ( ) 14 renwin. AddRenderer ( r e n ) renwin. S e t S i z e ( 5 1 2, 5 1 2 ) 16 # R e n d e r e r i n t e r a c t i f 18 i r e n=v t k. v t k R e n d e r W i n d o w I n t e r a c t o r ( ) i r e n. SetRenderWindow ( renwin ) 20 i r e n. S t a r t ( ) Modélisation avec VTK 13 / 25
1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK 14 / 25
Principe Contrairement au rendu surfacique qui visualise une partie du volume, le rendu volumique permet d afficher le contenu d une image dense en 3 dimensions. Modélisation avec VTK 15 / 25
Rendu volumique par Lancer de Rayons simplifié Problèmes : Définir un niveau de gris associé à chaque rayon r : V(r) Représenter visuellement le pixel p associé à chaque rayon r (Couleur, Opacité) Modélisation avec VTK 16 / 25
Rendu volumique par Lancer de Rayons A chaque rayon r est associé le niveau de gris V(r). Exemples de fonctions V(r) : Maximum Intensity Projection (MIP) : V (r) = max I(s) p Composite : V (r) = s r s r I(s)ds Modélisation avec VTK 17 / 25
Fonctions de transfert Association d une couleur C(p) et d une opacité O(p) à chaque niveau de gris V(r) afin de représenter p sur l image 2D. Fonctions de transfert Fonction de transfert d opacité : O(p) = Ft op (V (r)) Fonction de transfert de couleur : C(p) = Ft c (V (r)) Modélisation avec VTK 18 / 25
Exemple de fonctions de transfert Fonction de transfert d opacité : Fonction de transfert de couleur : Modélisation avec VTK 19 / 25
Exemple de rendus Rendu par MIP : Rendu Composite : Modélisation avec VTK 20 / 25
Code VTK i m p o r t v t k 2 # L e c t u r e de l image 4 r e a d e r=v t k. v t k S t r u c t u r e d P o i n t s R e a d e r ( ) r e a d e r. SetFileName ( " chemin_vers_donnees /mummy. 1 2 8. v t k " ) 6 # Type de rendu 8 MIPFunction=v t k. vtkvolumeraycastmipfunction ( ) 10 # Mapper volumemapper=v t k. vtkvolumeraycastmapper ( ) 12 volumemapper. S e t I n p u t ( r e a d e r. GetOutput ( ) ) volumemapper. SetVolumeRayCastFunction ( MIPFunction ) 14 # Ac teu r 16 volume=v t k. vtkvolume ( ) volume. SetMapper ( volumemapper ) Modélisation avec VTK 21 / 25
Code VTK 1 # F o n c t i o n de t r a n s f e r t d o p a c i t e du g r a d i e n t g r a d i e n t T r a n s f e r F u n c t i o n=v t k. v t k P i e c e w i s e F u n c t i o n ( ) 3 g r a d i e n t T r a n s f e r F u n c t i o n. AddPoint ( 0, 0 ) g r a d i e n t T r a n s f e r F u n c t i o n. AddPoint ( 2 0, 1 ) 5 g r a d i e n t T r a n s f e r F u n c t i o n. AddPoint ( 2 5 5, 1 ) 7 # F o n c t i o n de t r a n s f e r t d o p a c i t e o p a c i t y T r a n s f e r F u n c t i o n=v t k. v t k P i e c e w i s e F u n c t i o n ( ) 9 o p a c i t y T r a n s f e r F u n c t i o n. AddPoint ( 0, 0 ) o p a c i t y T r a n s f e r F u n c t i o n. AddPoint ( 2 5 5, 1 ) 11 # F o n c t i o n de t r a n s f e r t de c o u l e u r 13 c o l o r T r a n s f e r F u n c t i o n=v t k. v t k C o l o r T r a n s f e r F u n c t i o n ( ) c o l o r T r a n s f e r F u n c t i o n. AddRGBPoint ( 7 5. 0, 1, 0, 0 ) 15 c o l o r T r a n s f e r F u n c t i o n. AddRGBPoint ( 2 5 5. 0, 0, 0, 1 ) Modélisation avec VTK 22 / 25
Code VTK v o l u m e P r o p e r t y=v t k. v t k V o l u m e P r o p e r t y ( ) 2 v o l u m e P r o p e r t y. S e t S c a l a r O p a c i t y ( o p a c i t y T r a n s f e r F u n c t i o n ) v o l u m e P r o p e r t y. S e t C o l o r ( c o l o r T r a n s f e r F u n c t i o n ) 4 v o l u m e P r o p e r t y. S e t G r a d i e n t O p a c i t y ( g r a d i e n t T r a n s f e r F u n c t i o n ) volume. S e t P r o p e r t y ( v o l u m e P r o p e r t y ) 6 8 # R e n d e r e r e t R e n d e r e r Window r e n=v t k. v t k R e n d e r e r ( ) 10 r e n. AddViewProp ( volume ) r e n. SetBackground ( 1, 1, 1 ) 12 renwin=v t k. vtkrenderwindow ( ) 14 renwin. AddRenderer ( r e n ) renwin. S e t S i z e ( 5 1 2, 5 1 2 ) Modélisation avec VTK 23 / 25
Ajout de l opacité du gradient Modélisation avec VTK 24 / 25
Code VTK 1 i m p o r t v t k 3 # L e c t u r e de l image r e a d e r=v t k. v t k S t r u c t u r e d P o i n t s R e a d e r ( ) 5 r e a d e r. SetFileName ( " chemin_vers_donnees /mummy. 1 2 8. v t k " ) 7 # Type de rendu MIPFunction=v t k. vtkvolumeraycastmipfunction ( ) 9 # Mapper 11 volumemapper=v t k. vtkvolumeraycastmapper ( ) volumemapper. S e t I n p u t ( r e a d e r. GetOutput ( ) ) 13 volumemapper. SetVolumeRayCastFunction ( MIPFunction ) 15 # Ac teu r volume=v t k. vtkvolume ( ) 17 volume. SetMapper ( volumemapper ) Modélisation avec VTK 25 / 25