2010-07-26 22 views
13

Tengo un conjunto de puntos 3d que se aproximan a una superficie. Cada punto, sin embargo, está sujeto a algún error. Además, el conjunto de puntos contiene muchos más puntos de los que realmente se necesitan para representar la superficie subyacente.Algoritmo para simplificar la superficie 3D?

Lo que estoy buscando es un algoritmo para crear un nuevo conjunto de puntos (mucho más pequeño) que representa una versión simplificada y más suave de la superficie (perdón por no tener una mejor definición que "simplificado, más suave"). La superficie subyacente no es matemática, así que no espero ajustar el conjunto de datos a alguna función matemática.

+0

No se puede obtener una superficie más lisa y simple. Es uno o el otro. –

+0

@Mikulas Dite técnicamente no puede (más puntos, más complicado). Pero visualmente, si elimina los valores atípicos, la curva puede parecer más suave y menos complicada. –

+0

Podría obtener una superficie más simple con menos puntos si la superficie es ruidosa, como un escaneo láser de alta resolución de un cubo. Esto es como pedir un filtro de paso bajo para superficies 3D. – darron

Respuesta

7

En lugar de tratar con ella como una nube de puntos, recomendaría una malla triangular usando la triangulación de Delaunay: http://en.wikipedia.org/wiki/Delaunay_triangulation

Entonces diezmar a la malla. Puede investigar algoritmos de diezmado, pero puede obtener buenos resultados rápidos y sucios con un algoritmo que simplemente combina tris adyacentes que tienen normales similares.

+1

Recuerdo haber aprendido en la escuela que hay superficies para las que no existe triangulación (en 3D). Si al OP no le preocupa tropezar con una superficie de este tipo, está bien. – ldog

+0

Realmente depende de la propiedad de los datos de su nube de puntos. Si se trata de una grilla de puntos como un mapa de altura, entonces este enfoque será muy sencillo. Si se trata de una nube de puntos más amorfa, puede que esto no funcione para usted. Hay aplicaciones completas dedicadas a generar superficies a partir de datos de nubes de puntos complejos, por lo que este es un problema bastante difícil si no está restringido. – bshields

+0

Delauney solo es realmente bueno para 2.5D, pero para los datos de altura es una muy buena forma de comenzar antes de volver a cuadricular –

1

Creo que está buscando algoritmos 'Nivel de detalle'.

Uno de los más fáciles de implementar es dividir su volumen (superficie) en una cantidad determinada de subvolúmenes. De los puntos en cada subvolumen, elija un punto representativo (como el más cercano al centro, o el más cercano al promedio, o el promedio, etc.). usa estos puntos para redibujar tu superficie.

Puede ajustar el número de subvolúmenes para aumentar/disminuir los detalles sobre la marcha.

0

menos que parametrizar la superficie de alguna manera no estoy seguro de cómo se puede decidir que apunta llevar información similar (y por lo tanto puedan ser proyectados).

Creo que se puede elegir un montón de puntos al azar para deshacerse de, pero eso no suena como lo que usted quiere hacer.

puntos tal vez cerca unos de otros (por alguna definición de 'cerca') pueden ser considerados para contener información similar, y así reduce a representantes individuales para cada uno de tales grupos.

¿Podría darnos más detalles?

1

Me acercaría a esto buscando vértices (puntos) que contribuyan poco a la curvatura de la superficie. Encuentra todos los lados que salen de cada vértice y toma los productos de puntos de pares (?) De ellos. Los puntos que representan "colinas" muy poco profundas subtendrán ángulos enormes (cerca de 180 grados) y tendrán pequeños productos de puntos.

Aquellos vértices con los números más pequeños podrían ser eliminados. Los vértices que los rodean formarán un plano.

O algo así.

1

Google para Hugues Hoppe y su trabajo de "reconstrucción de superficie".

La reconstrucción de superficie se utiliza para encontrar una superficie mallada que se ajuste a la nube de puntos; sin embargo, este método produce lotes de triángulos. A continuación, puede aplicar una técnica de reducción de malla para reducir el recuento de polígonos de forma que se minimice el error. Como ejemplo, puedes ver los métodos de aniquilación de OpenMesh.

OpenMesh

Hugues Hoppe

1

Existen varias técnicas diferentes para basado en puntos modelo simplificación superficie, incluyendo:

  • agrupación;
  • simulación de partículas;
  • simplificación iterativa.

Ver la encuesta:

M. Pauly, M. Gross, y L. P. Kobbelt. Simplificación eficiente de las superficies muestreadas en el punto . En Actas de la conferencia sobre Visualización '02, páginas 163-170, Washington, DC, 2002. IEEE.

+2

¡Bienvenido a Stackoverflow! ¿Podría agregar más detalles a su respuesta (por ejemplo, agregar descripciones de técnicas)? Las respuestas en stackoverflow necesitan tener suficiente información para comprender la respuesta. Las respuestas solo de enlace están [desaconsejadas] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer) –

0

Es más sencillo simplificar una nube de puntos sin las restricciones de los triángulos e índices de malla.

suavizado y la simplificación son tareas diferentes sin embargo. Para simplificar la nube, primero debe deshacerse de los artefactos de ruido haciendo un perfil del tipo de ruido que tiene, su frecuencia y características direccionales y hacer un perfil de ruido en comparación con la reducción de tipo. buenos vectores normales son helfpul para eso.

aquí es un documento de 5-6 simplificaciones utilizando Delaunay, Voronoi, y K vecinos más cercanos de matemáticas:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.10.9640&rep=rep1&type=pdf

Una versión posterior a 2008: http://www.wseas.us/e-library/transactions/research/2008/30-705.pdf

que aquí hay una reciente C++ versión: https://github.com/tudelft3d/masbcpp/blob/master/src/simplify.cpp

Cuestiones relacionadas