简体   繁体   中英

Noisy 3D point cloud to interpolated surface mesh in python

My general goal is going from a noisy point cloud describing a surface, to a regular surface mesh, in Python . I have found a few solution to this problem, none of which apply to my case well enough . The best ones I found:

  • B-spline -> sample it -> get new points. This calculates the z values of a function based on a regular set of x,y coordinates, which won't work well for near-vertical surfaces, of which I have a lot.
  • Rolling ball / convex hull algorithms. My data is noisy along the normal to the surface, so I would get a surface that's "inflated". I would need first to denoise it, which itself requires the calculation of a spline, or something similar.

I feel like there must be an "easy" way to do this, but I just don't know what to look for. Can someone point me in the right direction?

My best guess is that there should be a way to sample a spline surface "regularly" relatively to itself, but I can't figure out how.

The problem which you describe is named surface reconstruction . There is many algorithms and software (standalone program or libraries) able to reconstruct one surface from a set of sample points. There is important differences depending if you have only the XYZ coordinates of the points, or you have more information as the color or the normal to the surface.

Naming some examples, you can use:

  • Screened Poisson , by Kazhdan and Bolitho. Which is implemented in meshlab, and many other python libraries. Probably your best option.
  • PowerCRUST , by Nina Amenta, Sunghee Choi and Ravi Kolluri.
  • Ball Pivoting , by Bernardini, Mittleman, et al. Quite simple and easy to implement by yourself.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM