IIC3912 - Tópicos Avanzados de Gráfica Computacional

Francisca T. Gil-Ureta ⋅ 2026

cover.png


De imágenes a estructura

En la clase pasada vimos los pasos para, a partir de un set de imágenes, reconstruir una nube densa de puntos con normales.

El problema siguiente es convertir eso en una malla triangular (3D Triangle Mesh) sin saber la conectividad de los puntos.

Surface Reconstruction

En COLMAP, dos métodos comunes para esta etapa son Poisson y Delaunay-based meshing. Ambos parten de la nube densa, pero hacen supuestos distintos sobre cómo inferir la superficie.

Poisson Surface Reconstruction

En este enfoque, la idea principal es que en vez de conectar puntos directamente, vamos a reconstruir una función que describa la forma.

Esa función se conoce como la función indicadora de la forma. Intuitivamente, esta función nos dice si un punto del espacio está adentro o afuera del objeto.

$\bold{f}(\bold{x}) = \begin{cases} 1 & \text{si } \bold{x} \in M\\ 0 & \text{si } \bold{x} \notin M\end{cases}$

Entonces, en vez de pensar primero en triángulos o conectividad, pensamos en una función continua sobre todo el espacio. Y después, la superficie aparece como la frontera entre el interior y el exterior.

Ahora la pregunta es: si solo tenemos una nube de puntos con normales, ¿cómo reconstruimos esa función?

La clave es que cada punto $\bold{p}_i$ tiene una normal orientada $\bold{n}_i$. Esa normal nos entrega información local sobre cómo está orientada la superficie en ese lugar. Las normales actuan como “pistas” sobre el comportamiento de la función localmente — cada punto se convierte en un sample point de la función que buscamos.

image.png

Si uno lo piensa geométricamente, la normal apunta en la dirección en que cambia la función entre adentro y afuera. Por eso, las normales nos dan información sobre el gradiente de esa función indicadora; sabemos cómo debería comportarse la derivada en distintos puntos del espacio.

$\bold{v}(\bold{x}) = \begin{cases} \bold{n}_i & \text{if sample point } \bold{p}_i\\ 0 & \text{else}\end{cases}$

<aside> 💡

Eso es justamente lo que explota Poisson: usar las normales como restricciones para reconstruir una superficie global, suave y coherente

</aside>