Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2010:02_05

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
commit:2010:02_05 [2010/02/08 13:53] dotreppecommit: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 ====
 +
 +<code>
 +poly = meshingTools.callGeniso(image,gridspacing,nmin,alpha)
 +</code>
 +
 +ou, de manière équivalente:
 +
 +<code>
 +# définition de l’image sous forme d’un ensemble de points
 +fct = Fct(generalTools.vtkImageDataToCpp(image),nmin,alpha)
 +
 +# génération du maillage
 +gen = GenerateMesh(fct)
 +gen.getRegularGrid().setDimensions(int(1.0/gridspacing)+1, int(1.0/gridspacing)+1, int(1.0/gridspacing)+1)
 +gen.getRegularGrid().setSpacing(gridspacing, gridspacing, gridspacing)
 +gen.getRegularGrid().setOrigin(0.0,0.0,0.0)
 +gen.execute()
 +
 +# récupération du maillage sous format vtk
 +poly = generalTools.genisoMeshToPolyData(gen.getSurf())
 +</code>
 +
 +    * ''image'' : image segmentée ( 1 ou plusieurs domaines ) sous format vtk (vtkImageData)
 +    * ''gridspacing'' : finesse de la maille utilisée pour générer le maillage : 1/gridspacing positions seront évaluées dans chaque dimension.  Utilisez 0.05 pour un maillage grossier et 0.01 pour un maillage fin. 
 +    * ''Nmin'' et ''alpha'' : paramètres pour la reconstruction des surfaces (continues) à partir de l’image (discrète).  ''alpha'' doit être compris entre 0.6 et 0.9 et ''nmin'' entre 30 et 150. Par défaut ''alpha=0.75'' et ''nmin=100''. Augmenter nmin ou alpha donnent une représentation plus lisse de la surface et inversément.
 +
 +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'image segmentée
 +  - 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 ====
 +
 +<code>
 +deci = DecimateMesh(generalTools.polydataToCpp(self.curPoly))
 +deci.setDecimationCriteria(criteriatype,areaLimit,lengthLimit,gradientLimit) # critère pour la suppression d'un noeud
 +deci.execute()
 +vtkpolyDecimated = generalTools.genisoMeshToPolyData(deci.getSurf()) # récupération du maillage sous format vtk
 +</code>
 +
 +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. 
 +
 +<code>
 +fct = Fct(generalTools.vtkImageDataToCpp(image),nmin,alpha)
 +
 +smooth = SmoothMesh(genisoMesh)
 +smooth.smoothWithFct(2, fct)
 +vtkpolySmoothed = generalTools.genisoMeshToPolyData(smooth.getSurf())
 +</code>
 +
 +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).
 +
 +<code>
 +smooth = SmoothMesh(generalTools.polydataToCpp(vtkPolyData))
 +smooth.smoothWithReference(2,generalTools.polydataToCpp(vtkPolyData))
 +smoothedPoly = generalTools.genisoMeshToPolyData(smooth.getSurf())
 +</code>
 +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 ====
 +
 +{{:commit:2010:100202_gui4.png?300|gui4.py}}
 +
 +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, lissage, …
 +      * génération maillage volumique via tetgen
 +  * **Maillage volumique** :
 +      * chargement, enregistrement
 +
 +===== Tests =====
 +
 +Voici quelques images des cas tests ajoutés dans la batterie:
 +
 +{{:commit:2010:100202_brainandtumor.png?200| brainAndTumor.py}} {{:commit:2010:100202_brainandtumorandventricle.png?200| brainAndTumorAndVentricle.py}} {{:commit:2010:100202_encephale.png?200| encephale.py}} {{:commit:2010:100202_humerus.png?200| humerus.py}} {{:commit:2010:100202_radius.png?200| radius.py}} {{:commit:2010:100202_ulna.png?200| ulna.py}} {{:commit:2010:100202_dents.png?230| dents.py}} {{:commit:2010:100202_sphereIsec.png?200| sphereIsec.py}} 
 +
 +===== Fichiers ajoutés / supprimés =====
 +
 +=== Fichiers supprimés ===
 +<code>
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoCluster.cpp
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoCluster.h
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoImproveTopo.cpp
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoImproveTopo.h
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoMarchingTets.cpp
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoMarchingTets.h
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoOpti.cpp
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoOpti.h
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoTools.cpp
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoTools.h
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoVertexClust.cpp
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\src\gisoVertexClust.h
 +
 +Deleting: D:\Metafor\Meta\oo_meta\geniso\tests\plane.py
 +</code>
 +
 +=== Fichiers ajoutés===
 +<code>
 +Adding: D:\Metafor\Meta\oo_meta\geniso\data\dents7.vtk
 +Adding: D:\Metafor\Meta\oo_meta\geniso\data\encephale.vtk
 +Adding: D:\Metafor\Meta\oo_meta\geniso\data\humerus.vtk
 +Adding: D:\Metafor\Meta\oo_meta\geniso\data\radius.vtk
 +Adding: D:\Metafor\Meta\oo_meta\geniso\data\sphere.vtk
 +Adding: D:\Metafor\Meta\oo_meta\geniso\data\ulna.vtk
 +
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoFct.cpp
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoGenerateMesh.cpp
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoGenerateMesh.h
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoKdtree.cpp
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoKdtree.h
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoMpuImplicits.cpp
 +Adding: D:\Metafor\Meta\oo_meta\geniso\src\gisoMpuImplicits.h
 +
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tests\dents.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tests\encephale.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tests\humerus.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tests\radius.py  
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tests\sphereIsec.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tests\ulna.py 
 +
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools  
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4Dialog0.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogChgExtent.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogConstant.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogContour.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogContourExtractor.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogExtractLabel.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogGeniso.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImCutPlane.ui 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImDilate.ui 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImDistancemap.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImErode.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImFlip.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImGaussianSmooth.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImMoreInfopushButton.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImNegative.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImOpenclose3D.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImReslice.ui 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImRotate.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogImSettings.ui 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogLoadRaw.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogPolyDecimation.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogPolyRelax.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogPolySplit.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogPolyTransfrom.ui 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogSelectIm.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogSelectPoly.ui 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\gui4DialogSimple.ui
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\makepyqt.pyw  
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4Dialog0.py 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogChgExtent.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogConstant.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogContour.py 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogContourExtractor.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogExtractLabel.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogGeniso.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImCutPlane.py 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImDilate.py 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImDistancemap.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImErode.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImFlip.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImGaussianSmooth.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImMoreInfopushButton.py 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImNegative.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImOpenclose3D.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImReslice.py 
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImRotate.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogImSettings.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogLoadRaw.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogPolyDecimation.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogPolyRelax.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogPolySplit.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogPolyTransfrom.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogSelectIm.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogSelectPoly.py
 +Adding: D:\Metafor\Meta\oo_meta\geniso\tools\gui4tools\ui_gui4DialogSimple.py 
 +</code>
 +
 + --- //[[vdotreppe@ulg.ac.be|Vinciane d'Otreppe]] 2010/02/05 11:22//

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki