Awesome
<CENTER><H1>Accurate Isosurface Interpolation with Hermite Data</A></H1></CENTER>
<CENTER>
<A HREF="#LINKS">links</A>
<A HREF="#DESCRIPTION">description</A>
<A HREF="#EXECUTABLE">executable</A>
</CENTER>
<HR>
<A NAME="LINKS"><B>LINKS</B></A><br>
<A href="http://www.cs.jhu.edu/~misha/MyPapers/3DV15.pdf">3DV 2015 Paper</A><br>
<A href="IsoSurfaceExtraction.x64.exe">Windows Executable (x64)</A><br>
<A href="IsoSurfaceExtraction.zip">Source Code</A><br>
<A href="license.txt">License</A><br>
<HR>
<A NAME="DESCRIPTION"><B>CODE DESCRIPTION</B></A><br>
<UL>
The code provides an implementation of <A HREF="http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Lorensen87.pdf">Marching-Cubes</A> 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.
<P>
Implementations of Hermite interpolation on adapted octrees can also be found in the code for <A HREF="http://www.cs.jhu.edu/~misha/Code/PoissonRecon">Poisson Surface Reconstruction</A>, <A HREF="http://www.gris.informatik.tu-darmstadt.de/projects/floating-scale-surface-recon/">Floating Scale Surface Reconstruction</A>, and <A HREF="http://www.cs.jhu.edu/~misha/Code/IsoOctree/">Unconstrained Isosurface Extraction on Arbitrary Octrees</A>.
</UL>
<HR>
<A NAME="EXECUTABLE"><B>EXECUTABLE ARGUMENTS</B></A><br>
<UL>
<DL>
<DT><b>--in</b> <<i>input volume</i>>
<DD> 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 <I>ResX</I>*<I>ResY</I>*<I>ResY</I> then the value at index (<I>x,y,z</I>) is at position <I>x</I>+<I>y</I>*<I>ResX</I>+<I>z</I>*<I>ResX</I>*<I>ResY</I>, and are stored in binary format either as unsigned chars (1 byte per value) or as floating point values (4 bytes per value).
<DT><b>--res</b> <<i>x-resolution y-resolution z-resolution</i>>
<DD> This triplet of integer values gives the resolution of the voxel grid.
<DT>[<b>--dim</b> <<i>x-scale y-scale z-scale</i>>]
<DD> This (white-space separated) triplet of floating point values gives the scale of a voxel. (By default, the values are set to 1.)
<DT>[<b>--out</b> <<i>output mesh</i>>]
<DD> This string is the name of the file to which the extracted isosurface will be written. The mesh will be written in the
<A HREF="http://www.cc.gatech.edu/projects/large_models/ply.html">PLY</A> format.
<DT>[<b>--iso</b> <<i>isovalue</i>>]
<DD> This floating point value specifies the isovalue at which the isosurface is to be extracted. (By default, the value is set to 0.)
<DT>[<b>--sIters</b> <<i>smoothing iterations</i>>]
<DD> 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.)
<DT>[<b>--full</b>]
<DD> 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.
<DT>[<b>--flip</b>]
<DD> If specified, the triangle orientation in the output is flipped.
<DT>[<b>--quadratic</b>]
<DD> 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.
<DT>[<b>--polygon</b>]
<DD> 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.
<DT>[<b>--float</b>]
<DD> If specified, the input is read in as a list of floating point values. Otherwise, the input is assumed to represent (unsigned) char values.
<DT>[<b>--flipBytes</b>]
<DD> If specified and floating point values are used, the bytes within each float will be flipped.
<DT>[<b>--nonManifold</b>]
<DD> 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.
</UL>
<HR>
<A HREF="http://www.cs.jhu.edu/~misha">HOME</A>