martes, 1 de abril de 2014

Semana 10

Para esta semana los cambios en el documento de la tesis se definieron en los siguientes rubros:
  • Cambio al título de la tesis: "Uso de marcadores para la sobreposición de modelos 3D en imágenes" => "Uso de marcadores para la sobreposición de modelos tridimensionales en imágenes"
  • Correcciones en las figuras de antecedentes, removiendo repeticiones.
  • Correcciones y adición de contenido al capítulo de solución propuesta.
  • Correcciones y adición de contenido al capítulo de evaluación.
En cuanto a la implementación, para esta semana el avance consistió en colocar sobre el marcador localizado el modelo tridimensional correspondiente, y acomodarlo en su posición, animándolo con una simple rotación para comprobar que es un modelo 3D a diferencia del fondo que es una imagen 2D.

Para ello utilicé el plugin mencionado anteriormente, MeshViewer, que utiliza polígonos de Pygame para crear objetos en 3D en base a vértices que forman triángulos o cuadrados, los cuales a su vez combinados forman caras, para al final combinar éstas y crear modelos 3D. El plugin además permite leer archivos .obj, para a partir de ellos crear modelos más complejos a partir de ellos.

Paso a paso, el proceso es el siguiente:
  • Definir un diccionario de modelos para relacionar marcadores con modelos 3D.
  • Leer el video frame por frame
    • Disminuir el tamaño de la imagen para acelerar el procesamiento (600x400 parece adecuado).
    • Aplicar grayscale, y binarizar la imagen.
    • Localizar y decodificar los marcadores QR en la imagen (ZBar)
    • Para cada marcador.
      • Enmarcarlo en la imagen
      • Calcular su centro
      • Decodificarlo, y usar el valor para obtener el modelo adecuado del diccionario
      • Mostrarlo en el centro del marcador correspondiente
      • Rotarlo para mostrar una animación 3D.
El diccionario es usado de referencia para poder relacionar los modelos 3D a los marcadores decodificados. Entonces si tenemos un diccionario como el siguiente:

{
    "modelo1" :  "modelo1.obj",
    "modelo2  :  "modelo2.obj"
                    ... 
}

Entonces lo que se tiene es una relación marcador => objeto tridimensional.

 

Teniendo el diccionario de referencias, se recorre el video frame por frame, aplicando procesamiento de imágenes básico a las mismas como:
  • Grayscale:

  • Binarización:

Lo siguiente, se pasa esta imagen a ZBar para localizar y decodificar todos los marcadores en la imagen.
Estos se enmarcan con un rectángulo rojo, se calcula su centro y sobre el se coloca el modelo correspondiente. El resultado es el siguiente:



El código está disponible en el repositorio: