Screened Poisson Surface Reconstruction (Version 8.0)
转自:https://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version8.0/
LINKS
Papers:SGP 2006,ToG 2013
Executables (Win32, Win64)
Source Code GitHub Repository
(Older Versions:V7.0,V6.13a,V6.13,V6.12,V6.11,V6.1,V6,V5.71,V5.6,V5.5a,V5.1,V5,V4.51,V4.5,V4,V3,V2,V1)
PoissonRecon:
--in <input points> This string is the name of the file from which the point set will be read.
If the file extension is .ply, the file should be inPLY format, giving the list of orientedvertices with the x-, y-, and z-coordinates of the positions encoded by the properties x, y, andz and the x-, y-, and z-coordinates of the normals encoded by the properties nx, ny, andnz .
If the file extension is .bnpts, the file should be a binary file, consisting of blocks of 6 32-bitfloats: x-, y-, and z-coordinates of the point's position, followed by the x-, y-, and z-coordinatesof the point's normal. (No information about the number of oriented point samples should be specified.)
Otherwise, 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, followedby 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.[--linearFit] Enabling this flag has the reconstructor use linear interpolation to estimate the positions of iso-vertices.[--degree <B-spline degree>] This integer specifies the degree of the B-spline that is to be used to define the finite elements system.Larger degrees support higher order approximations, but come at the cost of denser system matrices (incurring a cost in both space and time).
The default value for this parameter is 2.[--color <pull factor>] If specified, the reconstruction code assumes that the input is equipped with colors and will extrapolatethe color values to the vertices of the reconstructed mesh. The floating point value specifies the relative importanceof finer color estimates over lower ones. (In practice, we have found that a pull factor of 16 works well.)[--voxel <output voxel grid>] This string is the name of the file to which the sampled implicit function will be written.The filw is wrtten out in binary, with the first 4 bytes corresponding to the (integer) sampling resolution, 2^d,and the next 4 x 2^d x 2^d x 2^d bytes corresponding to the (single precision) floating point valuesof the implicit function.[--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 than2^d x 2^d x 2^d. Note that since the reconstructor adapts the octree to thesampling density, the specified reconstruction depth is only an upper bound.
The default value for this parameter is 8.[--fullDepth <adaptive octree depth>] This integer specifies the depth beyond depth the octree will be adapted.At coarser depths, the octree will be complete, containing all2^d x 2^d x 2^d nodes.
The default value for this parameter is 5.[--voxelDepth <voxel sampling depth>] This integer is the depth of the regular grid over which the implicit function is to be sampled.Running at depth d corresponds to sampling on a voxel grid whose resolution is 2^d x 2^d x 2^d.
The default value for this parameter is the value of the --depth parameter.[--primalVoxel] Enabling this flag when outputing to a voxel file has the reconstructor sample the implicit function at the corners of the grid, rather than the centers of the cells.[--cgDepth <conjugate gradients solver depth>] This integer is the depth up to which a conjugate-gradients solver will be used to solve the linear system. Beyond this depth Gauss-Seidel relaxation will be used.
The default value for this parameter is 0.[--scale <scale factor>] This floating point value specifies the ratio between the diameter of the cube used for reconstructionand the diameter of the samples' bounding cube.
The default value is 1.1.[--samplesPerNode <minimum number of samples>] This floating point value specifies the minimum number of sample points that should fall within anoctree node as the octree construction is adapted to sampling density. For noise-free samples, small valuesin the range [1.0 - 5.0] can be used. For more noisy samples, larger values in the range [15.0 - 20.0] maybe needed to provide a smoother, noise-reduced, reconstruction.
The default value is 1.0.[--pointWeight <interpolation weight>] This floating point value specifies the importants that interpolation of the point samplesis given in the formulation of the screened Poisson equation.
The results of the original (unscreened) Poisson Reconstruction can be obtained by setting this value to 0.
The default value for this parameter is 4.[--iters <GS iters>] This integer value specifies the number of Gauss-Seidel relaxations to be performed at each level of the hiearchy.
The default value for this parameter is 8.[--threads <number of processing threads>] This integer specifies the number of threads across which the reconstructionalgorithm should be parallelized.
The default value for this parameter is equal to the numer of (virtual) processors on the executing machine.[--confidence] Enabling this flag tells the reconstructor to use the size of the normals as confidence information. When the flagis not enabled, all normals are normalized to have unit-length prior to reconstruction.[--nWeights] Enabling this flag tells the reconstructor to use the size of the normals to modulate the interpolation weights. When the flagis not enabled, all points are given the same weight.[--polygonMesh] Enabling this flag tells the reconstructor to output a polygon mesh (rather than triangulating the results of Marching Cubes).[--density] Enabling this flag tells the reconstructor to output the estimated depth values of the iso-surface vertices.[--verbose] Enabling this flag provides a more verbose description of the running times and memory usages ofindividual components of the surface reconstructor.SurfaceTrimmer:
- --in <input triangle mesh>
- This string is the name of the file from which the triangle mesh will be read. The file is read in PLY format and it is assumed that the vertices have a value field which stores the signal's value. (When run with --density flag, the reconstructor will output this field with the mesh vertices.)
- --trim <trimming value>
- This floating point values specifies the value for mesh trimming. The subset of the mesh with signal value less than the trim value is discarded.
- [--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.
- [--smooth <smoothing iterations>]
- This integer values the number of umbrella smoothing operations to perform on the signal before trimming.
The default value is 5. - [--aRatio <island area ratio>]
- This floating point value specifies the area ratio that defines a disconnected component as an "island". Connected components whose area, relative to the total area of the mesh, are smaller than this value will be merged into the output surface to close small holes, and will be discarded from the output surface to remove small disconnected components.
The default value 0.001. - [--polygonMesh]
- Enabling this flag tells the trimmer to output a polygon mesh (rather than triangulating the trimming results).
USAGE
For testing purposes, three point sets are provided:
- Eagle:A set of 796,825 oriented point samples with color (represented in PLY format) was obtained in the EPFL Scanning 3D Statues from Photos course.
- The original Poisson Reconstruction algorithm can be invoked by calling:
using the --pointWeight 0 argument to disable the screening.% PoissonRecon --in eagle.points.ply --out eagle.unscreened.ply --depth 10 --pointWeight 0
- By default, screening is enabled so the call:
produces a reconstruction that more faithfully fits the input point positions.% PoissonRecon --in eagle.points.ply --out eagle.screened.ply --depth 10
- A reconstruction of the eagle that extrapolates the color values from the input samples can be obtained by calling:
using the --color 16 to indicate both that color should be used, and the extent to which finer color estimates should be preferenced over coarser estimates.% PoissonRecon --in eagle.points.ply --out eagle.screened.color.ply --depth 10 --color 16
- Finally, a reconstruction the eagle that does not close up the holes can be obtained by first calling:
using the --density flag to indicate that density estimates should be output with the vertices of the mesh, and then calling:% PoissonRecon --in eagle.points.ply --out eagle.screened.color.ply --depth 10 --color 16 --density
to remove all subsets of the surface where the sampling density corresponds to a depth smaller than 7.% SurfaceTrimmer --in eagle.screened.color.ply --out eagle.screened.color.trimmed.ply --trim 7
Unscreened Screened Screened + Color Screened + Color + Trimmed - The original Poisson Reconstruction algorithm can be invoked by calling:
- Bunny:A set of 362,271 oriented point samples (represented in PLY format) was obtained by merging the data from the original Stanford Bunnyrange scans. The orientation of the sample points was estimatedusing 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.points.ply --out bunny.ply --depth 10
- Horse:A set of 100,000 oriented point samples (represented in ASCII format) 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
As an examples, the reconstructed bunny can be converted into the ASCII mesh format as follows:
% ply2mesh.pl bunny.ply > bunny.m