3D surface reconstruction by maintaining point position

I have 3D point clouds and want to reconstruct the surface. I tried various methods in Meshlab to find the algorithm that works best for my particular cloud type.

Surface Poisson reconstruction is very promising, but does not preserve the original point position. After reconstruction and measurement at certain positions in the cloud, it turned out that the measurements were disabled by more than 1.5 times compared to measurements on the object in the real world.

The ball joint algorithm is better. It saved the position of the points and the measurements were also within the expected range. However, this algorithm is patented in the USA, so I cannot use it for a commercial project.

After researching other algorithms, I have not found one that retains the point position, such as a ball-and-socket joint, that could be used in a commercial environment. Do you know algorithms that meet these two criteria that I could try with a cloud of glasses to see if they work well before implementing them?

Any help would be appreciated.

+3


source to share


1 answer


For interpolating surface reconstruction (which stores data), two algorithms work well enough (crust and cones).

Corky's algorithm:

The idea is to first calculate the Voronoi diagram of the diagram, then select from the Voronoi vertices those that are a good approximation of the medial axis (called the poles), and then calculate the 3D triangle of the incoming points + poles, and finally extract the triangles connecting the three points entrance to the tetrahedron, where the fourth vertex is the pole.

Additional links:

http://web.cs.ucdavis.edu/~amenta/pubs/crust.pdf

http://web.mit.edu/manoli/crust/www/crust.html

  • plus: quite simple to implement, some theoretical guarantees if the input is a good sample

  • minus: it is required to calculate two Delaney triangulations

Co-cone algorithm:



The idea is to compute a Voronoi diagram and then, in each Voronoi cell, compute a good approximation of the surface normal (as a vector connecting the poles, i.e. the two Voronoi vertices farthest from the data point). Then, in each Voronoi cell, the complement of a cone (cone) centered on the datapoint and having a normal axis is considered. If three cones have a non-empty intersection with a Voronoi edge, then the three data points are associated with a triangle. Note that the co-cone objects do not need to be constructed explicitly (you just need to compare the angles to check if there is an intersection).

Additional links:

http://web.cse.ohio-state.edu/~tamaldey/surfrecon.htm

  • Plus: one Delaunay triangulation required (versus 2 for Corky), some theoretical guarantees if the input is a "good sample"

  • Negative: A bit harder than bark (but worth what I think)

Some last words:

These algorithms produce a good (ie manifold) surface if the point set realizes a good sampling (ie density proportional to thickness and curvature, which is called "local object size" = distance to medial axis). In practice, the input does not satisfy this condition, so the output of the method will be a "soup of triangles" which will be mostly OK, but some post-processing will be required to fix some local defects.

Edit 03/21/16 You can also try my own algorithm (Co3Ne) implemented in my Geogram software library ( http://alice.loria.fr/software/geogram/doc/html/index.html ) and my software Graphite software ( http://alice.loria.fr/software/graphite/doc/html/ ). The graphite can be downloaded there: http://gforge.inria.fr/frs/?group_id=1465 (both portable source and Windows64 executable). It is a Co-cone shape with various optimizations and parallel implementation.

+3


source







All Articles