commit:2010:02_05
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
commit:2010:02_05 [2010/02/05 16:22] – dotreppe | commit:2010:02_05 [2016/03/30 15:23] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Commit 2010-02-05 ====== | ||
+ | ===== Modifications apportées à Geniso ===== | ||
+ | |||
+ | ==== Génération d'un maillage ==== | ||
+ | |||
+ | < | ||
+ | poly = meshingTools.callGeniso(image, | ||
+ | </ | ||
+ | |||
+ | ou, de manière équivalente: | ||
+ | |||
+ | < | ||
+ | # définition de l’image sous forme d’un ensemble de points | ||
+ | fct = Fct(generalTools.vtkImageDataToCpp(image), | ||
+ | |||
+ | # génération du maillage | ||
+ | gen = GenerateMesh(fct) | ||
+ | gen.getRegularGrid().setDimensions(int(1.0/ | ||
+ | gen.getRegularGrid().setSpacing(gridspacing, | ||
+ | gen.getRegularGrid().setOrigin(0.0, | ||
+ | gen.execute() | ||
+ | |||
+ | # récupération du maillage sous format vtk | ||
+ | poly = generalTools.genisoMeshToPolyData(gen.getSurf()) | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | La génération du maillage s’effectue comme suit : | ||
+ | - Extraction d’un ensemble de points appartenant aux frontières des domaines présents dans l' | ||
+ | - Reconstruction d’une ou plusieurs surfaces implicites à partir de cet ensemble de points ( Multi-Level Partition of Unity Models, Y.Ohtake ) | ||
+ | - Génération du maillage, par une méthode de type Marching Tetrahedra qui permet de prendre en compte plusieurs fonctions implicites | ||
+ | - Pendant la génération du maillage : décimation des points qui sont quasi superposés (et qui n’ajoutent donc rien à la définition de la surface) | ||
+ | - Lissage du type laplacien mais en contraignant les noeuds sur les surfaces définies par les fonctions implicites. | ||
+ | |||
+ | ==== Décimation ==== | ||
+ | |||
+ | < | ||
+ | deci = DecimateMesh(generalTools.polydataToCpp(self.curPoly)) | ||
+ | deci.setDecimationCriteria(criteriatype, | ||
+ | deci.execute() | ||
+ | vtkpolyDecimated = generalTools.genisoMeshToPolyData(deci.getSurf()) # récupération du maillage sous format vtk | ||
+ | </ | ||
+ | |||
+ | Cette fonction permet de simplifier (supprimer des noeuds) un maillage geniso ou autre. | ||
+ | |||
+ | Plusieurs critères de décimation sont possibles. Ils sont basés sur: | ||
+ | * la plus petite aire voisine au noeud | ||
+ | * la plus petite arête voisine au noeud | ||
+ | * la variation des normales aux triangles voisins | ||
+ | * le nombre de voisins : un tel critère permet d’améliorer la topologie du maillage | ||
+ | |||
+ | ==== Lissage ==== | ||
+ | |||
+ | Si le maillage a été généré avec geniso : on peut utiliser les fonctions implicites utilisées pour la génération du maillage afin de contraindre les positions nodales sur ces surfaces. | ||
+ | |||
+ | < | ||
+ | fct = Fct(generalTools.vtkImageDataToCpp(image), | ||
+ | |||
+ | smooth = SmoothMesh(genisoMesh) | ||
+ | smooth.smoothWithFct(2, | ||
+ | vtkpolySmoothed = generalTools.genisoMeshToPolyData(smooth.getSurf()) | ||
+ | </ | ||
+ | |||
+ | Si le maillage n’a pas été généré avec geniso : on peut quand même contraindre les positions nodales sur un maillage de référence (généralement le maillage initial). | ||
+ | |||
+ | < | ||
+ | smooth = SmoothMesh(generalTools.polydataToCpp(vtkPolyData)) | ||
+ | smooth.smoothWithReference(2, | ||
+ | smoothedPoly = generalTools.genisoMeshToPolyData(smooth.getSurf()) | ||
+ | </ | ||
+ | Le fait de se baser sur une surface de référence permet d’éviter que la surface « ne se ferme sur elle-même », comme lorsqu’on applique un lissage de Laplace classique (disponible dans vtk). | ||
+ | |||
+ | ==== GUI4 ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Interface graphique réalisée avec pyqt qui rassemble toute une série de fonctions utiles : | ||
+ | |||
+ | * **Image **: | ||
+ | * chargement (dicom, vtk, raw, …), enregistrement (vtk) | ||
+ | * filtres : gaussien, négatif, seuillage, … extraction d’un contour, d’un slice, … | ||
+ | * visualisation : slices, 3 plans, image+maillage surfacique, … | ||
+ | * génération maillage surfacique via geniso ou isosurf | ||
+ | * **Maillage surfacique** : | ||
+ | * chargement (vtk, poly, …), enregistrement (vtk) | ||
+ | * filtres geniso : décimation et lissage (cfr. ci-dessus) | ||
+ | * filtres vtk : décimation, | ||
+ | * génération maillage volumique via tetgen | ||
+ | * **Maillage volumique** : | ||
+ | * chargement, enregistrement | ||
+ | |||
+ | ===== Tests ===== | ||
+ | |||
+ | Voici quelques images des cas tests ajoutés dans la batterie: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Fichiers ajoutés / supprimés ===== | ||
+ | |||
+ | === Fichiers supprimés === | ||
+ | < | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | Deleting: D: | ||
+ | |||
+ | Deleting: D: | ||
+ | </ | ||
+ | |||
+ | === Fichiers ajoutés=== | ||
+ | < | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | |||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | |||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | |||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | Adding: D: | ||
+ | </ | ||
+ | |||
+ | --- // |