Modelado 3D de caras humanas

Ayer se celebró la jornada de clausura de las Residencias Estivales 2015 organizada por el Parque Científico de la UVa. Nuestro alumno residente, Javier Gómez Villamayor, presentó los resultados de su trabajo titulado como este mismo post “Modelado 3D de caras humanas”.

El objetivo del trabajo es desarrollar una solución para conseguir mallas cuadrangulares (topológicamente correctas) deformadas para adaptarse a la cara de una persona que es digitalizada utilizando cámaras de tiempo de vuelo convencionales como la Microsoft Kinect. Frente a las soluciones profesionales basadas en capturas sincronizadas y reconstrucción a partir de múltiples vistas utilizando Agisoft PhotoScan, esta residencia se plantea conseguir una alternativa simplificada de bajo coste.

El desarrollo ha sido realizado utilizando la PCL (Point Cloud Library) y la cpu_tsdf que implementa la función TSDF sobre un octree en la CPU, de forma que el número de subdivisiones del grid es adaptado en función de la nube de puntos.

Segmentación de la región correspondiente a la cabeza en la nube de puntos con las normales a cada vértice
Segmentación de la región correspondiente a la cabeza en la nube de puntos con las normales a cada vértice

Los resultados obtenidos muestran la necesidad de utilizar una versión mejorada del algoritmo de alineamiento ICP (Iterate Closest Point) básico. La versión disponible en la PCL acumula un error entre frames consecutivos que hace imposible fusionar todas las nubes en un mismo sistema de referencia. Por este motivo, y con el fin de presentar el pipeline completo, la deformación y proyección del color ha sido realizada utilizando Blender.

Deformación de la malla low poly sobre la superficie de la malla reconstruida
Deformación de la malla low poly sobre la superficie de la malla reconstruida

Una vez obtenidos los resultados es posible utilizarlos directamente para renderización fotorrealista en gráficos por computador, pudiendo realizar retoques en el color para restaurar aquellas regiones donde hubieran podido quedar agujeros (parches sin escanear).

Renerizado en Cycles de la malla de referencia deformada y de la malla reconstruida
Renerizado en Cycles de la malla de referencia deformada y de la malla reconstruida

Este trabajo supone un pequeño paso para resolver un problema más amplio en el que hay que capturar detalles del rostro humano a través de mapas de color que luego puedan ser utilizados para conseguir un renderizado realista en tiempo real. El código que se ha desarrollado es un paquete para el Robot Operating System, disponible en un repositorio de GitLab.

Anímate y dinos que opinas sobre esta entrada