Accurate Isosurface Interpolation with Hermite Data
3DV 2015 Paper
Windows Executable (x64)
Source Code GitHub Repository
- --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 (white-space separated) triplet of integer values gives the resolution of the voxel grid. (If the argument is unspecified, the executable assumes that the grid is a cube and that the first 4 bytes of the file give the resolution.)
- [--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
- [--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.
- Improvied parallelization, added running time, and made resolution an optional parameter.