meshlab stuff
TRANSCRIPT
MeshLab Stuff
Los experimentos prácticos de procesamiento Mesh
Lunes, 07 de septiembre 2009
Mallado nubes de puntos
Una de las tareas más solicitado en la gestión de los datos de escaneo 3D es la conversión
de las nubes de puntos en mallas triangulares más prácticas. He aquí una guía paso a paso
para la transformación de una nube de puntos en bruto en una malla de color.
A partir de una nube de puntos de color (salida típica de muchos dispositivos de escaneado
en 3D), cada punto tiene sólo el color y no hay información normal. En el ejemplo de
conjunto de datos que vamos a utilizar es un conjunto de datos de tamaño medio de 9
millones de puntos. Los problemas típicos de este tipo de conjunto de datos un conjunto de
datos: es no uniforme (proviene de una integración de diferentes conjuntos de datos), tiene
un cierto error fuertemente sesgada (error de alineación, algún problema durante la
integración de datos), se trata sin normales (difícil de ser sombreada).
1. Submuestreo
Como primer paso, se reduce un poco el conjunto de
datos con el fin de tener amore conjunto de datos manejable. Hay muchas opciones
diferentes aquí. Tener un submuestreo bien espaciados es una buena manera de
hacer algo de computación de una manera más rápida. El filtro de muestreo de
muestreo-> Poisson disco es una buena opción. A pesar de que fue diseñado para
crear muestras de discos de Poisson sobre una malla, es capaz de calcular también el
disco Poisson submuestreo de una nube de puntos determinado (recuerde revisar
variable lógica del "submuestreo"). Para los curiosos, que utiliza un algoritmo muy
similar a la de papel dardo que lanza presentado en EGSR2009 (excepto que hemos
lanzado código para tal algorith mucho antes de la publicación de este artículo :)).
En la figura de la invisible un submuestreo disco Poisson de sólo 66k vértices.
2. Reconstrucción normal
Actualmente dentro MeshLab la construcción de las
normales de una nube de puntos no está especialmente optimizado (yo no aplicarlo
sobre nubes de puntos 9M) lo que a partir de malla más pequeña puede dar
resultados mejores y más rápidos. Puede utilizar esta pequeña nube de puntos a
emitir una reconstrucción de la superficie rápida (usando la reconstrucción
remallado-> superficie de Poisson) y luego transferir las normales de esta pequeña
superficie rugosa a la nube de puntos originales. Es evidente que de esta forma la
nube de puntos completa tendrá un campo normal que es, con mucho más suave de
lo necesario, pero esto no es un problema para la mayoría de los algoritmos de
reconstrucción de la superficie (pero no es un problema si desea utilizar estas
normales para dar sombra!).
3. Reconstrucción de superficies
Una vez que las normales en bruto están disponibles
reconstrucción de la superficie de Poisson es una buena opción. Uso de la nube de
puntos original con las normales calculados que construimos una superficie en la
resolución más alta (nivel de recursividad 11). Alrededor de limpiar la eliminación
de grandes rostros de filtro, y, finalmente, simplificar un poco (quitar el 30% de las
caras) con remallado-> clásica filtro simplificación colapso borde Quadric (muchos
filtros de superficie implícitas se basan en marcha cubo como algoritmos y dejan
pequeños triángulos inútiles).
4. Recuperar color original
Aquí tenemos dos opciones, color de la recuperación
como una textura o el color de la recuperación como el color por vértice. Aquí
vamos a por el segundo, dejando a los primeros a un próximo post donde iremos en
más detalles sobre el nuevo material parametrización automática que estamos
agregando en MeshLab. Obviamente, si se almacena en color en vértices es
necesario tener una malla muy densa, más o menos de la misma magnitudo de la
nube de puntos original, por lo que probablemente refinar grandes caras un poco te
puede ayudar. Después de refinar la malla simplemente transfiere el atributo de
color de la nube de puntos original a la superficie reconstruida utilizando el filtro de
transferencia de atributos vértice.
5. La limpieza y la evaluación de
El filtro de transferencia de atributos vértice utiliza
una simple heurística punto más cercano para que coincida con los puntos entre las
dos mallas. Como producto secundario se puede almacenar (en el multiuso calidad
escalar por vértice) la distancia de los puntos coincidentes. Ahora sólo tienes que
seleccionar las caras con vértices cuya distancia es mayor que un umbral dado,
podemos eliminar fácilmente las caras redundantes creados por la reconstrucción de
la superficie de Poisson.
Esta tubería es sólo una de las muchas maneras posibles de acabar en un agradable malla.
Por ejemplo diferentes opciones se podrían haber hecho para el paso 2/3. Hay algoritmos de
reconstrucción que no necesitan normales de la superficie, como por ejemplo el "Voronoi
Filtering", que es un algoritmo de reconstrucción de la interpolación (por ejemplo, que la
acumulación sólo triángulos en los puntos de entrada dados) pero por lo general estos filtros
funcionan mejor en los conjuntos de datos muy limpias, sin ruido o errores de alineación.
De lo contrario en los conjuntos de datos ruidosos, es fácil que crean una gran cantidad de
situaciones que no son múltiples. Finales gracias a Denis Pitzalis por darme este bonito
conjunto de datos de un teatro-chipriota.
MeshLab Stuff
Practical Mesh Processing Experiments
Monday, September 7, 2009
Meshing Point Clouds
One of the most requested tasks when managing 3D scanning data is the conversion of
point clouds into more practical triangular meshes. Here is a step-by-step guide for
transforming a raw point cloud into a colored mesh.
Let's start from a colored point cloud (typical output of many 3D scanning devices), each
point has just color and no normal information. The example dataset that we will use is a
medium sized dataset of 9 millions of points. Typical issues of such a dataset dataset: it is
non uniform (comes from an integration of different datasets), has some strongly biased
error (alignment error, some problem during data integration), it comes without normals
(hard to be shaded).
1. Subsampling
As a first step we reduce a bit the dataset in order to
have amore manageable dataset. Many different options here. Having a nicely
spaced subsampling is a good way to make some computation in a faster way. The
Sampling->Poisson Disk Sampling filter is a good option. While it was designed to
create Poisson disk samples over a mesh, it is able to also compute Poisson disk
subsampling of a given point cloud (remember to check the 'subsampling' boolean
flag). For the curious ones, it uses an algorithm very similar to the dart throwing
paper presented at EGSR2009 (except that we have released code for such an
algorith long before the publication of this article :) ). In the invisible side figure a
Poisson disk subsampling of just 66k vertices.
2. Normal Reconstruction
Currently inside MeshLab the construction of
normals for a point cloud is not particularly optimized (I would not apply it over 9M
point cloud) so starting from smaller mesh can give better, faster results. You can
use this small point cloud to issue a fast surface reconstruction (using Remeshing-
>Poisson surface reconstruction ) and then transfer the normals of this small rough
surface to the original point cloud. Obviously in this way the full point cloud will
have a normal field that is by far smoother than necessary, but this is not an issue
for most surface reconstruction algorithms (but it is an issue if you want to use these
normals for shading!).
3. Surface reconstruction
Once rough normals are available Poisson surface
reconstruction is a good choice. Using the original point cloud with the computed
normals we build a surface at the highest resolution (recursion level 11). Roughly
clean it removing large faces filter, and eventually simplify it a bit (remove 30% of
the faces) using classical Remeshing->Quadric edge collapse simplification filter
(many implicit surface filters rely on marching cube like algorithms and leave
useless tiny triangles).
4. Recovering original color
Here we have two options, recovering color as a
texture or recovering color as per-vertex color. Here we go for the latter, leaving the
former to a next post where we will go in more details on the new automatic
parametrization stuff that we are adding in MeshLab. Obviously if you store color
onto vertexes you need to have a very dense mesh, more or less of the same
magnitudo of the original point cloud, so probably refining large faces a bit could be
useful. After refining the mesh you simply transfer the color attribute from the
original point cloud to the reconstructed surface using the vertex attribute transfer
filter.
5. Cleaning up and assessing
The vertex attribute transfer filter uses a simple
closest point heuristic to match the points between the two meshes. As a side
product it can store (in the all-purpose per-vertex scalar quality) the distance of the
matching points. Now just selecting the faces having vertices whose distance is
larger than a given threshold we can easily remove the redundant faces created by
the Poisson Surface Reconstruction.
This pipeline is only one of the many possible way of ending up into a nice mesh. For
example different choices could have been done for step 2/3. There are reconstruction
algorithms that do not need surface normals, like for example the "Voronoi Filtering" that
is an interpolating reconstruction algorithm (eg it build up only triangles on the given input
points) but usually these filters works better on very clean datasets, without noise or
alignment errors. Otherwise on noisy datasets it is easy that they create a lot of non
manifold situations. Final thanks to Denis Pitzalis for providing me this nice dataset of a
Cypriot theater.