Poisson Surface Reconstruction (Version 3)
links
executable
usage
changes
LINKS
SGP 2006 Paper
Executables (Win32, Win64)
Source Code
(Older Versions:
Version 2 Page
Version 1 Page)
License
EXECUTABLE ARGUMENTS
- --in <input points>
- This string is the name of the file from which the point set will be read.
If the --binary flag is not enabled, the file should be an ascii file with groups of 6,
white space delimited, numbers (x-, y-, and z-coordinates of the point's position, followed
by the x-, y-, and z-coordinates of the point's normal).
If the --binary flag is enabled, the file should be a binary file, consisting of blocks of 6 32-bit
floats (x-, y-, and z-coordinates of the point's position, followed by the x-, y-, and z-coordinates
of the point's normal).
No information about the number of oriented point samples should be specified.
- --out <output triangle mesh>
- This string is the name of the file to which the triangle mesh will be written.
The file is written in PLY format.
- [--binary]
- If this argument is specified the input samples will be read in as a binary file.
- [--depth <reconstruction depth>]
- This integer is the maximum depth of the tree that will be used for surface reconstruction.
Running at depth d corresponds to solving on a voxel grid whose resolution is no larger than
2^d x 2^d x 2^d. Note that since the reconstructor adapts the octree to the
sampling density, the specified reconstruction depth is only an upper bound.
The default value for this parameter is 8.
- [--scale <scale factor>]
- This floating point value specifies the ratio between the diameter of the cube used for reconstruction
and the diameter of the samples' bounding cube.
The default value is 1.1.
- [--solverDivide <solver subdivision depth>]
- This integer argument specifies the depth at which a block Gauss-Seidel solver is used to solve the
Laplacian equation. Using this parameter helps reduce the memory overhead at the cost of a small increase
in reconstruction time. (In practice, we have found that for reconstructions of depth 9 or higher a subdivide
depth of 7 or 8 can greatly reduce the memory usage.)
The default value is 8.
- [--isoDivide <iso-surface extraction subdivision depth>]
- This integer argument specifies the depth at which a block iso-surface extractor should be used to
extract the iso-surface. Using this parameter helps reduce the memory overhead at the cost of a small increase
in extraction time. (In practice, we have found that for reconstructions of depth 9 or higher a subdivide
depth of 7 or 8 can greatly reduce the memory usage.)
The default value is 8.
- [--samplesPerNode <minimum number of samples>]
- This floating point value specifies the minimum number of sample points that should fall within an
octree node as the octree construction is adapted to sampling density. For noise-free samples, small values
in the range [1.0 - 5.0] can be used. For more noisy samples, larger values in the range [15.0 - 20.0] may
be needed to provide a smoother, noise-reduced, reconstruction.
The default value is 1.0.
- [--confidence]
- Enabling this flag tells the reconstructor to use the size of the normals as confidence information. When the flag
is not enabled, all normals are normalized to have unit-length prior to reconstruction.
- [--polygonMesh]
- Enabling this flag tells the reconstructor to output a polygon mesh (rather than triangulating the results of Marching Cubes). This option over-rides the --manifold flag.
- [--manifold]
- Enabling this flag tells the reconstructor to add the polygon barycenter when triangulating polygons with more than three vertices.
- [--verbose]
- Enabling this flag provides a more verbose description of the running times and memory usages of
individual components of the surface reconstructor.
USAGE
For testing purposes, two oriented point sets are provided:
- Horse:
A set of 100,000 oriented point samples was obtained by sampling a virtual horse model with a sampling density proportional to curvature, giving
a set of non-uniformly distributed points.
The surface of the model can be reconstructed by calling the surface reconstructor as follows:
% PoissonRecon --in horse.npts --out horse.ply --depth 10
Note that since the input file is in ascii format, the --binary flag is not used for reconstruction.
- Bunny:
A set of 362,272 oriented point samples was obtained by merging the data from the original Stanford Bunny
range scans. The orientation of the sample points was estimated
using the connectivity information within individual range scans.
The surface of the model can be reconstructed by calling the surface reconstructor as follows:
% PoissonRecon --in bunny.bnpts --out bunny.ply --depth 10 --binary --solverDivide 8
Note that since the input file is in binary format, the --binary flag is used for reconstruction.
Furthermore, to keep the memory overhead of the reconstructor below 1.5 GB, the --solverDivide flag is specified, so that
a block Gauss-Seidel solver is used to solve the Poisson equation for depths larger than 8.
To convert the binary PLY format to
Hugues Hoppe's ASCII
mesh format, a Perl script is provided.
As an examples, the reconstructed bunny can be converted into the ASCII mesh format as follows:
% ply2mesh.pl bunny.ply > bunny.m
CHANGES
This version of the code differs from the earlier version in two ways:
- The implementation of the --samplesPerNode parameter has been modified so that a value of "1" more closely corresponds to a distribution with one sample per leaf node.
- The code has been modified to support compilation under MSVC 2010 and the associated solution and project files are now provided. (Due to a bug in the Visual Studios compiler, this required modifying the implementation of some of the bit-shifting operators.)
HOME