Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


doc:user:geometry:mesh:geniso

Differences

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

Link to this comparison view

Next revision
Previous revision
doc:user:geometry:mesh:geniso [2013/07/01 14:31] – external edit 127.0.0.1doc:user:geometry:mesh:geniso [2016/03/30 15:23] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Mailleur Biomec GenIso ======+====== Biomech GenIso Mesher ======
  
-Ce mailleur permet de générer un maillage surfacique 3D au départ d'une image tridimensionnelle segmentée.+This mesher is used to generate a 3D surface mesh from a 3D segmented image.
  
-===== Maillage mono-matériau =====+===== Mono-material mesh =====
  
-L'input est image 3D segmentée binaireElle contient donc deux valeurs, les voxels ayant pour valeur ''0'' sont localisés hors de l'objet à maillerles voxels intérieurs à l'objet ont quant à eux une valeur non nulle+The input is a 3D segmented binary image. It contains two values: voxels with a $0$ value are located outside of the object to mesh, voxels with a non-zero value are located inside.
  
-Arrangez-vous pour que votre image de départ soit au format ''.vtk'' ouencore mieux, au format ''.vti'' qui est plus compact. Si ce n'est pas le cas, utilisez Slicer3D, Paraview ou mon interface ''geniso/tools/gui4.py'' pour changer le format de l'image.+The image must be ''.vtk'', or event better ''.vti'', which is more compact. If it is not the right format use Slicer3D, Paraview or my interface ''geniso/tools/gui4.py'' to change it. 
 + 
 +First, the geniso tools must be loaded:
  
-Commencez par charger les utilitaires geniso 
    import geniso.tools.generalTools as generalTools    import geniso.tools.generalTools as generalTools
    import geniso.tools.meshingTools as meshingTools    import geniso.tools.meshingTools as meshingTools
    import geniso.tools.imagingTools as imagingTools    import geniso.tools.imagingTools as imagingTools
  
-Chargez l'image:+Then the image must be loaded:
    image = generalTools.loadVtkImageXML(imageFileName)    image = generalTools.loadVtkImageXML(imageFileName)
  
-Ensuiteutilisez la série de commandes suivantes pour générer un maillage surfacique de la frontière de l'image segmentée:+Afterwardsthe following set of commands is used to generate a surface mesh of the boundary of the segmented image:
  
    gen = GenerateMesh(generalTools.vtkImageDataToCpp(image))     gen = GenerateMesh(generalTools.vtkImageDataToCpp(image)) 
Line 24: Line 25:
    smooth.smoothWithFctFromPoly(nbr,spx,spy,spz,nmin,interpol,type)    smooth.smoothWithFctFromPoly(nbr,spx,spy,spz,nmin,interpol,type)
  
-où les paramètres sont décrits dans le tableau ci-dessous. +where the parameters are described in the table below.
-En pratique, ''GenerateMesh(image).execute()'' crée une triangulation de la frontière de l'objet segmenté dans l'image binaire fournie. De part la discrétisation spatiale de l'image, le maillage généré n'est pas beau car non lisse, les //marches d'escaliers// de l'image binaire sont conservées. La classe ''SmoothMesh()'' permet d'éliminer ces irrégularités de surface tout en conservant la géométrie décrite dans les images. Elle le fait grâce à la construction d'une fonction implicite, décrite par les paramètres ''nmin'', ''interpol'' et ''type'' (pour plus de détails: [[http://hdl.handle.net/2268/136159]]).+
  
-Récupérez ensuite votre ''vtkPolydata'' via la commande:+In practice, ''GenerateMesh(image).execute()'' creates a triangulation of the boundary of the segmented object in the binary image given. Because of the spatial discretization of the image, the mesh which is generated is not smooth, since the steps of the image are kept. The class ''SmoothMesh()'' is used to eliminate these irregularities while keeping the geometry described in the image. It does so with the construction of an implicit function, described by the parameters ''nmin'', ''interpol'' and ''type'' (for more details: [[http://hdl.handle.net/2268/136159]]). 
 + 
 +Then, the ''vtkPolydata'' is retrieved with the command:
    poly = generalTools.genisoMeshToPolyData(smooth.getSurf())      poly = generalTools.genisoMeshToPolyData(smooth.getSurf())  
  
-Pour obtenir un maillage volumique tétraédrique du volume de l'objet à partir du maillage surfacique triangulaire de la surface frontière de l'objet, utilisez TetGen:+TetGen is used to get a tetrahedral volume mesh of the object from the triangular surface mesh of the boundary of the object 
    ugrid = meshingTools.callTetgen(poly)    ugrid = meshingTools.callTetgen(poly)
  
-Vous récupérez ainsi un ''vtkUnstructuredGrid''Pour le sauvegarder sur le disque:   ''generalTools.saveUgridXML('ugrid.vtu',ugrid)''Pour le visualiser, utilisez Paraview. Pour l'utiliser dans un cas-test Metafor, utilisez la classe ''LoadMesh'' implémentée dans le fichier ''toolbox/tetgen.py'' +''vtkUnstructuredGrid'' is retrievedTo save it on disk:   ''generalTools.saveUgridXML('ugrid.vtu',ugrid)''. Paraview is used to view itThe class ''LoadMesh'', implemented in the file, is used to include it in a Metafor test case:
    groupset.add(Group(1))    groupset.add(Group(1))
    mesh = LoadMesh(domain, ugrid, groupset(1) )    mesh = LoadMesh(domain, ugrid, groupset(1) )
Line 39: Line 42:
  
  
-===== Maillage multi-matériau =====+===== Multi-material mesh =====
  
-Cette option permet de générer un maillage qui contient plusieurs zones matériellesun os qui contiendrait une partie os cortical et une partie os trabéculaire par exemple; un cerveau dans lequel les ventricules et une tumeur seraient séparés; une mâchoire avec une série de dents; ... +This option is used to generate a mesh which contains several material areastwo different bones, a brain with ventricles separated from a tumor, a jawbone with a series of teeth...
  
-Dans le cas multi-matériau l'image segmentée représentant la géométrie doit contenir plusieurs //labels//: 0 pour l'extérieur de l'objet (background) et une série de valeurs positives non nulles (typiquement 1,2,3,...) pour distinguer chacun des tissus.+In the multi-material case, the segment image representing the geometry must contain several //labels//: 0 for the background (outside of the object), and a series of non-zero positive values (typically 1, 2, 3...) for each material.
  
-Pour utiliser le mailleur GenIso, il faut tout d'abord définir la fonction implicite ''Fct'', équivalente continue de l'image segmentée discrèteet qui permettra au mailleur de fournir une interface //lisse// entre les maillages séparant les différentes régions.+To use the GenIso mesherthe implicit function ''Fct'' must first be defined. This function is a continuous equivalency of the discrete segment image, and will allow the mesher to supply a smooth interface between the mesh separating each region.
  
-Pour définir cette fonctionon définit les couples de //labels// de l'image entre lesquels on veut que le mailleur crée une triangulation. De pluson trie ces couples de manière à définir l'objet hétérogène comme un ensemble de //closed// surfaces sur lesquelles viennent éventuellement se greffer des //open// surfaces. Dans l'image ci-dessousune tumeur (//open// surface défine par le couple (4,3) vient s'attacher sur la frontière extérieure du cerveau (//closed// surface définie par l'union des couples (3,0) et (4,0)).  +To define this function, couples of //labels// of the image are defined, //labels// between which the mesher must create a triangulation. In additionthese couples are sorted to define the heterogeneous object as a set of //closed// surfaces on which //open// surfaces can be attachedIn the image belowa tumor (//open// surface defined by the couple (4, 3)), is tied on the external boundary of the brain (//closed// surface defined by the union of the couples (3, 0) and (4, 0)).
  
 {{ :doc:user:mesh:geniso_openetclosed.png? 600 |}} {{ :doc:user:mesh:geniso_openetclosed.png? 600 |}}
  
-Dès lorsla syntaxe à utiliser est la suivante:+Consequentthe syntax is as follow:
  
     fct = Fct()     fct = Fct()
Line 66: Line 69:
     fct.build()     fct.build()
  
- +Afterwardsthe mesh can be generated with the commands:
-Ensuitenous pouvons générer le maillage au moyen des commandes +
  
     gen = GenerateMesh(fct)     gen = GenerateMesh(fct)
Line 74: Line 76:
     poly = generalTools.genisoMeshToPolyData(gen.getSurf()) // vtkPolyData     poly = generalTools.genisoMeshToPolyData(gen.getSurf()) // vtkPolyData
  
-A partir de ce maillage surfacique multi-régionson utilise TetGen pour générer le maillage volumique dans chacune des régions définiesPour ce faire il faut spécifier à TetGen un point, //seed//, situé dans chacune des régions à mailler volumiquement (vous pouvez par exemple aller chercher ce point en chargeant le vtkPolyData dans l'interface graphique ''geniso/tools/gui4.py'' et en utilisant ensuite l'option //point// ). +From this surface multi-regions mesh, TetGen is used to generate the volume mesh in each of these regionsTo do so, TetGen must be given a point, //seed// situated in each of the regions to be meshed (this point can be found, for example, by loading the ''vtkPolydata'' in the graphical interface ''geniso/tools/gui4.py'' using the option //point//).
  
     seedbrain= [118.3,160.5,75]     seedbrain= [118.3,160.5,75]
Line 82: Line 84:
     ugrid = meshingTools.callTetgenMultipleRegions(poly, regionSeeds, regionVolmax)     ugrid = meshingTools.callTetgenMultipleRegions(poly, regionSeeds, regionVolmax)
  
-Ensuitepour charger le maillage dans Metafor:+Thenthe mesh is loaded in Metafor:
  
-    labels = [1,2]  // les deux labels des régions dans l'ugrid (cfr. visu dans Paraview)+    labels = [1,2]  // the two labels of the regions located in the ugrid (see visu in Paraview)
     grp = [groupset(1),groupset(2)]      grp = [groupset(1),groupset(2)] 
          
Line 93: Line 95:
    
          
-===== Paramètres =====+===== Parameters =====
  
-^  Paramètre  ^  Signification et valeur conseillée +^  Parameter      ^  Meaning and recommended value 
-| ''nbr''nombre d'itérations de la fonction de lissage\\ __conseil__: 4 | +| ''nbr''         number of iterations of the smoothing function \\ __recommended__: 4| 
-| ''spx,spy,spz''Espacement de la grille utilisée pour générer le maillage \\ __conseil__ = gen.getRegularGrid().getDx(),.getDy(),.getDz() | +| ''spx,spy,spz''Spacing of the grid used to generate the mesh \\ __recommended__ = gen.getRegularGrid().getDx(),.getDy(),.getDz() | 
-| ''res''Résolution de la grille utilisée pour générer le maillage\\ __conseil__: image.GetDimensions()[0] si on veut garder la même grille que celle définie par l'image de départ+| ''res''Resolution of the grid used to generate the mesh \\ __recommended__: image.GetDimensions()[0] if the grid defined by the initial image is to be kept 
-| ''eps'' | distance relative autorisée entre l'image de départ et la fonction Fct \\  __conseil__: 1./image.GetDimensions()[0] signifie une distance d'une largeur de voxel| +| ''eps''relative distance allowed between the initial image and the function Fct \\ __recommended__: 1./image.GetDimensions()[0], which corresponds to a distance of a voxel width 
-| ''nmin''degré de lissage\\ __conseil__entre 15 et 100 | +| ''nmin''smoothing degree \\ __recommended__between 15 and 100 | 
-| ''interpol'' | 0: fct d'approximation, 1: fct d'interpolation\\ __conseil__: 0 pour une surface plus lisse, 1 pour une géométrie plus proche de l'image | +| ''interpol'' | 0: approximation function, 1: interpolation function \\ __recommended__: 0 for a smoother surface, 1 for a geometry closer to the initial image | 
-| ''type'' | 1: linéaire, 2: quadratique\\ __conseil__: 1 pour la robustesse, 2 pour une surface plus lisse |+| ''type'' | 1: linear, 2: quadratic\\ __recommended__: 1 for robustness, 2 for a smoother surface |
doc/user/geometry/mesh/geniso.1372681871.txt.gz · Last modified: 2016/03/30 15:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki