Modélisation avec 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
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