Accurate Isosurface Interpolation with Hermite Datalinks description executable
3DV 2015 Paper
Windows Executable (x64)
The code provides an implementation of Marching-Cubes isosurface extraction, supporting the use of Hermite Data and a full case table for resolving the ambiguous cases in the original implementation of Lorensen and Cline. Given a regular grid of values and a prescribed isovalue, the corresponding isosurface is extracted and output to file.
Implementations of Hermite interpolation on adapted octrees can also be found in the code for Poisson Surface Reconstruction, Floating Scale Surface Reconstruction, and Unconstrained Isosurface Extraction on Arbitrary Octrees.
- --in <input volume>
- This string is the name of the file containing the regularly sampled voxeld values. Values are linearized, so that if the image is of resolution ResX*ResY*ResY then the value at index (x,y,z) is at position x+y*ResX+z*ResX*ResY, and are stored in binary format either as unsigned chars (1 byte per value) or as floating point values (4 bytes per value).
- --res <x-resolution y-resolution z-resolution>
- This triplet of integer values gives the resolution of the voxel grid.
- [--dim <x-scale y-scale z-scale>]
- This (white-space separated) triplet of floating point values gives the scale of a voxel. (By default, the values are set to 1.)
- [--out <output mesh>]
- This string is the name of the file to which the extracted isosurface will be written. The mesh will be written in the PLY format.
- [--iso <isovalue>]
- This floating point value specifies the isovalue at which the isosurface is to be extracted. (By default, the value is set to 0.)
- [--sIters <smoothing iterations>]
- This integer specified the number of (1-ring) smoothing iterations that are to be applied to the voxel grid before extracting the isosurface. (By default, the value is set to 0.)
- If specified, the Marching-Cubes algorithm is implemented using a ``full'' case table, using the average value of face corners to resolve the amiguous case when the face is zero-crossing and the values on antipodal corners are the same.
- If specified, the triangle orientation in the output is flipped.
- If specified, Hermite data is generated (by considering the difference between neighboring values) and a second-order interpolant is used to define the positions of zero-crossings.
- If specified, the raw iso-polygons are output. Otherwise, the polygons are triangulated using a minimal-area-triangulation and a triangle mesh is written as output.
- If specified, the input is read in as a list of floating point values. Otherwise, the input is assumed to represent (unsigned) char values.
- If specified and floating point values are used, the bytes within each float will be flipped.
- Although the polygon mesh resulting from Marching-Cubes is manifold, it can be the case that two polygon share two vertices that are not on a polygon edge. As a result, the minimal area triangulation could introduce the same edge for the triangulation of both polygons, resulting in a triangle mesh with non-manifold edges. By default, the code will introduce an additional vertex (the plane's barycenter) if a non-manifold triangulation can arise, thereby ensuring that the output triangle mesh is manifold. Enabling this flag avoids introducing the barycenter, but could result in mesh with non-manifold edges.