3

I have 3D point clouds and want to reconstruct the surface. I tried various techniques in Meshlab to find the algorithm that best suits my specific kind of cloud.

The poisson surface reconstruction is very promising, but it does not preserve the original point position. After reconstruction and measuring at specific positions in the cloud it turned out that the measurements are off by a factor of over 1.5 compared to measurements on the object in the real world.

The ball pivoting algorithm is better. It preserved the position of the points and the measurements were also within the expected range. However this algorithm is patented in the USA so I can't use it for a commercial project.

After researching other algorithms, I did not find any that preserve the point position like ball pivoting which could be used in a commercial environment. Do you know algorithms that fulfill these two criteria and which I could try with my point cloud to see if they work well before implementing them?

Any help would be appreciated.

RBS
  • 137
  • 1
  • 10
  • Use Alpha-shapes https://en.wikipedia.org/wiki/Alpha_shape. They were published way before the patent, which is nothing new. –  Jul 13 '15 at 14:06
  • I tried alpha shape in Meshlab and it seems not bad. But after comparing it to ball pivot, has some serious flaws. The amount of triangles is too high. Now there is not one mesh that shows the surface, but rather many triangles that overlap each other. I tried simplification of the mesh, but it could not compare to ball pivot. Example Alpha shape wireframe and mesh: http://abload.de/img/alphawireframe69qyf.png http://abload.de/img/alphameshefrbt.png Examples Ball pivot wireframe and mesh: http://abload.de/img/ballpivotwireframe1lqpp.png http://abload.de/img/ballpivotmesh6qrfw.png – RBS Jul 13 '15 at 14:37
  • Alpha shapes and the ball pivot are actually the same method. Did you adjust the radius correctly ? –  Jul 13 '15 at 14:40
  • I adjusted the alpha value a couple of times. But the problem in Meshlab stayed, the triangles overlap all the time. Increasing alpha reduced the amount of triangles, but the overlapping was still bad. Then I tried it in CGAL which didn't produce those overlappings, but it changed the amount of points in the resulting point cloud which I explicitly do not want and produced some artifacts in the cloud which the algorithm in Meshlab didn't. Does anyone know of any other algorithms to use? – RBS Jul 14 '15 at 08:17

1 Answers1

3

For interpolating surface reconstruction (that keeps the datapoints), two algorithms perform reasonably well (crust and co-cone).

Crust algorithm:

The idea is to first compute the Voronoi diagram of the pointset, then select from the Voronoi vertices the ones that are a good approximation of the medial axis (called the poles), then compute the 3D Delaunay triangulation of the input points + the poles, and finally extract the triangles that connect three input points in a tetrahedron where the fourth vertex is a pole.

More references:

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 input data is a good sampling

  • minus: requires to compute two Delaunay triangulations

Co-cone algorithm:

The idea is to compute the Voronoi diagram of the pointset, and then in each Voronoi cell compute a good approximation of the normal to the surface (as the vector that connect the poles, i.e. the two Voronoi vertices furthest away from the datapoint). Then in each Voronoi cell one considers the complement of a cone (co-cone) centered on the datapoint and having the normal as an axis. If three co-cones have a non-empty intersection with a Voronoi edge, then the three datapoints are connected with a triangle. Note that the co-cone objects do not need to be constructed explicitely (just angles need to be compared in order to test whether there is an intersection).

More references:

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

  • Plus: requires a single Delaunay triangulation (compared to 2 for the Crust), some theoretical guarantees if the input data is a "good sampling"

  • Minus: a little bit more complicated than the crust (but worth the effort I think)

Some final words:

These algorithms construct a good (i.e. manifold) surface if the point set realises a good sampling (i.e. density proportional to thickness and curvature, something called "local feature size" = distance to medial axis). In practice, the input data does not satisfy this condition, therefore the output of the method will be a "soup of triangles" that will be mostly OK but that will require some post-processing to fix some local defects.

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

BrunoLevy
  • 2,495
  • 17
  • 30