Modélisation avec VTK - odyssee-merveille.com · IntroductionIsosurfaceRendu Volumique VTK...

Post on 02-Nov-2018

230 views 0 download

Transcript of Modélisation avec VTK - odyssee-merveille.com · IntroductionIsosurfaceRendu Volumique VTK...

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 Rendu Volumique

1 Introduction

2 Isosurface

3 Rendu Volumique

Modélisation avec VTK 3 / 25

Introduction Isosurface Rendu Volumique

VTK

VTK (Visualisation Toolkit) est une librairie open-source créée parKitware permettant la visualisation de données 2D/3D. Elle est écrite enC++ 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 Vtk1 impor t v tk

3 c y l i n d e r = vtk . v t k C y l i n d e r S o u r c e ( ) #Source

5 mapper = vtk . vtkPolyDataMapper ( ) # Mappermapper . S e t I n p u t ( c y l i n d e r . GetOutput ( ) )

7 a c t o r = vtk . v tkAc to r ( ) # Actora c t o r . SetMapper ( mapper )

9r en = vtk . v t k R e n d e r e r ( ) # Rendere r

11 r en . AddActor ( a c t o r )renWin = vtk . vtkRenderWindow ( ) # RendererWindow

13 renWin . AddRenderer ( r en )

15 i r e n = vtk . v tkRende rWindowIn te rac to r ( ) # I n t e r a c t o ri r e n . SetRenderWindow ( renWin )

17i 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

Introduction Isosurface Rendu Volumique

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 . Se tCen te r ( i n t , i n t , i n t )c y l i n d e r . Se tRad iu s ( f l o a t )

4 c y l i n d e r . Se tHe igh 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 . Ge tPrope r ty ( ) . 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 animationautomatique :

1 f o r i i n range (90) :t ime . s l e e p ( 0 . 0 3 )

3 renWin . Render ( )r en . GetAct iveCamera ( ) . E l e v a t i o n (1 )

Modélisation avec VTK 7 / 25

Introduction Isosurface Rendu Volumique

1 Introduction

2 Isosurface

3 Rendu Volumique

Modélisation avec VTK 8 / 25

Introduction Isosurface Rendu Volumique

Principe

IsosurfaceAnalogue 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êtPermet de construire une surface triangulée à partir d’un champ scalairediscret.

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 impor t v tk

3 #−−−−−−−−−−−−−−− L e c t u r e des images −−−−−−−−−−−−−−−−−−−−−−−−r e a d e r=vtk . 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 . SetF i leName ( " chemin_vers_donnees /mummy. 1 2 8 . v tk " )

7 # −−−−−−−−−−−−−− C r e a t i o n de l ’ i s o s u r f a c e −−−−−−−−−−−−−−−−−−contour_bone=vtk . 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 . SetVa lue (0 ,110)

13 # −−−−−−−−−−−−−−− Look Up Table −−−−−−−−−−−−−−−−−−−−−−−−−−−−l u t_bone=vtk . vtkLookupTable ( )

15 l u t_bone . SetNumberOfColors (256)lut_bone . SetTableRange (0 ,255)

17 l u t_bone . SetHueRange ( 0 . 0 , 0 . 5 ) # Te in t e de l a c o u l e u rlut_bone . Se tSa tu ra t i onRange ( 0 . 5 , 1 ) # I n t e n s i t e de l a c o u l e u r

19 l u t_bone . SetValueRange ( 0 . 5 , 1 . 0 ) # B r i l l a n c e de l a c o u l e u rlut_bone . SetAlphaRange ( 1 , 1 ) # Transpa rence

Modélisation avec VTK 12 / 25

Introduction Isosurface Rendu Volumique

Code VTK

# −−−−−−−−−−−−−−−− C r e a t i o n du Mapper e t Acteur −−−−−−−−−−−−2 mapper_bone=vtk . vtkPolyDataMapper ( )

mapper_bone . S e t I n p u t ( contour_bone . GetOutput ( ) )4 mapper_bone . SetLookupTable ( lut_bone )

6 actor_bone=vtk . v tkAc to r ( )actor_bone . SetMapper ( mapper_bone )

8# −−−−−−−−−−− C r e a t i o n du Rende re r e t RenderWindow −−−−−−−−−

10 r en=vtk . v t k R e n d e r e r ( )r en . AddActor ( actor_bone )

12 r en . SetBackground ( 1 , 1 , 1 )renWin=vtk . vtkRenderWindow ( )

14 renWin . AddRenderer ( r en )renWin . S e t S i z e (512 ,512)

16# −−−−−−−−−−−−−−− Rendere r i n t e r a c t i f −−−−−−−−−−−−−−−−−−−−−

18 i r e n=vtk . v tkRende rWindowIn te rac to r ( )i r e n . SetRenderWindow ( renWin )

20i r e n . S t a r t ( )

Modélisation avec VTK 13 / 25

Introduction Isosurface Rendu Volumique

1 Introduction

2 Isosurface

3 Rendu Volumique

Modélisation avec VTK 14 / 25

Introduction Isosurface Rendu Volumique

Principe

Contrairement au rendu surfacique qui visualise une partie du volume, lerendu volumique permet d’afficher le contenu d’une image dense en 3dimensions.

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 niveaude gris V(r).

Exemples de fonctions V(r) :Maximum Intensity Projection (MIP) :

V (r) = maxp

I(s) s ∈ r

Composite :

V (r) =∫

s∈rI(s)ds

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 degris V(r) afin de représenter p sur l’image 2D.

Fonctions de transfertFonction 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é : Fonction de transfert de couleur :

Modélisation avec VTK 19 / 25

Introduction Isosurface Rendu Volumique

Exemple de rendus

Rendu par MIP : Rendu Composite :

Modélisation avec VTK 20 / 25

Introduction Isosurface Rendu Volumique

Code VTK

impor t v tk2

# −−−−−−−−−−−−−−− L e c t u r e de l ’ image −−−−−−−−−−−−−−−−−−−4 r e a d e r=vtk . 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 . SetF i leName ( " chemin_vers_donnees /mummy. 1 2 8 . v tk " )6

# −−−−−−−−−−−−−−− Type de rendu −−−−−−−−−−−−−−−−−−−−−−−−8 MIPFunction=vtk . vtkVolumeRayCastMIPFunct ion ( )

10 # −−−−−−−−−−−−−−− Mapper −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−volumeMapper=vtk . vtkVolumeRayCastMapper ( )

12 volumeMapper . S e t I n p u t ( r e a d e r . GetOutput ( ) )volumeMapper . SetVolumeRayCastFunct ion ( MIPFunction )

14# −−−−−−−−−−−−−−− Acteur −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

16 volume=vtk . vtkVolume ( )volume . SetMapper ( volumeMapper )

Modélisation avec VTK 21 / 25

Introduction Isosurface Rendu Volumique

Code VTK

1 # −−−−−−−−−−−−−−− Fonc t i on de t r a n s f e r t d ’ o p a c i t e dug 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=vtk . 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 (20 ,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 (255 ,1 )

7 # −−−−−−−−−−−−−−− Fonc t i on 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=vtk . 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 (255 ,1 )

11# −−−−−−−−−−−−−−− Fonc t i on 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=vtk . 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

Introduction Isosurface Rendu Volumique

Code VTK

vo lumePrope r ty=vtk . v tkVo lumeProper ty ( )2 vo lumePrope r ty . 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 )

vo lumePrope r ty . 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 vo lumePrope r ty . 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 ( vo lumePrope r ty )6

8 # −−−−−−−−−−−−−−− Rendere r e t Rende re r Window −−−−−−−−−−r en=vtk . v t k R e n d e r e r ( )

10 r en . AddViewProp ( volume )ren . SetBackground ( 1 , 1 , 1 )

12renWin=vtk . vtkRenderWindow ( )

14 renWin . AddRenderer ( r en )renWin . S e t S i z e (512 ,512)

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 impor t v tk

3 # −−−−−−−−−−−−−−− L e c t u r e de l ’ image −−−−−−−−−−−−−−−−−−−r e a d e r=vtk . 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 . SetF i leName ( " chemin_vers_donnees /mummy. 1 2 8 . v tk " )

7 # −−−−−−−−−−−−−−− Type de rendu −−−−−−−−−−−−−−−−−−−−−−−−MIPFunction=vtk . vtkVolumeRayCastMIPFunct ion ( )

9# −−−−−−−−−−−−−−− Mapper −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

11 volumeMapper=vtk . vtkVolumeRayCastMapper ( )volumeMapper . S e t I n p u t ( r e a d e r . GetOutput ( ) )

13 volumeMapper . SetVolumeRayCastFunct ion ( MIPFunction )

15 # −−−−−−−−−−−−−−− Acteur −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−volume=vtk . vtkVolume ( )

17 volume . SetMapper ( volumeMapper )

Modélisation avec VTK 25 / 25