miércoles, 30 de abril de 2014
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:
Suscribirse a:
Entradas (Atom)