Modélisation avec VTK Odyssée Merveille et Hugues Talbot 8 octobre 2014 Introduction Isosurface Rendu Volumique Sommaire 1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK 2 / 25 Introduction Isosurface 1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK Rendu Volumique 3 / 25 Introduction Isosurface Rendu Volumique 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 Introduction Isosurface Rendu Volumique Première Scène avec Vtk 1 import vtk 3 c y l i n d e r = vtk . vtkCylinderSource () #S o u r c e 5 mapper = v t k . v t k P o l y D a t a M a p p e r ( ) mapper . S e t I n p u t ( c y l i n d e r . GetOutput ( ) ) actor = vtk . vtkActor () a c t o r . SetMapper ( mapper ) # Mapper ren = vtk . vtkRenderer () r e n . AddActor ( a c t o r ) renWin = v t k . vtkRenderWindow ( ) renWin . A d d R e n d e r e r ( r e n ) # Renderer 7 # Actor 9 11 13 15 # RendererWindow i r e n = vtk . vtkRenderWindowInteractor () # I n t e r a c t o r i r e n . SetRenderWindow ( renWin ) 17 19 21 iren . I n i t i a l i z e () renWin . R e n d e r ( ) iren . Start () d e l renWin , i r e n Modélisation avec VTK 5 / 25 Introduction Isosurface Rendu Volumique Première Scène avec Vtk Exemple d’options : 2 4 # Cylinder c y l i n d e r . SetCenter ( int , int , i n t ) c y l i n d e r . SetRadius ( f l o a t ) c y l i n d e r . SetHeight ( f l o a t ) cylinder . SetResolution ( int ) 6 8 # Actor 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 Introduction Isosurface Rendu Volumique Première Scène avec Vtk Au lieu d’utiliser un interactor, on peut créer une animation automatique : 1 3 for i in range (90) : time . s l e e p ( 0 . 0 3 ) renWin . R e n d e r ( ) ren . GetActiveCamera () . E l e v a t i o n (1) Modélisation avec VTK 7 / 25 Introduction Isosurface 1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK Rendu Volumique 8 / 25 Introduction Isosurface Rendu Volumique 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 Introduction Isosurface Rendu Volumique 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 Introduction Isosurface Rendu Volumique Exemple d’isosurface Modélisation avec VTK 11 / 25 Introduction Isosurface Rendu Volumique Code VTK 1 import vtk 3 #−−−−−−−−−−−−−−− L e c t u r e d e s i m a g e s −−−−−−−−−−−−−−−−−−−−−−−− 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 . S e t F i l e N a m e ( " c h e m i n _ v e r s _ d o n n e e s /mummy . 1 2 8 . v t k " ) 5 7 9 11 13 15 17 19 # −−−−−−−−−−−−−− C r e a t i o n de l ’ i s o s u r f a c e −−−−−−−−−−−−−−−−−− c o n t o u r _ b o n e=v t k . v t k C o n t o u r F i l t e r ( ) c o n t o u r _ b o n e . S e t I n p u t ( r e a d e r . GetOutput ( ) ) contour_bone . SetNumberOfContours ( 1 ) contour_bone . SetValue (0 ,110) # −−−−−−−−−−−−−−− Look Up T a b l e −−−−−−−−−−−−−−−−−−−−−−−−−−−− l u t _ b o n e=v t k . v t k L o o k u p T a b l e ( ) lut_bone . SetNumberOfColors (256) lut_bone . SetTableRange (0 ,255) l u t _ b o n e . SetHueRange ( 0 . 0 , 0 . 5 ) # T e i n t e de l a c o u l e u r l u t _ b o n e . 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 l u t _ b o n e . S e t V a l u e R a n g e ( 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 ) # Transparence Modélisation avec VTK 12 / 25 Introduction Isosurface Rendu Volumique Code VTK 2 4 6 # −−−−−−−−−−−−−−−− C r e a t i o n du Mapper e t A c t e u r −−−−−−−−−−−− mapper_bone=v t k . v t k P o l y D a t a M a p p e r ( ) mapper_bone . S e t I n p u t ( c o n t o u r _ b o n e . GetOutput ( ) ) mapper_bone . S e t L o o k u p T a b l e ( l u t _ b o n e ) a c t o r _ b o n e=v t k . v t k A c t o r ( ) a c t o r _ b o n e . SetMapper ( mapper_bone ) 8 10 12 14 # −−−−−−−−−−− C r e a t i o n du R e n d e r e r e t RenderWindow −−−−−−−−− r e n=v t k . v t k R e n d e r e r ( ) r e n . AddActor ( a c t o r _ b o n e ) ren . SetBackground ( 1 , 1 , 1 ) renWin=v t k . vtkRenderWindow ( ) renWin . A d d R e n d e r e r ( r e n ) renWin . S e t S i z e ( 5 1 2 , 5 1 2 ) 16 18 # −−−−−−−−−−−−−−− R e n d e r e r i n t e r a c t i f −−−−−−−−−−−−−−−−−−−−− 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 iren . Start () Modélisation avec VTK 13 / 25 Introduction Isosurface 1 Introduction 2 Isosurface 3 Rendu Volumique Modélisation avec VTK Rendu Volumique 14 / 25 Introduction Isosurface Rendu Volumique 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 Introduction Isosurface Rendu Volumique 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 Introduction Isosurface Rendu Volumique 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) s ∈ r p Composite : V (r ) = I(s)ds s∈r Modélisation avec VTK 17 / 25 Introduction Isosurface Rendu Volumique 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) = Ftop (V (r )) Fonction de transfert de couleur : C (p) = Ftc (V (r )) Modélisation avec VTK 18 / 25 Introduction Isosurface Rendu Volumique Exemple de fonctions de transfert Fonction de transfert d’opacité : Modélisation avec VTK Fonction de transfert de couleur : 19 / 25 Introduction Isosurface Rendu Volumique Exemple de rendus Rendu par MIP : Modélisation avec VTK Rendu Composite : 20 / 25 Introduction Isosurface Rendu Volumique Code VTK import vtk 2 4 # −−−−−−−−−−−−−−− 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 ( ) r e a d e r . S e t F i l e N a m e ( " c h e m i n _ v e r s _ d o n n e e s /mummy . 1 2 8 . v t k " ) 6 8 10 12 # −−−−−−−−−−−−−−− Type de r e n d u −−−−−−−−−−−−−−−−−−−−−−−− M I P F u n c t i o n=v t k . v t k V o l u m e R a y C a s t M I P F u n c t i o n ( ) # −−−−−−−−−−−−−−− Mapper −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− volumeMapper=v t k . vtkVolumeRayCastMapper ( ) volumeMapper . S e t I n p u t ( r e a d e r . GetOutput ( ) ) volumeMapper . S e t V o l u m e R a y C a s t F u n c t i o n ( M I P F u n c t i o n ) 14 16 # −−−−−−−−−−−−−−− A c t e u r −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− volume=v t k . vtkVolume ( ) volume . SetMapper ( volumeMapper ) Modélisation avec VTK 21 / 25 Introduction Isosurface Rendu Volumique Code VTK 1 3 5 7 9 # −−−−−−−−−−−−−−− 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 ( ) g r a d i e n t T r a n s f e r F u n c t i o n . A d d P oi n t ( 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 . A d d P oi n t ( 2 0 , 1 ) g r a d i e n t T r a n s f e r F u n c t i o n . A d d P oi n t ( 2 5 5 , 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 −−−−−− 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 ( ) o p a c i t y T r a n s f e r F u n c t i o n . A dd P o i n t ( 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 . A dd P o i n t ( 2 5 5 , 1 ) 11 13 15 # −−−−−−−−−−−−−−− 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 −−−−− 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 ) 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 Introduction Isosurface Rendu Volumique Code VTK 2 4 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 ( ) volumeProperty . SetScalarOpacity ( opacityTransferFunction ) volumeProperty . SetColor ( colorTransferFunction ) volumeProperty . SetGradientOpacity ( gradientTransferFunction ) 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 10 # −−−−−−−−−−−−−−− 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 ( ) r e n . AddViewProp ( volume ) ren . SetBackground ( 1 , 1 , 1 ) 12 14 renWin=v t k . vtkRenderWindow ( ) renWin . A d d R e n d e r e r ( r e n ) renWin . S e t S i z e ( 5 1 2 , 5 1 2 ) Modélisation avec VTK 23 / 25 Introduction Isosurface Rendu Volumique Ajout de l’opacité du gradient Modélisation avec VTK 24 / 25 Introduction Isosurface Rendu Volumique Code VTK 1 import vtk 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 ( ) r e a d e r . S e t F i l e N a m e ( " c h e m i n _ v e r s _ d o n n e e s /mummy . 1 2 8 . v t k " ) 5 7 # −−−−−−−−−−−−−−− Type de r e n d u −−−−−−−−−−−−−−−−−−−−−−−− M I P F u n c t i o n=v t k . v t k V o l u m e R a y C a s t M I P F u n c t i o n ( ) 9 11 13 15 17 # −−−−−−−−−−−−−−− Mapper −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− volumeMapper=v t k . vtkVolumeRayCastMapper ( ) volumeMapper . S e t I n p u t ( r e a d e r . GetOutput ( ) ) volumeMapper . S e t V o l u m e R a y C a s t F u n c t i o n ( M I P F u n c t i o n ) # −−−−−−−−−−−−−−− A c t e u r −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− volume=v t k . vtkVolume ( ) volume . SetMapper ( volumeMapper ) Modélisation avec VTK 25 / 25
© Copyright 2024 ExpyDoc