# Mesh Discussion for Core 1

From NAMIC

Home < Mesh Discussion for Core 1

Topics for discussion regarding Meshes in ITK.

Thursday, June 19th, 3-3:30pm ET

# Participants:

- Will Schroeder,
- Luis Ibanez,
- Andrey Fedorov,
- Polina Golland,
- Thomas Yeo
- Alex Gouillard

# Goal

- The goal is to figure out what's there and what needs to be done to make meshes usable for algorithm development.

# Tools Needed

- Thomas: I am listing some tools that might be necessary for people working with meshes in ITK (the viewpoint is probably biased towards my needs). I might also be referring to meshes as representing surfaces depending on the contexts.

## Registration

- Need to interpolate values residing on the vertices of a mesh onto a set of points (which could belong to another mesh). I can give more specific examples in my problems if clarifications needed.
- Given a point lying on a face (triangle/tetrahedron) of a mesh, compute the spatial gradient at that point, i.e., how will the interpolated value changes as the point position changes.
- Does ParametricSpaceToImageSpaceMeshFilter already accomplished this? Found this on the documentation page, but it's unclear if it doing point (1) above.

## Mesh Parameterization

- Given a mesh, impose a parametric (e.g., planar, spherical) coordinate system. This is necessary for registration.
- Different possible metric for such a parametrization: metric distortion, conformal, etc.

Note (Alex): I think we did it: "http://hdl.handle.net/1926/1315". Do you need anything more than this?

## Given a Mesh Representing a Surface

- Compute differential geometric properties, e.g., first and second fundamental forms (mean and gaussian curvature)
- For mesh representing cortical surface, computing sulcal depth

## Closed 2D Surface Analysis

- Spherical Harmonic Transform - Spherical Harmonics are the basis of spherical filtering.
- Wavelets - I thought Delphine's work was to be imported into ITK. They must have needed to do perform interpolation and impose a spherical coordinate system...

## Obtaining the Mesh in the First Place

- In the context of the brain: white matter segmentation, topology correction, mesh generation.

# Status of the Mesh in ITK

## FEM framework

- Not compliant with itkMesh (the FEM framework uses its own mesh).

## itkMesh

- n-manifold, same structure as VTKUnstructuredGrid (polygon soup + links from points to cells),
- no partitionning (ghost cells) => NO MULTITHREADING
- BuildLinks drawback: makes local topoligical operation's cost linear to global size
- Cell API gives possibility of K-Complex, possibility of boundary operator from n-dimensional cells to n-1 dimensional cells.

### filters:

Segmentation framework

- itkBalloonForceFilter
- itkDeformableMesh3DFilter

others

- itkAutomaticTopologyMeshSource
- itkBinaryMask3DMeshSource
- itkBinaryMaskToNarrowBandPointSetFilter
- itkConnectedRegionsMeshFilter
- itkImageToParametricSpaceFilter
- itkInteriorExteriorMeshFilter
- itkParametricSpaceToImageSpaceMeshFilter
- itkRegularSphereMeshSource
- itkSphereMeshSource
- itkTransformMeshFilter
- itkVTKPolyDataReader [REVIEW]
- itkVTKPolyDataWriter [REVIEW]
- itkWarpMeshFilter
- itkConformalFlatteningMeshFilter (2) [REVIEW]
- itkTriangleMeshToBinaryImageFilter (2)

## itkSimplexMesh

- Contributed by the German Cancer Research Center
- inherit from itkMesh
- 2 manifolds, simplex
- Some dedicated filters with temp arrays to avoid calling BuildLinks() and make the code faster.
- Being rewritten by leila

### filters:

- itkDeformableSimplexMesh3DFilter
- itkSimplexMeshAdaptTopologyFilter
- itkSimplexMeshToTriangleMeshFilter
- itkTriangleMeshToSimplexMeshFilter
- itkDeformableSimplexMesh3D* (3)
- itkSimplexMeshVolumeCalculator

## itkQuadEdgeMesh

- inherit from itkMesh, API fully compatible.
- 2-manifold
- QuadEdge datastructure below (= C-GAL polyhedron + HalfEdges)
- Local operators, local (constant) cost.

### Euler Operators available:

- itkQuadEdgeMeshEulerOperatorCreateCenterVertexFunction
- itkQuadEdgeMeshEulerOperatorDeleteCenterVertexFunction
- itkQuadEdgeMeshEulerOperatorFlipEdgeFunction
- itkQuadEdgeMeshEulerOperatorJoinFacetFunction
- itkQuadEdgeMeshEulerOperatorJoinVertexFunction
- itkQuadEdgeMeshEulerOperatorSplitEdgeFunction
- itkQuadEdgeMeshEulerOperatorSplitFacetFunction
- itkQuadEdgeMeshEulerOperatorSplitVertexFunction
- itkQuadEdgeMeshZipMeshFunction

### filters:

- Djikstra (primal) / front (dual) [REVIEW]
- topology checker [REVIEW]
- Parameterization framework [INSIGHT-JOURNAL]

#### for june's NAMIC project week:

- Mutable priority Queue for geometry processing [READY]
- Delaunay conforming [READY]
- Normals [READY]
- Decimation [DEBUGGING]
- Discrete estimator of curvature (taubin) [DEBUGGING]
- smoothing [DEBUGGING]

#### Ongoing project with luca antiga (2009~)

- exact arithmetic kernel
- 2D and 3D delaunay

#### Ongoing project with A. Gelas

- implicit framework for Level Set and implicit surfaces (quadratic,Gaussian, RBF, partition of unity ...)
- reconstruction of surfaces from samples (stack of contours, point clouds
- implicit surface mesher

#### Dreams

- octree isosurface extraction with respect of sharp features
- CMAKization of TAUCS
- multithreading (partitioning)

# Needs

- be able to change traits dynamically in a pipeline (itkMeshToMeshCopy crashes when InputMeshType is different from OutputMeshType)
- smart way of copying mesh to mesh (container copy, not cell by cell ...)
- save / read meshes with additional informations (normals, ...)
- Multithread (include partitioning)
- arbitrary precision / exact geometric kernel
- (adaptive) 2D/3D meshing or remeshing