poly = meshingTools.callGeniso(image,gridspacing,nmin,alpha)
ou, de manière équivalente:
# 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())
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 :
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
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:
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),nmin,alpha) smooth = SmoothMesh(genisoMesh) smooth.smoothWithFct(2, fct) 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,generalTools.polydataToCpp(vtkPolyData)) 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).
Interface graphique réalisée avec pyqt qui rassemble toute une série de fonctions utiles :
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
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
— Vinciane d'Otreppe 2010/02/05 11:22