URL: https://linuxfr.org/news/vtk-la-visualisation-scientifique-et-au-dela Title: VTK : la visualisation scientifique et au delĂ  ! Authors: mzf Ysabeau đŸ§¶, BenoĂźt Sibaud, Pierre Jarillon et palm123 Date: 2021ćčŽ02月03æ—„T21:45:22+01:00 License: CC By-SA Tags: kitware, paraview, sciences, dataviz, imagerie_mĂ©dicale, vtk et visualisation Score: 121 VTK est une bibliothĂšque libre incontournable de la visualisation scientifique, pourtant peu citĂ©e sur LinuxFr. Rattrapons le retard ! ![Logo de VTK](https://mzf.fr/linuxfr/vtk_logo.png) [[VTK]] est en quelque sorte le couteau suisse de la visualisation scientifique. La suite de cet article vous donnera un aperçu de ses domaines d’utilisation en s’appuyant sur de nombreux exemples abondamment illustrĂ©s. ---- [Site officiel](https://vtk.org/) [Exemples](https://kitware.github.io/vtk-examples/site/) [Code source](https://gitlab.kitware.com/vtk/vtk) ---- # Visualisation Scientifique Le domaine d’application premier de [[VTK]] est la visualisation scientifique. C’est une discipline trĂšs large qui couvre les reprĂ©sentations possibles de donnĂ©es issues du domaine scientifique dans le but de les rendre interprĂ©tables par des humains : * rĂ©sultats de simulations : mĂ©tĂ©o, astrophysique, fluides... ![source : wikimedia](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/YF-17_aircraft_Plot.jpg/240px-YF-17_aircraft_Plot.jpg) * mesures venant de capteurs : imagerie mĂ©dicale, inspection des sols... ![Tomographie par Ă©mission monophotonique d’une souris, source : wikimedia](https://upload.wikimedia.org/wikipedia/commons/f/fe/Mouse02-spect.gif) * donnĂ©es créées ex-nihilo : Ă©quation mathĂ©matique, donnĂ©es historiques ou gĂ©ographiques... ![source : wikimedia](https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Snow-cholera-map-1.jpg/512px-Snow-cholera-map-1.jpg) Une particularitĂ© de cette visualisation est de rendre les donnĂ©es comprĂ©hensibles pour l’utilisateur dans un but d’analyse. Être capable de reprĂ©senter ces donnĂ©es d’une façon simple est en gĂ©nĂ©ral assez complexe ! Elles doivent ĂȘtre transformĂ©es, simplifiĂ©es, projetĂ©es sur des primitives gĂ©omĂ©triques (points, lignes, surfaces, etc.), colorĂ©es, combinĂ©es, superposĂ©es, etc. De plus ces donnĂ©es sont souvent brutes et peuvent ĂȘtre de taille considĂ©rable, de l’ordre du gigaoctet ou du tĂ©raoctet, et nĂ©cessitent en gĂ©nĂ©ral plusieurs traitements lourds pour en extraire des informations pertinentes pour l’observateur. Pour des questions de performance ces transformations doivent pouvoir s’exĂ©cuter en parallĂšle en utilisant un maximum de ressources disponibles : CPU, GPU, grappe de serveurs, etc. En 1993, seuls quelques logiciels propriĂ©taires Ă©taient capables de rĂ©pondre Ă  toutes ces contraintes. Comme nous allons le voir par la suite, la publication de VTK sous une licence libre, donc gratuite, lui a permis de devenir rapidement une solution de rĂ©fĂ©rence pour des utilisateurs assez divers. # Historique VTK est l’acronyme de *Visualization Toolkit*, soit littĂ©ralement *boĂźte Ă  outils de visualisation* en français. Cette bibliothĂšque est Ă  l’origine un logiciel accompagnant le livre [The Visualization Toolkit: An Object-Oriented Approach to 3D Graphics](https://vtk.org/documentation/#textbook) Ă©crit par trois chercheurs, Will Schroeder, Ken Martin et Bill Lorensen, travaillant Ă  l’époque, en 1993, chez General Electric R&D. Leur propos Ă©tait de collaborer avec d’autres chercheurs et de dĂ©velopper des outils communs pour crĂ©er des applications avancĂ©es de visualisation de donnĂ©es. Leur employeur les autorisa Ă  publier ce livre Ă©crit sur leur temps libre ainsi que le code source sous une licence libre. ![VTK text book](https://mzf.fr/linuxfr/vtk_textbook_cover.jpg) Au dĂ©but utilisĂ© principalement en interne par General Electric pour le domaine mĂ©dical, la bibliothĂšque rencontra rapidement du succĂšs dans l’univers de la recherche scientifique. Ceci amena deux des auteurs du livre Ă  crĂ©er la sociĂ©tĂ© [Kitware](https://www.kitware.com) en 1998 pour rĂ©pondre aux demandes des utilisateurs et contributeurs que ce soit des laboratoires de recherche ou des entreprises. Au cours de son dĂ©veloppement, les applications utilisant VTK se sont diversifiĂ©es comme le traitement d’image, la vision par ordinateur ou l’analyse de donnĂ©es. Le livre en est aujourd’hui Ă  sa quatriĂšme Ă©dition, et VTK est en version 9.0 avec une version majeure tous les 2 Ă  3 ans. Cette derniĂšre version amĂšne de [nombreuses nouveautĂ©s](https://discourse.vtk.org/t/vtk-9-0-0/3205), dont les plus visibles sont : * rendu physique rĂ©aliste, comparaison entre un matĂ©riau non mĂ©tallique Ă  gauche et un autre mĂ©tallique Ă  droite ![](https://discourse.vtk.org/uploads/default/optimized/2X/4/44d1a765efe99daef8fc75c9357ed628bfa21829_2_454x318.png) * l’occlusion ambiante, qui amĂ©liore la perception de profondeur ![](https://discourse.vtk.org/uploads/default/optimized/2X/a/abedc4c3d6a0de8a7985bc6402a09dbda3744bcf_2_477x287.png) * Ă©lĂ©ments de maillage de type BĂ©zier ![](https://discourse.vtk.org/uploads/default/optimized/2X/5/5c23a2b5142e99b3b37f8d83e2cc9a0b810fec8e_2_435x279.png) Ces nouvelles fonctionnalitĂ©s permettent des rendus rĂ©alistes modernes comme vous pouvez le constater parcourant la [chaĂźne vidĂ©o de Kitware](https://vimeo.com/kitware) : [![Theatre Simulation Video](https://mzf.fr/linuxfr/vtk_vimeo_theater_resized.jpg)](https://vimeo.com/473470991) [![Singapore Test Case Video](https://mzf.fr/linuxfr/vtk_vimeo_theater2_resized.jpg)](https://vimeo.com/473470865) [![Satellite Intercept Video](https://mzf.fr/linuxfr/vtk_vimeo_satellite_resized.jpg)](https://vimeo.com/473470813) # Kitware Petite parenthĂšse sur Kitware, cette entreprise assez particuliĂšre qui dĂ©veloppe VTK. ![Logo de Kitware](https://mzf.fr/linuxfr/kitware_logo.png) Vous connaissez peut-ĂȘtre dĂ©jĂ  Kitware pour ses nombreux autres logiciels libres : [CMake](https://cmake.org/), [CDash](https://www.cdash.org/), [ITK](https://itk.org), [Paraview](https://www.paraview.org/)... qui naviguent tous autour de l’univers de la visualisation et du dĂ©veloppement logiciel de grande ampleur. Kitware est une sociĂ©tĂ© amĂ©ricaine, avec une succursale Ă  Lyon en France, d’environ 150 personnes qui dĂ©veloppe les outils sus-citĂ© et en propose la maintenance ainsi que des formations et des dĂ©veloppements spĂ©cifiques. Fait rare, son *CEO*, [Lisa Avila](https://www.kitware.com/lisa-avila), est une femme et [l’équipe dirigeante](https://www.kitware.com/leadership-management/) est aussi partiellement fĂ©minine. Autre point positif, l’entreprise est dĂ©tenue Ă  100% par ses employĂ©s [depuis peu](https://blog.kitware.com/kitware-becomes-100-percent-employee-owned/). D’ailleurs dans un [article rĂ©cent](https://www.bizjournals.com/albany/news/2020/10/13/kitware-growing-software-development-talent.html) on apprend que l’entreprise a du mal Ă  recruter. Les profils recherchĂ©s, techniquement pointus, amĂšnent Kitware Ă  rentrer en concurrence avec les gĂ©ants amĂ©ricains de l’informatique comme Google ou Amazon. Comme beaucoup d’entreprises qui dĂ©veloppent des logiciels libres, le modĂšle Ă©conomique de Kitware semble ĂȘtre un mĂ©lange entre du dĂ©veloppement spĂ©cifique de niche autour de leurs outils, et de la formation couplĂ© Ă  de la maintenance pour utilisateurs avancĂ©s. De plus, en parcourant leur blog on peut constater que Kitware participe Ă  beaucoup de projets de recherche amĂ©ricains et europĂ©ens. Comme l’explique Lisa Avila dans cet [article](https://www.saratoga.com/saratogabusinessjournal/2019/10/lisa-avila-moves-from-ge-research-unit-to-help-form-kitware-inc-in-clifton-park/), chaque client a des besoins trĂšs spĂ©cifiques ce qui demande beaucoup d’accompagnement commercial avec un suivi financier efficace pour garantir la pĂ©rennitĂ© des projets de recherche. # Principes de fonctionnement de VTK Passons Ă  la technique ! Le cƓur de VTK est dĂ©veloppĂ© en C++, mais il existe de nombreux portages et il est ainsi possible de s’en servir en Tcl, Python, Jupyter (via [Paraview Jupyter Kernel](https://blog.kitware.com/paraview-jupyter-notebook/)), Visual Basic, C# (via [ActiViz](https://www.kitware.eu/activiz/)), Java, Javascript (via [vtk.js](https://blog.kitware.com/vtk-js-the-visualization-toolkit-on-the-web/)), Unity... et j’en oublie sĂ»rement ! VTK utilise la [programmation orientĂ©e objet](https://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet), c’est-Ă -dire que chaque concept ou action est reprĂ©sentĂ©e par un *objet*. Un objet regroupe les donnĂ©es spĂ©cifiques Ă  sa tĂąche et des actions qui peuvent s’appliquer sur ces donnĂ©es, tout en interdisant le reste du programme d’y accĂ©der. C’est le principe de [l’encapsulation](https://fr.wikipedia.org/wiki/Encapsulation_(programmation)), trĂšs populaire dans les langages C++, Java, C#... À noter que VTK dĂ©fini aussi son [propre format de stockage de donnĂ©e](https://kitware.github.io/vtk-examples/site/VTKFileFormats/) dont les fichiers ont en gĂ©nĂ©ral l’extension *.vtk* ou l’une de ses variantes (*vtu*, *vti*, *vtp*...). Avec le temps, le format a Ă©voluĂ© et on trouve aujourd’hui Ă  la fois l’ancienne version texte brut, aujourd’hui obsolĂšte, ou la version plus moderne en XML. Cette derniĂšre peut contenir des donnĂ©es binaires en plus des balises XML, ce qui permet d’accĂ©lĂ©rer le chargement, ainsi que la possibilitĂ© de lecture et Ă©criture en parallĂšle de plusieurs sections d’un mĂȘme fichier. ## Pipeline VTK fonctionne en *pipeline* configurable. Cela signifie que les donnĂ©es vont subir plusieurs transformations ou actions jusqu’à leurs multiples reprĂ©sentations finales. En simplifiant, on peut dire VTK dĂ©fini deux familles d’objets : les objets de donnĂ©es et les objets de traitement sur celles-ci, appelĂ©s *process* en anglais. Il existe ainsi trois type de processus : * les sources qui ne prennent rien en entrĂ©e mais qui produisent une sortie ![illustation source](https://mzf.fr/linuxfr/vtk_processes_source.png) * les filtres qui acceptent des donnĂ©es en entrĂ©e et en produisent en sortie ![illustation file](https://mzf.fr/linuxfr/vtk_processes_filtre.png) * les puits (*sink* en anglais) qui ont besoin de donnĂ©es en entrĂ©e mais ne produisent rien en sortie. MĂȘme s’ils n’ont pas de flux de sortie au sens du *pipeline*, cela n’empĂȘche pas d’effectuer des actions d’entrĂ©e/sortie systĂšme comme de l’affichage ou l’écriture dans un fichier. ![illustation puit](https://mzf.fr/linuxfr/vtk_processes_puit.png) Notez que sur les illustrations ci-dessus, une seule flĂšche est reprĂ©sentĂ©e par simplification alors qu’un processus peut accepter et gĂ©nĂ©rer plusieurs donnĂ©es. Donc en combinant diffĂ©rents processus on obtient une succession d’étapes qui permettent Ă  partir d’une source de donnĂ©e brute d’arriver Ă  de multiples reprĂ©sentations graphiques. L’utilisation d’un *pipeline* permet aussi une mise jour automatique du rendu quand un paramĂštre change. Si la source change, tout doit ĂȘtre recalculĂ©, mais si seul un paramĂštre d’un filtre change, seules les Ă©tapes en aval seront mises Ă  jour. Il existe plusieurs centaines de filtres disponibles dans VTK, couvrant de nombreux besoins. Nous allons en voir quelques-uns dans les exemples suivants. # Quelques exemples ## Jouons avec une quadrique Exemple concret adaptĂ© du VTK TextBook, imaginons qu’on souhaite explorer la [quadrique](https://fr.wikipedia.org/wiki/Quadrique) suivante : $$F(x,y,z) = x^2 + 2*y^2 + 4*z^2 + 5*x*y + y*z$$ Notre fonction associe une valeur Ă  tout point de l’espace Ă  3 dimensions. Pour la reprĂ©senter nous allons gĂ©nĂ©rer et afficher des surfaces de niveau et des lignes de niveau, ce qui revient mathĂ©matiquement Ă  dessiner l’ensemble des points $(x,y,z)$ pour lesquels $F(x,y,z) = K$ avec $K$ une constante. Construisons notre *pipeline* qui doit contenir une source, des filtres et pour finir un systĂšme de rendu. PremiĂšre Ă©tape : la source, qui est de type *vtkQuadric*, un objet bien pratique qui reprĂ©sente une quadrique. On Ă©chantillonne cette source avec un *vtkSampleFunction* pour obtenir un ensemble discret de points, que l’on va ensuite passer dans un filtre de contour *vtkContourFilter* qui extrait des surfaces dont les points ont la mĂȘme valeur. À cette Ă©tape les surfaces ne sont que des objets mathĂ©matiques sans rĂ©alitĂ© physique. Il faut donc utiliser un *vtkPolyDataMapper* pour les associer Ă  des primitives graphiques dans le but de leur affichage. Dans notre cas ces primitives sont des triangles colorĂ©s en fonction de la valeur des points des diffĂ©rentes surfaces. DerniĂšre Ă©tape, il faut placer nos primitives dans la scĂšne 3D via un acteur *vtkActor* liĂ© Ă  la fenĂȘtre graphique, elle-mĂȘme combinaison de plusieurs objets : *vtkRenderer*, *vtkRenderWindow*, *vtkRenderWindowInteractor*... Le concept d’acteur permet d’ajouter des transformations spatiales (translation/rotation/homothĂ©tie/etc.) Ă  des primitives indĂ©pendamment de l’espace de rendu. Si on reprĂ©sente graphiquement notre *pipeline*, elle ressemble Ă  ça : ![iso surface pipeline](https://mzf.fr/linuxfr/vtk_isosurface_pipeline.png) Et le rĂ©sultat : ![Affichage des surfaces de niveau](https://mzf.fr/linuxfr/vtk_isosurface.png) On observe ainsi les diffĂ©rentes surfaces de niveau colorĂ©es. Complexifions maintenant en superposant d’autres visualisations de cette mĂȘme source. Pour extraire et afficher des lignes de niveau sur plusieurs plans, nous allons utiliser un extracteur de volume *vtkExtractVOI* qui permet de travailler sur un sous-ensemble d’échantillons. Dans notre cas ces Ă©chantillons seront situĂ©s sur un plan. La suite est similaire Ă  la visualisation prĂ©cĂ©dente en utilisant un filtre de contour qui va cette fois-ci extraire des segments au lieu des surfaces. Les primitives graphiques vont ainsi ĂȘtre des lignes et on utilisera aussi un acteur *vtkActor* pour placer le dessin dans la mĂȘme fenĂȘtre de rendu. Dans la reprĂ©sentation graphique du *pipeline*, on trouve ainsi deux branches qui partent de la mĂȘme source et finissent dans la mĂȘme scĂšne de rendu mais en passant par des filtres diffĂ©rents : l’une pour les surfaces de niveau, l’autre pour les lignes de contours. ![Iso surfaces et iso lignes pipeline](https://mzf.fr/linuxfr/vtk_isosurface_and_isoline_pipeline.png) rĂ©sultat : ![Iso surfaces et iso lignes rĂ©sultat](https://mzf.fr/linuxfr/vtk_isosurface_and_isoline_result1.png) Mais on n’y voit rien ! C’est Ă  cause des reprĂ©sentations superposĂ©es. On peut alors soit jouer sur la transparence pour rendre les lignes visibles, soit les dĂ©placer dans le rendu final grĂące Ă  l’objet « acteur » associĂ© : ![Iso surfaces et iso lignes rĂ©sultat](https://mzf.fr/linuxfr/vtk_isosurface_and_isoline_result2.png) Et en rajoutant une boĂźte englobante pour mieux se situer dans l’espace : ![Iso surfaces et iso lignes rĂ©sultat](https://mzf.fr/linuxfr/vtk_isosurface_and_isoline_result3.png) ## Rendu volumique Exemple un peu plus avancĂ©, nous allons travailler sur une source volumique qui contient des informations pour chaque [voxel](https://fr.wikipedia.org/wiki/Voxel) d’un espace 3D. C’est le cas typique de donnĂ©es venant d'[imagerie par rĂ©sonance magnĂ©tique (IRM)](https://fr.wikipedia.org/wiki/Imagerie_par_r%C3%A9sonance_magn%C3%A9tique). Pour se reprĂ©senter les choses, on peut utiliser l’analogie d’un grand Rubik's cube avec une valeur associĂ©e Ă  chaque case. ![Analogie du Rubik's cube](https://upload.wikimedia.org/wikipedia/commons/f/fe/Professors_cube.jpg) Voici la version *Rubik's cube* de nos donnĂ©es : ![Version brute](https://mzf.fr/linuxfr/vtk_ray_casting_raw.png) Difficile de comprendre ce qu’il y a Ă  l’intĂ©rieur ! Si on reprend les mĂ©thodes dĂ©crites dans l’exemple prĂ©cĂ©dent, on peut imaginer plusieurs façons de visualiser ces donnĂ©es : * projeter la valeur de chaque voxel sur un point de l’espace 3D, comme l’image *rubik's cube* ci-dessus * afficher des lignes de contours ou des surfaces de contours ![Iso-surface pour V=1000](https://mzf.fr/linuxfr/vtk_ray_casting_isosurface1.png) ![Iso-surface pour V=2000](https://mzf.fr/linuxfr/vtk_ray_casting_isosurface2.png) Mais comme on le voit dans les captures d’écran ci-dessus, les surfaces comportent des trous car les diffĂ©rentes parties (peau, crĂąne, etc.) sont reprĂ©sentĂ©s par une plage de valeur et non plus par une seule valeur. On peut Ă©videmment superposer plusieurs surfaces, mais il est toujours difficile de percevoir l’intĂ©rieur du modĂšle, ce qui est pourtant le but recherchĂ© en imagerie mĂ©dicale (recherche de tumeur par exemple) : ![Iso-surfaces superposĂ©es](https://mzf.fr/linuxfr/vtk_ray_casting_isosurface3.png) La solution ? Utiliser le lancer de rayon (*raycasting*) ! L’idĂ©e est de faire partir un rayon pour chaque pixel de l’image de rendu. Ce rayon va traverser notre volume voxĂ©lisĂ© et recueillir des informations Ă  chaque cube traversĂ©. Il suffira ensuite de se servir de ces informations pour dĂ©finir la couleur du pixel de l’image. Il existe de nombreuses façons de faire ce dernier calcul en fonction de ce que l’utilisateur souhaite afficher. On peut citer : * utiliser la moyenne des valeurs des cubes traversĂ©s ; * utiliser la valeur maximale des cubes traversĂ©s, abrĂ©gĂ© MIP pour *[maximum intensity projection](https://en.wikipedia.org/wiki/Maximum_intensity_projection)* ; * utiliser la valeur minimale des cubes traversĂ©s, abrĂ©gĂ© MinIP pour *[minimum intensity projection](https://en.wikipedia.org/wiki/Minimum_intensity_projection)* ; * somme des valeurs traversĂ©es ; * intĂ©grale des valeurs traversĂ©es ; * etc. Dans cet exemple nous allons utiliser la valeur maximale grĂące au filtre *vtkFixedPointVolumeRayCastMapper*. Voici notre pipeline : ![Ray casting pipeline](https://mzf.fr/linuxfr/vtk_raycasting_pipeline.png) Elle commence par *reader* qui ne prend rien en entrĂ©e mais agit sur le systĂšme en lisant le fichier, puis on utilise un *VolumeRayCastMapper* qui va se charger de faire le lancer de rayon et le calcul *MIP*. On le passe ensuite Ă  l’objet *vtkVolume* qui est le pendant volumique du *vtkActor* utilisĂ© pour les primitives gĂ©omĂ©triques. Le rĂ©sultat : ![RĂ©sultat MIP](https://mzf.fr/linuxfr/vtk_raycasting_mip.png) Ça y est on commence Ă  voir l’intĂ©rieur et l’extĂ©rieur. La couleur d’un pixel est donc la valeur maximale du matĂ©riau traversĂ©, en gros le matĂ©riau le plus dense (les os et les dents dans notre cas). Mais il est encore difficile de situer chacun des Ă©lĂ©ments dans l’espace, ce qui est l’inconvĂ©nient majeur de la mĂ©thode *MIP*. On peut contourner ce problĂšme en crĂ©ant une animation : ![Animation MIP](https://mzf.fr/linuxfr/vtk_volume_rendering_mip_animation.gif) Il est ensuite possible de colorer les diffĂ©rents pixels grĂące Ă  une fonction qui va associer chaque valeur Ă  une couleur, appelĂ©e *fonction de transfert*. Si on connaĂźt la plage de valeur de chaque Ă©lĂ©ment Ă  faire ressortir, on peut lui associer des couleurs similaires. Ici les dents en rouge, les os en jaune et la peau en bleu : ![MIP colorĂ©](https://mzf.fr/linuxfr/vtk_raycasting_mip_colored.png) ## Autres types de rendu Ces exemples simples ont permis de dĂ©couvrir toute la souplesse et la puissance de l’architecture en *pipeline* de VTK. Il existe de nombreux autres filtres qui rĂ©pondent aux besoins de la visualisation de donnĂ©es scientifiques. Citons les grandes catĂ©gories : * la coloration, c’est-Ă -dire associer une plage de valeur Ă  un ensemble de couleurs : ![exemple de diffĂ©rentes Ă©chelles de couleur](https://mzf.fr/linuxfr/vtk_coloring_example_resized.jpg) * crĂ©ation de contours (lignes, surface...) ![exemple contours](https://mzf.fr/linuxfr/vtk_contouring.png) * affichage de symboles (*glyphs*) ![exemple glyphs](https://mzf.fr/linuxfr/vtk_random_glyphs.png) * affichage de lignes de courant (*streamlines*) ![exemple lignes de courant](https://mzf.fr/linuxfr/vtk_streamlines.png) * dĂ©coupage de volume ![exemple dĂ©coupage de volume](https://mzf.fr/linuxfr/vtk_slicing.png) * dĂ©formation de maillages ![exemple dĂ©formation de maillages](https://mzf.fr/linuxfr/vtk_mesh_displacement2.png) * travail sur des images ![exemple de modification d’image](https://mzf.fr/linuxfr/vtk_image_modification.png) * rendu volumique ![Rendu volumique](https://mzf.fr/linuxfr/vtk_volume_rendering_example.png) * rendu gĂ©ographique * affichage de graphes * analyse de donnĂ©es (*Big Data*) * ... Et, s’il vous manque des outils, le code ouvert et l’architecture modulaire de VTK permettent de les dĂ©velopper, soit vous-mĂȘme, soit via un prestataire tel que [Kitware](https://www.kitware.eu/what-we-offer/). Vous pouvez aussi en discuter sur le [forum de VTK](https://discourse.vtk.org/) ou encore participer directement au dĂ©veloppement (rapport de bug, discussion, proposition de nouvelle fonctionnalitĂ©...) sur l'[instance gitlab](https://gitlab.kitware.com/vtk/vtk) dĂ©diĂ©e. # Conclusion VTK est donc une boĂźte Ă  outils trĂšs puissante dĂ©diĂ©e Ă  la visualisation de donnĂ©es. Cette prĂ©sentation n’a fait qu’effleurer les fonctionnalitĂ©s de base pour illustrer l’utilisation du *pipeline*, et je vous encourage Ă  aller consulter les [exemples](https://kitware.github.io/vtk-examples/site/Cxx/) pour un panorama plus complet. Pour finir, si vous ne dĂ©veloppez pas des applications de visualisation scientifique, il se peut qu’associer les filtres Ă  la main via un langage de programmation vous paraisse assez laborieux. C’est pour cela que Kitware a dĂ©veloppĂ© une application qui s’appuie sur VTK et permet de manipuler trĂšs facilement le *pipeline* : [Paraview](https://www.paraview.org/). Mais ce sera pour une prochaine dĂ©pĂȘche !

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /