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 15:05] – 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: | ||
| + | </ | ||
| + | |||
| + | --- // | ||
