Algorithm for simplifying 3d surface?

后端 未结 7 887
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-07 11:22

I have a set of 3d points that approximate a surface. Each point, however, are subject to some error. Furthermore, the set of points contain a lot more points than is actually n

相关标签:
7条回答
  • 2021-02-07 11:56

    I'd approach this by looking for vertices (points) that contribute little to the curvature of the surface. Find all the sides emerging from each vertex and take the dot products of pairs (?) of them. The points representing very shallow "hills" will subtend huge angles (near 180 degrees) and have small dot products.

    Those vertices with the smallest numbers would then be candidates for removal. The vertices around them will then form a plane.

    Or something like that.

    0 讨论(0)
  • 2021-02-07 12:00

    Instead of dealing with it as a point cloud, I would recommend triangulating a mesh using Delaunay triangulation: http://en.wikipedia.org/wiki/Delaunay_triangulation

    Then decimate the mesh. You can research decimation algorithms, but you can get pretty good quick and dirty results with an algorithm that just merges adjacent tris that have similar normals.

    0 讨论(0)
  • 2021-02-07 12:05

    There exist several different techniques for point-based surface model simplification, including:

    • clustering;
    • particle simulation;
    • iterative simplification.

    See the survey:

    M. Pauly, M. Gross, and L. P. Kobbelt. Efficient simplification of point- sampled surfaces. In Proceedings of the conference on Visualization’02, pages 163–170, Washington, DC, 2002. IEEE.

    0 讨论(0)
  • 2021-02-07 12:06

    unless you parametrise your surface in some way i'm not sure how you can decide which points carry similar information (and can thus be thrown away).

    i guess you can choose a bunch of points at random to get rid of, but that doesn't sound like what you want to do.

    maybe points near each other (for some definition of 'near') can be considered to contain similar information, and so reduced to single representatives for each such group.

    could you give some more details?

    0 讨论(0)
  • 2021-02-07 12:09

    I think you are looking for 'Level of detail' algorithms.

    A simple one to implement is to break your volume (surface) into some number of sub-volumes. From the points in each sub-volume, choose a representative point (such as the one closest to center, or the closest to the average, or the average etc). use these points to redraw your surface.

    You can tweak the number of sub-volumes to increase/decrease detail on the fly.

    0 讨论(0)
  • 2021-02-07 12:10

    Google for Hugues Hoppe and his "surface reconstruction" work.

    Surface reconstruction is used to find a meshed surface to fit the point cloud; however, this method yields lots of triangles. You can then apply mesh a reduction technique to reduce the polygon count in a way to minimize error. As an example, you can look at OpenMesh's decimation methods.

    OpenMesh

    Hugues Hoppe

    0 讨论(0)
提交回复
热议问题