123456789101112131415161718192021222324252627282930313233343536373839 |
- """Reconstruct a polygonal surface
- from a point cloud:
- 1. An object is loaded and
- noise is added to its vertices.
- 2. The point cloud is smoothened
- with MLS (Moving Least Squares)
- 3. Impose a minimum distance among points
- 4. A triangular mesh is extracted from
- this set of sparse Points.
- """
- from vedo import dataurl, printc, Plotter, Points, Mesh, Text2D
- plt = Plotter(shape=(1,5))
- plt.at(0).show(Text2D(__doc__, s=0.75, font='Theemim', bg='green5'))
- # 1. load a mesh
- mesh = Mesh(dataurl+"apple.ply").subdivide()
- plt.at(1).show(mesh)
- # Add noise
- pts0 = Points(mesh, r=3).add_gaussian_noise(1)
- plt.at(2).show(pts0)
- # 2. Smooth the point cloud with MLS
- pts1 = pts0.clone().smooth_mls_2d(f=0.8)
- printc("Nr of points before cleaning nr. points:", pts1.npoints)
- # 3. Impose a min distance among mesh points
- pts1.subsample(0.005)
- printc(" after cleaning nr. points:", pts1.npoints)
- plt.at(3).show(pts1)
- # 4. Reconstruct a polygonal surface from the point cloud
- reco = pts1.reconstruct_surface(dims=100, radius=0.2).c("gold")
- plt.at(4).show(reco, axes=7, zoom=1.2)
- plt.interactive().close()
|