Story Transcript
UNIVERSIDAD DE MONTEMORELOS FACULTAD DE INGENIERIA Y TECNOLOGIA
SISTEMA DE PROYECCIÓN DE CONTENIDO EN TRES DIMENSIONES RELATIVO A LA POSICIÓN DEL OBSERVADOR
PROYECTO PRESENTADO EN CUMPLIMIENTO PARCIAL DE LOS REQUISITOS PARA EL GRADO DE INGENIERIA EN SISTEMAS COMPUTACIONALES
POR JAZIEL ELIAS OLMEDO HUERTA GABRIEL OMAR TRISCA Mayo de 2011
RESUMEN DE PROYECTO DE PREGRADO
Universidad de Montemorelos Facultad de Ingeniería y Tecnología
Título: SISTEMA DE PROYECCIÓN DE CONTENIDO EN TRES DIMENSIONES DEPENDIENTE DE LA POSICIÓN DEL OBSERVADOR
Investigadores: Jaziel Elías Olmedo Huerta y Gabriel Omar Trisca Asesor: Daniel Gutiérrez Colorado, Maestro en Ciencias con especialidad en Comunicación Fecha de Terminación: Mayo de 2011.
Problema ¿Cómo brindar una experiencia de visualización de contenido digital en tres dimensiones e interacción con el usuario a un costo accesible? ¿Qué técnicas de diseño, desarrollo y fabricación deben emplearse para poder crear un sistema con dichas características? Método Existen actualmente dispositivos y sistemas capaces de ofrecer al consumidor experiencia tres dimensiones y de reconocimiento facial. Sin embargo algunas de estas tecnologías son económicamente poco alcanzables para la población media mexicana. Como parte de esta
investigación y creación del proyecto, se buscaron y probaron diferentes materiales y tecnologías necesarias para crear un sistema con las características deseadas utilizando dispositivos de costos accesibles al hogar.
Resultados El proyecto se evaluó cualitativamente cumpliendo con todos los objetivos descritos. Los diferentes elementos que componen el sistema, tanto de software como físicos, probaron cumplir con las expectativas y los requerimientos para crear una experiencia interactiva con contenido tridimensional a bajo costo.
Conclusiones Se puede afirmar que el proyecto cumple con los objetivos propuestos de proveer un sistema de proyección económico y de tracking, que con ciertas limitaciones centra las bases para continuar esta línea de investigación en futuros proyectos interesados en ofrecer una interacción visual de bajo costo.
TABLA DE CONTENIDO LISTA DE FIGURAS ............................................................................................................vii LISTAS DE TABLAS ...........................................................................................................ix Capítulo I. INTRODUCCIÓN .....................................................................................................1 Antecedentes .........................................................................................................1 Justificación ...........................................................................................................4 Definición del problema ........................................................................................6 Declaración del problema......................................................................................6 Preguntas de investigación ....................................................................................6 Objetivos ...............................................................................................................7 Definición de términos .......................................................................................... 8 Limitaciones .........................................................................................................10 Delimitaciones ......................................................................................................10 II. MARCO TEÓRICO ...................................................................................................12 Interacción ............................................................................................................12 Tecnologías ..........................................................................................................14 Conceptos .......................................................................................................14 Visión por computadora .......................................................................14 Estereoscopía ........................................................................................15 Tecnologías de emisión y recepción ............................................................ 18 Espacios de color .................................................................................19 Proyector de video .........................................................................................23 Pantalla de proyección ..................................................................................24 Cámara web ...................................................................................................24 Principios básicos de la reflexión de la luz ........................................................25 Filtro de desenfoque Gaussiano .........................................................................28 Programación ......................................................................................................30 Python.............................................................................................................31 OpenCV ..........................................................................................................31 Soya3D ...........................................................................................................32 Generación de contenido en tres dimensiones ....................................................32
v
III. METODOLOGÍA ......................................................................................................34 Características del proyecto ................................................................................34 Planificación ........................................................................................................35 Costos ...................................................................................................................37 Diseño ..................................................................................................................39 Software ..............................................................................................................40 Algoritmo de Determinación de Posición del Observador ........................... 42 Generación de contenido tres dimensiones estéreo .......................................47 Integración de DPO y motor tres dimensiones ............................................48 Equipo físico ........................................................................................................48 Espejos ...........................................................................................................48 Polarizadores ..................................................................................................50 Superficie de proyección ...............................................................................50 Lentes y marcadores .......................................................................................55 IV. RESULTADOS ..........................................................................................................55 V. CONCLUSIONES Y TRABAJOS FUTUROS .........................................................59 Conclusiones .......................................................................................................59 En cuanto al sistema desarrollado .................................................................60 En cuanto al problema .......................................................................................... 60 En cuanto al impacto de un sistema similar presentado en este proyecto en el mundo del entretenimiento .........................................................................61 Trabajos futuros ....................................................................................................61 En mejoras al producto desarrollado ............................................................. 61 En otras tecnologías ......................................................................................62 Apéndice A. CÓDIGO FUENTE EN PYTHON 2.6 ....................................................................64
LISTAS DE REFERENCIAS ............................................................................................... 81
vi
LISTA DE FIGURAS 1. Gráfica del crecimiento en ingresos por el desarrollo en tres dimensiones ............... 3 2. Efecto observado por el usuario................................................................................. 4 3. Gráfica que muestra la alza en el consumo de dispositivos en tres dimensiones. ..... 5 4. Ilustración de la separación de la imagen mediante espejos pasando a través del Polarizador ................................................................................................................. 7 5. Muestra de anteojos de sistema anáglifo ................................................................... 16 6. Muestra de lentes de sistema polarizado.................................................................... 17 7. Muestra de sistema Infitec ......................................................................................... 18 8. Representación del modelo de color HSV ................................................................. 21 9. El modelo de color HSV para el tono 240° ............................................................... 22 10. Diferencia de la representación de los modelos RGB y HSV .................................. 23 11. Ilustración de la reflexión de una luz sobre una superficie........................................ 25 12. Valores arrojados por una función Gaussiana en 2 dimensiones……………………29 13. Separación de la imagen en las perspectivas para cada ojo (Las diferencias fueron exageradas en esta ilustración) ................................................................................. 39 14. Ilustración de la división de la imagen mediante espejos .......................................... 40 15. Imagen captada por la webcam de un marcador a dos distancias diferentes ............ 44 16. Relación Ancho/Distancia, los puntos son los datos experimentales, la curva es la función calculada por ZunZun .......................................................................... 46 17. Distancias y ángulos entre componentes ................................................................... 49 vii
18. Sistema para prueba de potenciales materiales para proyección de luz polarizada .................................................................................................................. 51 19. Ilustración que muestra el cambio y pérdida de tonalidad dependiendo el ángulo de perspectiva ............................................................................................................ 52 20. Lentes polarizados y marcador. ................................................................................. 54 21. Configuración de hardware final ............................................................................... 55
viii
LISTA DE TABLAS
1. Costos de materiales .................................................................................................. 37 2. Evaluación de motores gráficos tres dimensiones escritos en Python ....................... 41 3. Equivalencia ancho en pixeles/distancia.................................................................... 45
ix
CAPÍTULO I
INTRODUCCIÓN
Antecedentes Desde los albores de la civilización, las diferentes culturas del mundo han intentado dejar su huella en el tiempo. Algunas lo lograron con más éxito que otras, ciertas culturas fracasaron debido a las técnicas que utilizaron para perpetuar sus costumbres y creencias de acuerdo con Henshilwood (2010), y de ellas solo nos quedan vestigios. Hoy podemos apreciar hermosas obras de arte que describen cómo fue la vida en determinado período, y esto se debe a un deseo de inmortalizar el contenido sensorial, que impulsó a lo largo de la historia el desarrollo de técnicas para permitir que el contenido sobreviva el paso del tiempo. Un claro ejemplo se puede ver en el reemplazo del bronce en las esculturas por otros materiales, como por ejemplo, el hierro y el acero. Las técnicas y los procesos para producir estas obras de arte fueron gradualmente mejorando a lo largo del tiempo. El desarrollo de las tecnologías de la información tiene como uno de sus objetivos el mejorar la interacción y la manera en la cual se presenten objetos o escenarios que han sido digitalizados, ya sea mediante videos o imágenes. Para alcanzar ese objetivo y para dar una sensación más cercana a la realidad, se han hecho estudios y se han desarrollado técnicas para que tanto videos como imágenes puedan ser visualizados en tres dimensiones y de esta manera que el ser humano pueda interactuar de una forma más natural con la computadora.
1
Esto último nos ofrece una ventaja sobre los métodos anteriores, como la escultura y la pintura, ya que existen distintos procedimientos para la captura y reproducción que le permiten al observador tener una experiencia visual tan real como la del sujeto que llevó a cabo el proceso de digitalizar el objeto original. Leavitt(2001) explica que la visualización en tres dimensiones tiene sus inicios desde antes del siglo XX con la ayuda del estereoscopio, pero que no fue sino hasta el año de 1987 cuando el desarrollo comenzó a llegar a las computadoras personales, sin embargo, el desarrollo se limitaba a video juegos, ya que el poder de cálculo de las computadoras era muy limitado en comparación con las capacidades que ellas tienen hoy en día. Leavitt cita a Kenton, CEO de Pandromeda, compañía de software en gráficos por computadora diciendo que “Tomaba 45 minutos solamente cargar una escena de archivos desde un disco para hacer el render de un simple frame”. Desde entonces esta tecnología ha venido creciendo, aumentando en rendimiento y disminuyendo en costos en su desarrollo y como consecuencia su impacto en el mercado aumentó significativamente. En su estudio sobre el estado actual de los productos que usan tecnología en tres dimensiones, Leavitt (2001),muestra los ingresos percibidos entre los años 1998 y 2003 por el desarrollo de productos que usan contenido en tres dimensiones en tres ámbitos diferentes: Profesional, Plugins, ypor el desarrollo para consumidores ocasionales de productos específicos. La figura 1 muestra los datos obtenidos en una gráfica resultado del estudio realizado por la firma de investigación de mercado Jon Peddie Associates citado por Leavitt.
2
Figura 1. Gráfica del crecimiento en ingresos por el desarrollo en tres dimensiones.
Uno de los propósitos de este proyecto es lograr una interacción entre la computadora y una persona, y para esto se recurre a una técnica conocida como head tracking. El concepto dentro del contexto en este proyecto, es la capacidad que tiene una computadora para detectar patrones previamente establecidos y procesarlos con la ayuda de una cámara web, la cual se utilizará para poder establecer una interacción con el usuario final como se muestra en la figura 2. Esta tecnología ha tomado gran importancia en el mercado y hasta ahora se ha establecido de buena forma en el ámbito de los video juegos. Inclusive, la tendencia de llevar este concepto a dispositivos de uso masivo como computadoras personales está siendo cada vez más evidente, señala (Leavitt, 2001).
3
Figura 2.Efecto observado por el usuario.
Justificación Existen diversas aplicaciones de proyección en tres dimensiones, y recientemente muchos productos de entretenimiento han aparecido en el mercado teniendo como consecuencia una creciente demanda en el consumo de tales tecnologías. Stump (2010), realizó un análisis de negocio entre los principales productores en el área de video y entretenimiento, en tal estudio se puede apreciar el pronóstico de ingresos por la venta de dispositivos con tecnología de visualización en tres dimensiones, como puede observarse en la figura 3. 4
Figura 3. Gráfica que muestra la alza en el consumo de dispositivos en tres dimensiones.
Desafortunadamente, no existe ningún sistema que pueda ser instalado en un hogar con un presupuesto de menos de $1000 dólares, y tampoco existe ningún hardware o software comercial que adapte el contenido visual dependiendo del ángulo del observador. Es importante notar que aunque existen aplicaciones independientes que realizan una de las dos tareas (proyección y tracking), ninguna alternativa comercial las realiza en conjunto o aprovecha una para el beneficio de la otra. Existen proyectos de investigación que planean utilizar estrategias similares, pero no utilizan el tracking para los cambios de perspectiva, el esfuerzo se centraliza solamente en mantener la ilusión de profundidad mostrando qué objeto está más cercano que otro dentro de un escenario, no ofreciendo la oportunidad de cambiar la perspectiva de un objeto en un escenario mientras el espectador cambia de posición. Por tal motivo se pensó llevar a cabo el desarrollo de un sistema de proyección en tres dimensiones de contenido interactivo y de esta manera contribuir a un ambiente global de constante cambio e innovación tecnológica.
5
Definición del problema Con la finalidad de construir un sistema capaz de brindar al espectador una experiencia de interacción visual tan real como lo hace con el mundo que lo rodea, el presente proyecto busca diseñar, desarrollar y construir un sistema de visualización digital que cumpla esta característica y que además sea económicamente accesible al presupuesto de un hogar latinoamericano.
Declaración del problema El problema que se busca solucionar radica en la siguiente cuestión: ¿Qué tecnologías y materiales son necesarios para fabricar un sistema de visualización en tres dimensiones y que éste pueda interactuar con el observador además de que también sea económicamente accesible para la media de la población latinoamericana?
Preguntas de investigación 1. ¿Qué características deben tener las herramientas y el material necesario para construir un sistema de visualización en tres dimensiones y seguimiento del observado mediante una computadora? 2. ¿Qué lenguajes de programación y bibliotecas son aptas para desarrollar un sistema que involucre visión por computadora? ¿Qué ventajas y desventajas tiene uno sobre el otro? 3. ¿Qué materiales son económicos y cumplen las características necesarias para la fabricación del sistema?
6
Objetivos 1. Investigar cuál es la mejor y más económica técnica de proyección en tres dimensiones y crear un espacio experimental utilizándola. 2. Analizar las posibles formas de rastreo de características y elegir la que resulta más apropiada para el desarrollo del proyecto. 3. Desarrollar un sistema físico que permita al espectador observar contenido tridimensional manteniendo la ilusión de profundidad. El sistema físico consiste en anteponer un dispositivo a la altura en donde el proyector permite la salida de la luz y mediante espejos y polarizadores, manipular la salida de la imagen para la obtención de la proyección ideal para la visualización en tres dimensiones (Ver figura 4).
Figura 4. Ilustración de la separación de la imagen mediante espejos pasando a través del polarizador. 7
4. Determinar qué tipos de polarizadores que permitan configurar los haces de luz para que estos tengan características especiales, son los más apropiados para la realización del proyecto. 5. Desarrollar un algoritmo que permita modificar el contenido proyectado de acuerdo a la relación entre el ángulo del observador y la posición del contenido proyectado. 6. Montar un sistema que mediante una cámara web y unos lentes polarizados, permita al espectador observar imágenes en tres dimensiones, y que mediante una computadora, las imágenes cambien en relación con el ángulo del observador para dar una ilusión aún mayor de profundidad.
Definición de términos Se presentan a continuación las definiciones de los términos que serán utilizados en este documento. Blobs: Conjunto de datos en forma de imagen almacenados y gestionados como un único elemento. Curve Fitting: Proceso de construir la curva o función matemática que mejor se ajuste a una serie de datos. EyeTracking: Concepto que hace referencia al conjunto de tecnologías que permiten detectar, monitorizar y registrar la zona, el tiempo y el orden en que una persona mira determinada escena o imagen mientras interactúa con una computadora. Frame: Un cuadro particular dentro de una secuencia de imágenes que conforman una animación.
8
GPL: Licencia creada por la Free Software Fundation y descrita como General Public License y que apunta principalmente a proteger los derechos de libre distribución, modificación y uso de software. Head Tracking: Concepto que se utiliza para describir un software que detecta la posición de un determinado patrón y sigue el movimiento del mismo. Generalmente el patrón determinado es colocado cerca de la cabeza de una personapara ser detectada en tiempo real por una cámara web. Look At: Es un vector (variable de tres componentes) que determina la orientación de la cámara en un escenario tridimensional virtual. Megapixel: Se conoce como megapixel al conjunto de un millón de puntos en una pantalla para formar imágenes. Pixel: Se le llama pixel a la unidad más pequeña de color dentro de una imagen digital, ya sea fotografía o video. Plugin: Aplicación que se relaciona con otra y sirve como complemento para aportarle una funcionalidad específica. Renderizado: Proceso de generar una imagen ó animación en tres dimensiones a partir de un modelo utilizando una aplicación de computadora. Software Libre: Se le denomina software libre a aquel que bajo el consentimiento de su autor y creador puede ser copiado, distribuido y modificado. Implícitamente esto significa poder acceder al código fuente del programa más no necesariamente quiere decir que el software sea gratuito. Desenfoque Gaussiano: Es un proceso mediante el cual se eliminan detalles en una imagen. Se logra aplicando una función matemática Gaussiana a los pixeles individuales de una imagen digital. (Shapiro y Stockman, 2001) 9
Limitaciones
1.
Los polarizadores, proyectores, webcams, espejos y demás componentes físicos son accesibles, sin embargo, la calidad de los mismos varía mucho en relación al precio. Como éste es un proyecto de bajo presupuesto, es probable que los materiales que se utilicen para la fabricación no sean de la mejor calidad disponible, cosa que podría afectar ligeramente el desempeño.
2.
El poder de cálculo de los GPU (unidades de procesamiento especializadas en funciones de gráficos) de las tarjetas gráficas ha aumentado de forma exponencial en los últimos años, sin embargo es difícil poder explotar estas capacidades en aplicaciones que no sean meramente de renderización o presentación de gráficos. Para poder crear una experiencia realmente ágil y rápida, es posible que se requiera hardware más poderoso y costoso que lo estipulado en el presupuesto. Sin embargo el desempeño desde el punto de vista del software, es directamente proporcional al poder de los equipos, y siendo el software escalable de forma automática con la mejora del hardware de procesamiento, ésta limitación no presenta mayores problemas.
Delimitaciones
1.
No se experimentará con lentes delgados (lentes especiales que permiten proyectar dos imágenes diferentes a un área específica) ni con tecnología de desviación de luz con meta-materiales (estos son materiales diseñados para tener características físicas o químicas inusuales en la naturaleza; en este caso, características ópticas) ni otras técnicas de proyección en tres dimensiones sin lentes. 10
2.
El objetivo de este proyecto es un sistema en tres dimensiones con lentes polarizados exclusivamente: los mismos modelos que se proveen en cualquier cine de tres dimensiones.
11
CAPÍTULO II
MARCO TEÓRICO
Este capítulo presenta una revisión de los conceptos que inspiraron la idea de llevar a cabo el proyecto, así como los temas fundamentales necesarios para su elaboración. En él se menciona la importancia de la interacción del hombre con la computadora, conceptos imprescindibles tales como visión por computadora, estereoscopía, y tecnologías como lenguajes de programación, dispositivos de emisión y recepción que fueron necesarios para su creación.
Interacción “La mayoría de las máquinas son inútiles a menos que puedan ser utilizadas adecuadamente por el hombre.” (Karray, Alemzadeh, Saleh y Arab, 2008). Este argumento, en términos generales, despertó el interés por crear una rama de estudio dedicado al diseño e interacción con el usuario, tanto sistemas de información, como con dispositivos electrónicos, y fue el origen de esa rama dentro de la informática conocida como Interacción Persona Ordenador (IPO). La IPO se define como la disciplina que pretende estudiar y resolver factores que hacen de la máquina una herramienta fácil y agradable de utilizar. El crecimiento de esta área está en estrecha relación con el avance tecnológico, desde los inicios en que el hombre interactuaba con la computadora, lo hacía mediante dispositivos que hoy son considerados básicos, como el caso del tecladoo ratón. En los últimos años nuevas técnicas de interacción han sido desarrolladas, computadoras con las que se puede interactuar directamente con el monitor sin la necesidad de un ratón o un teclado, pasando por el 12
reconocimiento de escritura sobre una pantalla táctil, hasta sistemas de reconocimiento de voz(Harper, Rodden, Rogers y Sellen, 2008). Recientemente el mercado ha puesto en las manos de consumidores dispositivos capaces de interactuar con el hombre mediante movimientos naturales del cuerpo, productos como Nintendo Wii, Kinect, PlayStationMoveutilizan áreas de estudio en ciencia y computación tales como inteligencia artificial, visión por computadora, reconocimiento facial, entre otras, ya que el estudio de la IPO ya no se limita al uso adecuado de las máquinas, sino al cómo puede interactuar el hombre con los diferentes dispositivos, de tal forma que estos últimos puedan brindar una experiencia tan real y natural como el usuario lo hace con otras personas o con el mundo que le rodea (Sebe, Lew y Huang, 2011). Los humanos interactúan entre sí principalmente mediante el habla, pero también lo hacen con movimientos corporales, ya sea para enfatizar emociones de lo que se dice con palabras como para realizar tareas habituales y mecánicas. Por esta razón en el momento de pensar en el usuario, se consideran tres diferentes niveles de actividad: 1. Física (Chapanis, 1965). 2. Cognitiva (Norman y Draper, 1986). 3. Afectiva (Picard, 1997). El aspecto físico determina el mecanismo de interacción entre el hombre y la máquina, mientras que el aspecto cognitivo se ocupa de la forma en la que los usuarios entienden el sistema e interactúan con él. El aspecto afectivo es una cuestión más reciente, intenta no solamente hacer de la interacción una experiencia agradable para el usuario sino también influir de tal manera que la persona utilice cada vez más un sistema o dispositivo, resultado de las actitudes y emociones causadas hacia ella (Te’eni, Carey y Zhang, 2007). El avance de las tecnologías y las nuevas tendencias en el mercado apuntan a considerar tales características de 13
interacción al momento de diseñar un dispositivo o sistema ya que puede ser un factor de éxito o fracaso.
Tecnologías El objetivo fundamental detrás del desarrollo de este proyecto, es que el uso de tecnologías, materiales y procesos sean accesibles y puedan ser adquiridos por la mayor cantidad de personas posibles, al menor costo. Para el desarrollo de tecnologías de alto impacto, un factor determinante es qué porcentaje del público tiene acceso a ella, y esto nos llevó a utilizar tecnologías descritas en este capítulo así como la investigación de algunos conceptos pertinentes descritos a continuación.
Conceptos Visión por computadora Se define la Visión por Computadora (VC) como la rama de la inteligencia artificial que tiene como fin, extraer propiedades a partir de un conjunto de imágenes y formar un modelo matemático mediante una computadora para simular la percepción visual de los seres vivos (Universidad Politécnica de Madrid, 2011). La interacción visual por computadora es probablemente el área más amplia que sigue la IPO y VC, considerando el alcance de las aplicaciones que se pueden desarrollar y la variedad de problemas que se pueden resolver mediante algoritmos computacionales. Entre los diferentes aspectos a seguir en función de las respuestas humanas que pueden ser reconocidas como una señal visual encontramos:
14
1. Análisis de expresión facial, que consiste en determinar estados como por ejemplo cansancio, sorpresa o disgusto mediante las expresiones de los rasgos faciales. 2. Movimiento del cuerpo y seguimiento de patrones, como por ejemplo determinar si una persona está corriendo o si se encuentra en una posición estática. 3. EyeTracking, un término en inglés que describe el área de estudio de los movimientos de los ojos para determinar, por ejemplo, qué áreas o regiones son más interesantes para el observador, o qué hace que el observador cambie su punto de enfoque de un lugar a otro.
Estereoscopía Se denomina estereoscopía a cualquier técnica capaz de crear una ilusión de profundidad en una imagen o serie de imágenes. Esta ilusión se crea presentando a cada ojo una imagen ligeramente diferente, de la misma forma en que percibimos las imágenes con nuestros ojos. Tales imágenes deben ser vistas con la ayuda de unos lentes especiales. En la actualidad existen tres tipos de sistemas estereoscópicos y para cada uno de ellos existen diferentes lentes (Audio Procines System, 2008).
Sistema anáglifo. En este sistema de presentación en tres dimensiones, se utilizan filtros de colores complementarios tales como, rojo-azul, rojo-verde o ámbar-azul. Cuando una imagen en rojo es vista mediante un filtro del mismo color, esta no es visible sino con el otro filtro de distinto color. (Ver figura 5).
15
Este sistema es de bajo costo, sin embargo presenta problemas en la alteración de colores, pérdida de luminosidad y cansancio visual después de la exposición por un periodo prolongado de tiempo.
Figura 5. Muestra de anteojos de sistema anáglifo.
Sistema polarizado. El sistema polarizado conserva el mismo concepto del sistema anáglifo de separar las imágenes, pero a diferencia del método anterior, este sistema no utiliza filtros de colores sino filtros polarizados. La separación de las imágenes es posible debido a que los filtros están polarizados a 45 y 135 grados, de tal forma que la imagen que se ve a través del ojo derecho queda polarizada a 135 grados, mientras que la imagen del ojo izquierdo queda polarizada a 45 grados (Perales, Abasolo y Mas, 2004).Al existir una diferencia polarización de 90 grados entre las dos imágenes, se garantiza que ninguna de las imágenes se mezclen (Jorke, 2006).Es necesario poner un filtro polarizado en cada objetivo, si se está proyectando con doble proyector o bien separando la imagen de tal forma que en la misma proyección aparezcan dos imágenes de lo que se quiere visualizar.
16
Se requiere de una pantalla plateada metálica para preservar la polarización de la luz proyectada. Los lentes son de costo muy bajo (Ver figura 6).
Figura 6. Muestra de lentes de sistema polarizado.
Sistema de lentes activos. Un proyector emite las imágenes correspondientes para cada ojo en sucesión a cierta frecuencia sin ninguna polarización. El sistema funciona debido a que los lentes del espectador están contienen un cristal líquido que permite el paso de la luz y la bloquea para cada ojo a la misma frecuencia que la emisión de fotogramas del proyector y se sincroniza con este por ondas de radio. Un inconveniente es que los lentes utilizan baterías y poseen un circuito electrónico haciéndolas pesadas e incómodas. Sistema Infitec. Existe otro sistema similar al del anáglifoque en vez de polarizar las imágenes de color verde o rojo, utiliza un sistema de filtrado llamado “técnica de división espectral”. Esta técnica fue desarrollada por Infitec y comercializada por Dolby. La imagen está compuesta por tres colores, rojo, verde y azul, ycon este sistema se consigue que el color rojo de la imagen (proyectada para el ojo izquierdo) sea de una longitud de onda ligeramente inferior a la del ojo opuesto y de la misma forma con cada color.
17
Como resultado es que el balance de color del ojo derecho tiende hacia el verde y rojo para el ojo izquierdo, prácticamente imperceptible a la vista, pero mediante el uso de lentes polarizados con estos dos colores, la imagen de cada ojo no es vista por el otro. En la proyección se inserta un disco de cristal con un filtro diferente para cada mitad del disco y este se hace girar en sincronía con la proyección de los fotogramas de tal forma que cada disco filtre su fotograma (Ver figura 7) (Jorke y Fritz, 2005).
Figura 7. Muestra de sistema Infitec.
Tecnologías de emisión y recepción Por tecnología de emisión se considera al dispositivo capaz de recibir y procesar una señal digital traduciéndola de tal forma que el ser humano pueda entenderla e interpretarla. Las tecnologías de recepción son los periféricos capaces obtener o capturar información como, imágenes, sonidos, video entre otros, y traducirlos a lenguaje binario para ser interpretados y manipulados por un ordenador.
18
Para poder hablar sobre dispositivos que “emiten” imágenes que los seres humanos pueden ver, o “capturar” dichas imágenes, se necesita entender el proceso mediante el cual estas señales eléctricas se convierten en colores.
Espacios de color Los colores se producen por las diferencias en la frecuencia de la luz, por lo tanto debe existir una forma de convertir las frecuencias de luz a datos digitales y viceversa. Cabe señalar que no todas las frecuencias de luz son visibles para el ojo humano, por lo que al referirse a la frecuencia de la luz, se incluyen las frecuencias visibles, que están en el rango de los 400 THz a los 668 THz. (NASA, 2011). Para poder representar las frecuencias de la luz en la computadora, fue necesaria la creación de los espacios de color, que son métodos con los que se puede especificar, crear y visualizar los colores en un ordenador (Ford y Alan, 1998). RGB y CMYK. El espacio más utilizado es el espacio RGB, debido a que la forma de representar los diferentes colores en un monitor de computadora consiste en mezclar tres colores básicos (o componentes): Rojo, Verde y Azul (Ford y Alan, 1998). Existe una diferencia fundamental entre los diferentes espacios de color, y generalmente esta diferencia tiene que ver con el medio en el que se representan los colores. Como se ha mencionado, los monitores usan RGB debido a que en su configuración física, necesitan usar un espacio de color aditivo, en el que si los tres componentes de color son combinados se obtiene el color blanco, y si los tres componentes se mantienen en su valor mínimo, resulta el color negro. Sin embargo, en otros medios como por ejemplo en el contenido impreso, es necesario usar otro espacio de color debido a que los colores con los que se imprime requieren de un
19
espacio de color sustractivo. Esta necesidad es evidente ya que al combinarse las diferentes tintas, lógicamente se obtiene un color más obscuro cada vez, obteniéndose el color blanco (suponiendo que el papel es blanco) cuando existe una ausencia total de tinta. El espacio de color usado generalmente en la impresión se llama CMYK, que equivale a las combinaciones de cuatro componentes básicos: los colores Cyan, Magenta, Amarillo y Negro (Ford y Alan, 1998). Combinando los cuatro colores del espacio CMYK, de la misma forma que combinando los tres de RGB, se obtiene toda la gama tonal. Existen diferencias sutiles en el rango total de tonos que un espacio de color específico puede representar, y existen métodos para convertir colores de un espacio de color a otro, con sutiles pérdidas en algunos casos, sin embargo las ligeras diferencias causadas por la conversión no provocan un impacto relevante en la fidelidad del color, ya que el ojo humano no distingue la diferencia en la gran mayoría de los casos (Ford y Alan, 1998). HSV. Existe otra forma de representar el espacio de color RGB, o lo que es lo mismo, reorganizarlo. Esta estrategia de reorganización se desarrolló en la década de 1970 y se llama HSV (Tono, Intensidad y Luminosidad por sus siglas en inglés). El objetivo principal detrás de su creación fue lograr que la representación de los colores del espacio RGB tuviera más sentido para artistas acostumbrados a mezclar un color, o tono, de pintura con blanco y negro (Hunt, 2004). Aunque HSV representa colores con componentes de la misma forma que RGB y CMYK lo hacen, tiene una ventaja principal sobre estos, y se explica a continuación. HSV consiste de tres componentes: el primero es un ángulo y los dos restantes son enteros que van desde el 0 hasta el 255 (8 bits ó 1 Byte) (Hunt, 2004).
20
Figura 8. Representación del modelo de color HSV.
HSV representa los colores esencialmente como un tono modificado por la intensidad y la luminosidad. En la figura 8 se muestran una representación del espacio de color HSV. El componente del tono (Hue) se representa como un ángulo que va desde 0° hasta 359°. Pensando en un círculo cromático, cada tono representa el color que se encuentra en ese ángulo en la rueda. En la figura 9 se puede observar cómo el color de un tono específico (en este caso el azul que se encuentra en el ángulo 240) varía desde el color blanco (esquina superior izquierda) a negro (todo el borde inferior). El eje vertical del color es el componente de la luminosidad (Value), y el eje horizontal es el valor de la Intensidad (Saturation). La combinación de estos dos componentes de color crean todos los posibles colores pertenecientes a dicho tono. Es importante notar que en el espacio HSV se consideran los colores blanco, negro y toda la escala de grises entre ambos, como pertenecientes a mismo tono.
21
Figura 9. El modelo de color HSV para el tono 240°.
La principal ventaja de usar HSV sobre RGB, por ejemplo, en aplicaciones de visión por computadora es que los tres componentes de color de RGB cambian al modificarse las condiciones de luz dentro de un determinado escenario, a diferencia de HSV donde solo cambian los componentes de Intensidad y Luminosidad, lo que permite reconocer un tono de color en condiciones donde la iluminación es variable, algo que ocurre frecuentemente en situaciones del mundo real. En la figura 10 está ejemplificada la diferencia entre el espacio de color RGB y el HSV cuando se representa la imagen de un cubo que es iluminado desde adelante, y cuyas caras son afectadas por las diferencias en la iluminación.
22
Figura 10. Diferencia de la representación de los modelos RGB y HSV.
Una imagen digitalizada puede ser representada en un medio físico que se comunica con la computadora. Este dispositivo debe ser capaz de entender el espacio de color en el que la información de la imagen está representada. Existen diversos dispositivos para convertir datos de color a haces de luz, como proyectores de video y monitores, entre otros.
Proyector de video Un proyector de vídeo es un aparato que recibe una señal de vídeo y proyecta la imagen correspondiente en una pantalla de proyección usando un sistema de lentes, permitiendo así visualizar imágenes fijas o en movimiento. Todos los proyectores de vídeo utilizan una luz muy brillante para proyectar la imagen, y los más modernos pueden corregir curvas, borrones y otras inconsistencias a través de los ajustes manuales. Los proyectores de vídeo son mayoritariamente usados en salas de presentaciones o conferencias, en aulas docentes, aunque también se pueden encontrar aplicaciones para cine en casa.
23
La señal de vídeo de entrada puede provenir de diferentes fuentes, como un sintonizador de televisión (terrestre o vía satélite) o un ordenador personal (Austriana de Maquinaria y Reproducción Informática, 2011). El proyector de vídeo convierte la señal de video en haces de luz que se proyectan sobre una superficie. Esta superficie, es denominada la pantalla de proyección.
Pantalla de proyección Es una superficie generalmente de color blanco sobre la cual se proyecta luz. El color y el material se seleccionan para de mantener la fidelidad de los colores, en caso de proyectar luz sin polarizar, y en sus propiedades de polarización, sila luz que se proyecta está polarizada. Para poder captar la luz y convertirla en valores que puedan ser representados en una computadora, se necesita usar un dispositivo que cuente con un circuito sensor de imagen. Mientras que existen cámaras digitales que permiten guardar en la computadora un frame único, también existen dispositivos capaces de enviar imágenes en tiempo real, como por ejemplo, las cámaras web.
Cámara web Una cámara web es una cámara digital de tamaño pequeño capaz de capturar imágenes y transmitirlas por internet y/o almacenarlas en una computadora. Estas cámaras están formadas por una lente, un sensor de imagen y los circuitos necesarios para manejarla. Existen diferentes tipos de lentes, entre las más comunes se encuentran las lentes plásticas. La calidad de la imagen está en función de varios factores a considerar,
24
entre los más importantes se encuentran los sensores y la resolución en mega pixeles, los cuales varían dependiendo el costo que van desde 1.2 mega pixeles, hasta más de 8 mega pixeles. Estos dispositivos permiten emitir y recibir luz, sin embargo, tanto la emisión como la captura de imágenes se basan en principios básicos del comportamiento de la luz, siendo la ley de reflexión uno de los fundamentos más importantes.
Principios básicos de la reflexión de la luz La ley de reflexión dicta que los rayos incidentes sobre una superficie especular se reflejarán con un ángulo igual al de incidencia (Universidad Blas Pascal, 2011).Esto se puede apreciar en la figura 11.
Figura 11. Ilustración de la reflexión de una luz sobre una superficie.(Jenkins y White, 2008)
Existen dos tipos de superficies, y un aspecto importante para que la ley de reflexión se cumpla, consiste en tener una superficie especular, como por ejemplo un espejo. El otro tipo de superficies son llamadas “superficies difusas”, y el efecto que causan al ser iluminadas, es que los haces de luz que inciden sobre la superficie son reflejados en múltiples ángulos. 25
Un claro ejemplo de superficies difusas son las hojas de papel: estas reflejan la luz, pero no en la forma que lo hace un espejo. La luz es una onda electromagnética, y posee un campo eléctrico oscilante. Estas oscilaciones son la frecuencia de la luz cuando se habla de la luz visible al ojo humano, sin embargo al ser una onda, no está limitada a las frecuencias que pueden ser percibidas por el ojo, pudiendo su frecuencia ser inferior o superior al espectro visible. Por convención, un estado de polarización se define como la orientación del campo eléctrico de una onda, por lo tanto la polarización de la luz en esencia consiste en alinear el campo eléctrico de un haz de luz, o lo que es equivalente, filtrar la luz para permitir el paso solamente a las ondas que tienen un campo eléctrico determinado (Iñiguez, 2011). Ahora, estos campos eléctricos de las ondas de luz al incidir en una superficie crean pequeñas oscilaciones de polarización en los átomos individuales, y estos átomos son de un material dieléctrico, o de un material metálico (conductor). Cuando la luz incide en un material dieléctrico, como éste no tiene electrones libres, los electrones crean un campo eléctrico que se vuelve una nueva fuente de radiación (luz) que se propaga en todas direcciones, incluso aquella desde donde procede el rayo. Esto causa que los materiales no conductores produzcan una reflexión difusa, aunque su estructura microscópica sea perfectamente coherente o lisa. La orientación del campo eléctrico de la reflexión sobre una superficie dieléctrica varía en relación al ángulo de incidencia y la polarización incidente. Un ejemplo de este fenómeno puede ser observado al usar lentes polarizados que bloquean gran parte de la luz reflejada sobre materiales dieléctricos (reflejos sobre el agua, las
26
nubes, la carretera) en comparación con la luz directa que no está polarizada(Jenkins y White, 2008). Las ecuaciones 1 y 2 permiten calcular el porcentaje de luz polarizada paralelamente (Rp) y perpendicular (Rs) que es reflejada manteniendo su polarización, donde n es el índice de refracción de un dieléctrico y el ángulo de incidencia con respecto a la normal de la superficie como se muestra a continuación:
𝑅𝑝
𝑛 2 −𝑠𝑖𝑛 2 𝜃 𝑖 − 𝑛 2 cos 𝜃 𝑖
=
2
𝑛 2 −𝑠𝑖𝑛 2 𝜃 𝑖 + 𝑛 2 cos 𝜃 𝑖
(1)
𝑅𝑠 =
cos 𝜃 𝑖 – 𝑛 2 −𝑠𝑖𝑛 2 𝜃 𝑖
2
cos 𝜃 𝑖 – 𝑛 2 −𝑠𝑖𝑛 2 𝜃 𝑖
(2) Cuando se produce una reflexión sobre un material con luz no polarizada, el índice de reflexión del material es calculado como el promedio 𝑅𝑝 y 𝑅𝑠 mediante la siguiente ecuación:
𝑅=
𝑅𝑝 + 𝑅𝑠 2 (3) 27
Por otro lado, en las superficies metálicas existen electrones libres, y estos son fácilmente polarizados por la luz incidente y crean un campo de radiación que difiere del campo incidente en π. Este campo permite que la luz sea reflejada con la misma orientación de campo que el campo de la luz con la que fue iluminado (King y Raine, 2010). Para poder calcular los porcentajes de reflexión de los componentes polarizados de la luz, y debido a que se trata de un conductor, se necesita usar un coeficiente de refracción compuesto, dado por la ecuación 4.
ῆ = 𝑛 1 − 𝑖𝑘 (4) En la ecuación 4, n es el coeficiente de refracción del material, y k el coeficiente de absorción. La ecuación 4 puede ser usada para calcular el coeficiente de reflexión de conductores reemplazando el coeficiente de refracción de dieléctrico (n) por el coeficiente para conductores (ῆ).
Filtro de desenfoque Gaussiano Todo filtro de desenfoque suaviza la imagen, difuminando los bordes y haciendo que se pierdan los detalles pequeños. Para lograr este efecto, se debe analizar pixel por pixel toda la imagen, y calcular un promedio de los valores de los pixeles adyacentes. Este promedio se hace utilizando una función Gaussiana. La función Gaussiana es muy común ya que describe la distribución normal en estadística, donde el área bajo la curva es igual a 1. El promedio se calcula asumiendo que el pixel
28
que se analiza está en el centro de la función. Se procede a multiplicar los valores de los pixeles adyacentes por el valor arrojado por la función y finalmente se suman todos estos valores. Como los valores que arroja la función son menores que 1, simplemente sumarlos es suficiente para calcular el promedio. La función Gaussiana se extiende hasta el infinito, pero después de 3𝜎 los valores ya son tan pequeños que pueden ser pasados por alto, acelerando la velocidad de ejecución del filtro (Saphiro, 2001). En la fórmula 5podemos observar las variables 𝑥, 𝑦y 𝜎.Estos representan la distancia entre el pixel que se está computando, y sus vecinos. Para ejemplificar de qué forma se realiza el promedio, la figura12 muestra los valores arrojados por la función (después de ser multiplicados por 10 para efectos de legibilidad) para las diferentes posiciones, suponiendo que el cuadrado central, que se encuentra en la cuarta fila y la cuarta columna, es el origen de la función. En la tabla los números equivalen a el porcentaje del valor de dicho pixel que será conservado. Por ejemplo, el pixel que se está computando conservará el 22% de su valor. Cabe destacar que la función se aplica sobre cada canal de la imagen, por lo que en una imagen representada en RGB, el filtro Gaussiano se necesita aplicar 3 veces.
Figura 12.Valores arrojados por una función Gaussiana en 2 dimensiones. 29
𝑥 2 +𝑦 2 1 ῆ𝐺 𝑥, 𝑦 = 𝑒 2𝜎 2 2 2𝜋𝜎
(5)
Programación Uno de los objetivos de este proyecto es que la perspectiva de una imagen proyectada este en función de la posición del observador con la ayuda de una computadora, para esto es necesario recurrir a herramientas y conocimientos tales como la programación, que permitan el desarrollo de un sistema pertinente a lo que se pretende lograr. En términos generales se puede definir como programar, a escribir las instrucciones necesarias para que una unidad de procesamiento pueda resolver una tarea específica mediante un lenguaje de programación (Gaona, 2007). Para que esto sea posible, es necesario de una persona capaz escribir comandos que son almacenados en una estructura física y luego sean transferidos en orden a la unidad de procesamiento como una serie de pasos a seguir y mediante secuencias de instrucciones conocidas como algoritmos, resolver problemas. Esta persona es conocida como programador. Hoy en día el programador cuenta con una vasta lista de lenguajes de programación de alto nivel, dependiendo de las necesidades pertinentes al problema por solucionar. Varios lenguajes de programación cuentan con módulos y bibliotecas capaces de resolver tareas específicas y que pueden ser importadas para construir nuevos módulos, bibliotecas o software.
30
Python Es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una sintaxis que evita redundancias y que favorece un código legible. Es también un lenguaje multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico, esto quiere decir que una variable puede tomar valores de distinto tipo (str, int, long, boolean, etc.) en distintos momentos, además Python especifica ciertas restricciones para controlar que los tipos de datos no sean violados en su código de programación. Python es multiplataforma, existiendo versiones para Linux, Mac OS X y Windows(Python, n.f.). Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License, que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.
OpenCV OpenCV es una biblioteca libre de visión artificial originalmente desarrollada por Intel. Desde que apareció su primera versión alfa en el mes de enero de 1999, se ha utilizado en infinidad de aplicaciones. Es aplicado desde sistemas de seguridad con detección de movimiento, hasta aplicaciones de control de procesos donde se requiere reconocimiento de objetos (Agam, 2006). Esto se debe a que su publicación se da bajo licencia BSD, que permite que sea usada libremente para propósitos comerciales y de investigación con las condiciones en ella expresadas. Open CV es multiplataforma, existiendo versiones para Linux, Mac OS X y Win-
31
dows. Contiene más de 500 funciones que abarcan una gran gama de áreas en el proceso de visión, como reconocimiento de objetos (reconocimiento facial), calibración de cámaras, visión estéreo y visión robótica.
Soya3D Soya3D es un módulo de Python de alto nivel para la creación de videojuegos en tres dimensiones.Soya3D es software libre, licenciada bajo la GPL. Siendo un motor gráfico y de juego multi-plataforma, puede ejecutarse bajo Linux, Mac OS X y Windows. Su creador, Jean-Baptiste "Jiba" Lamy describe a Soya como un motor de juego centrado en el desarrollo rápido y en la facilidad de uso. Su objetivo es permitir que desarrolladores aficionados puedan crear sofisticados juegos tres dimensiones usando Python en su totalidad.
Generación de contenido en tres dimensiones Para generar contenido en tres dimensiones son necesarios al menos dos elementos: un objeto y una cámara (ambos virtuales). El objeto es lo que realmente va a ser generado por el motor de gráficos en tres dimensiones. Sin embargo, para poder determinar desde qué ángulo, con qué orientación y con qué inclinación de cámara va a ser renderizado este objeto, es necesario definir una cámara. Como es de imaginarse, dicha cámara existe solamente dentro del entorno tridimensional del motor, y se define como tres puntos (o un punto y dos vectores). Lo más importante es calcular la posición de la cámara en el espacio y para esto se necesitan coordenadas en tres dimensiones (x, y, z). Una vez que se le asigna a la cámara una posición, el siguiente punto determina hacia dónde va a “apuntar” la cámara. Si se crea un seg-
32
mento con origen en la posición de la cámara y fin en el punto hacia dónde va a apuntar la cámara, se obtiene el vector de Look At (Sidelnikov, 2011). Es muy importante que este vector se mantenga fijo sobre un objeto, de lo contrario podría suceder que no haya ningún objeto dentro del campo visual de la cámara, y en ese caso el usuario sería presentado con una imagen generada por el motor, pero sin ningún elemento. En la mayoría de los casos, esto significaría una imagen del color del escenario, generalmente negra. Por último, se necesita un punto final para determinar cuál es la dirección vertical. Este valor es tradicionalmente igual a la posición de la cámara en los ejes de “x” y “z”, solo variando en el eje de las y con un valor más alto. Si el punto de dirección vertical no está definido correctamente, la cámara a través de la cual se genera el contenido tridimensional podría estar inclinada hacia los lados y crear una imagen distorsionada. Con estas tecnologías es posible desarrollar un sistema capaz de proyectar imágenes tridimensionales, calcular las diferentes perspectivas de las imágenes que se presentan a cada ojo en un sistema de proyección de luz polarizada y realizar tareas de visión por computadora para determinar la posición del observador. En el siguiente capítulo se describe con detalle el proceso de desarrollo del sistema, así también como el proceso de selección entre tecnologías similares y las razones por las cuales se seleccionaron unas sobre otras.
33
CAPÍTULO III
METODOLOGÍA
Características del proyecto En este capítulo se describe la metodología y los procesos utilizados para la creación del sistema de proyección en tres dimensiones interactivo. Se presentan las diferentes etapas, desafíos y problemas encontrados en el proceso así como las soluciones y alternativas que se encontraron y aplicaron. Los medios de comunicación constantemente dan cobertura a nuevos y revolucionarios conceptos en proyección y contenido en tres dimensiones, sin embargo, la mayoría de los productos no son distribuidos en México, y el común de la población no podría tener acceso a ellos por su elevado costo (Informador, 2011). Uno de los objetivos principales de este proyecto es reducir los costos al mínimo posible, y por lo tanto en repetidas ocasiones durante el desarrollo del mismo, fue necesario abandonar ideas y optar por alternativas que fueran más económicas. Como puede verse en el capítulo previo, existen técnicas para la proyección de contenido en tres dimensiones que no son realmente complejas ni excesivamente caras. Estas consideraciones motivaron el interés en el desarrollo de una plataforma de proyección de contenido en tres dimensiones, no solo por sus implicaciones en el área del entretenimiento, sino además por su potencial uso en la educación.
34
En cuanto a los elementos tecnológicos involucrados en el proyecto se utilizaron: 1. El lenguaje de programación Python (Véase en el apéndice A el código del proyecto) 2. Polarizadores lineales, debido a su bajo costo y fácil adquisición, ya que las tecnologías actuales de proyección de luz polarizada en cines usan esta tecnología (Ver Capítulo 2, Sistema polarizado). 3. Materiales con propiedades metálicas y de polarización, que pueden ser comprados en tiendas de telas.
En las siguientes secciones se explica cómo se realizó la búsqueda y selección de estos materiales. En el proceso de selección entre las diferentes tecnologías y de los elementos físicos que componen el proyecto, se realizó una extensa búsqueda en Internet para encontrar proyectos similares y recopilar la información necesaria que permitiera evitar problemas comunes. Aunque existen diferentes iniciativas de proyección en tres dimensiones hechas por personas con intenciones de minimizar costos, la mayoría de los casos analizados contaban con un presupuesto mucho mayor que el que se tenía para el desarrollo de este proyecto, por lo tanto gran parte de la investigación fue completamente original. A continuación se presentan los elementos relevantes de la planificación y los costos involucrados en el desarrollo del sistema.
Planificación El objetivo del proyecto fue crear un sistema de proyección en tres dimensiones que pudiera ser construido manteniendo los costos mínimos y usando elementos físicos (hardware) que pueden ser adquiridos de forma fácil. Una de las limitaciones del proyecto fue que no existe material en tres dimensiones diseñado explícitamente para la interacción con el usuario 35
y que sea de uso libre, por lo que en las primeras fases del desarrollo se necesitaba no solo crear un sistema de proyección sino además crear contenido que permitiera la interacción. En la fase que responde al qué, a quién y para qué, se tuvieron entrevistas personales con diferentes usuarios potenciales del sistema para identificar qué esperaría una persona de un sistema interactivo de proyección en tres dimensiones. Se presume que la mayoría de las respuestas estuvieron fuertemente influenciadas por películas, que generalmente situadas en el futuro, muestran sistemas interactivos operados sin equipo especial. La interacción es cualquier acción recíproca entre dos o más objetos, y por lo tanto para poder mantener la extensión del proyecto dentro de los límites especificados, fue necesario definir en qué consistiría la interacción entre el usuario y el sistema. Se definió que la interacción sería específicamente entre la posición del usuario relativo a la pantalla de proyección. Fueron analizadas otras alternativas, como por ejemplo que el usuario pudiera usar sus manos para interactuar con el contenido tridimensional, sin embargo las alternativas demostraron ser muy complejas requiriendo un período de tiempo de desarrollo mucho mayor al estipulado, y en consecuencia fueron abandonadas, pero sin duda alguna, tienen mérito para ser exploradas en el futuro. En relación con el contenido que se presentaba al usuario, sería una tarea muy compleja el obtener imágenes de un objeto real desde cada ángulo posible, por lo que utilizar fotografías se descartó desde un inicio. La única forma viable de generar contenido que reaccionara a la posición del usuario, era crear este contenido con una computadora. Pese a que no se pueden usar fotografías para la generación del contenido, sí se pueden usar fotografías como texturas para volver el contenido tridimensional generado por computadora más parecido a la vida real, o realista.
36
Costos Debido a que este sistema fue desarrollado como un proyecto de “investigación y desarrollo” (research & development) es difícil calcular las horas hombre exactas, ya que gran parte del tiempo invertido transcurrió en el laboratorio con la realización de experimentos, investigaciones, pruebas y diferentes formas de lograr los objetivos propuestos. Si fuera necesario precisar una cantidad de horas combinadas entre desarrollo e investigación, el número estaría fácilmente situado por encima de las 600 horas, que suponiendo que tienen una remuneración de 20 dólares la hora, equivaldría a 12,000 dólares. Aunque el costo es muy bajo, es importante destacar que se utilizan conceptos y técnicas, que aunque simplificadas, si no hubieran sido propuestas y desarrolladas gracias a la inversión realizada por compañías privadas, su costo sería mucho más alto. La empresa líder en el mercado de la proyección en tres dimensiones, RealD Inc, invirtió una suma aproximada a los 75 millones de dólares para desarrollar las tecnologías y técnicas básicas de proyección tridimensional que se utilizan en la actualidad (Tuttle, 2010). La tabla 1 contiene información de costos de cada uno de los componentes del sistema.
Tabla 1. Costos de materiales Material Polarizadores (1m x 55cm) Proyector Multimedia Espejos Lentes Polarizados (10 pares) Pantalla de Proyección Computadora para Procesamiento de Imagen Webcam
Costo $450MXN $7000MXN $50MXN $120MXN $75MXN $5000MXN $900MXN
37
Los polarizadores que se adquirieron consisten en un rollo de un material plástico con un recubrimiento polarizador y se adquiere por metro. La ventaja de adquirirlo de esta forma es que puede ser fácilmente cortado con tijeras o cualquier objeto punzocortante a la medida que sea necesario. En cuanto al proyector multimedia no fue necesaria su compra para la realización de este proyecto debido a la disponibilidad inmediata de proyectores por parte de la Facultad de Ingeniería y Tecnología de la Universidad de Montemorelos. Los espejos fueron adquiridos en una vidriería local por lo que no cuentan con ningún material especial. En total se compraron cuatro espejos de dos tamaños diferentes, los primeros son de 30cm x 30cm, los segundos de 20cm x 30cm y el grosor de los mismos es de 4mm. Debido a que muchos centros de entretenimiento, sobre todo cinematográficos utilizan sistemas de proyección tridimensional de luz polarizada, se compraron lentes de la misma marca y por ende del mismo material que los usados por los cines para abaratar costos. Existen diversas opciones de compra al mayoreo en el mercado, para la realización de este proyecto se adquirieron 10 pares de lentes. La pantalla de proyección consiste en un cuadrado de poliestireno expandido con dimensiones de 1mx 1m cubierto de ugna tela especial. La selección de la tela se describe a profundidad más adelante en este capítulo. La computadora utilizada fue en las primeras instancias una computadora portátil, y posteriormente, una computadora provista por la Facultad de Ingeniería y Tecnología de la Universidad de Montemorelos. El último elemento es una webcam, que tampoco fue necesario adquirir ya se contaba con una que había sido usada previamente para fines personales.
38
Diseño El sistema se puede dividir en dos partes fundamentales e independientes. El software es la parte que genera el contenido y el equipo físico se encarga de permitir que las imágenes generadas por el software se perciban en tres dimensiones. En la figura 13 se puede apreciar la forma en la cual el software en primera instancia divide la imagen tridimensional original en dos nuevas imágenes, una correspondiente a cada ojo.
Figura 13.Separación de la imagen en las perspectivas para cada ojo (Las diferencias fueron exageradas en esta ilustración). La figura 14 describe el proceso en el cual una imagen es enviada a un proyector que a su vez tiene montados una serie de espejos y polarizadores que separan y re combinan las imágenes correspondientes a cada ojo.
39
Figura 14. Ilustración de la división de la imagen mediante espejos
Software El software que se utiliza en el sistema fue desarrollado con el lenguaje de programación Python. La gran ventaja de Python sobre otras alternativas analizadas es que permite el desarrollo rápido de aplicaciones y existe un gran número de proyectos escritos en Python. Debido a que el desarrollo del proyecto requería el uso específico de alguna biblioteca de visión por computadora, y existiendo una implementación de OpenCV (la biblioteca más popular de visión por computadora) para Python, los requerimientos básicos estaban cubiertos. La biblioteca OpenCV está escrita en el lenguaje C, por lo que ha sido implementada (ported) a prácticamente todos los lenguajes de programación modernos, como Java y C#, sin embargo, al evaluar la biblioteca en el lenguaje Java, los resultados no fueron positivos debido 40
a que las bibliotecas de comunicación entre Java y dispositivos de adquisición de imagen como por ejemplo cámaras web, no son robustas en el sistema operativo Linux. Otro aspecto fundamental fue generar el contenido en tres dimensiones en el mismo lenguaje que la biblioteca de visión por computadora, ya que al hacerlo de esta forma, la velocidad de reacción entre ambos sería óptima. Se podrían haber usado dos lenguajes diferentes que interactuaran entre sí: uno realizando las labores de visión por computadora y otro generando contenido tridimensional, pero esta estrategia muchas veces conduce a errores de comunicación entre aplicaciones y agrega una capa de complejidadinnecesaria, al menos para los fines inmediatos de este proyecto. Después de investigar y realizar pruebas con algunos de los diferentes motores de gráficos tres dimensiones disponibles para Python, se decidió usar un motor llamadoSoya3D. En la tabla 2 se pueden observar las distintas áreas en las que fueron evaluados los diferentes motores:
Tabla 2. Evaluación de motores gráficos tres dimensiones escritos en Python Nombre Velocidad de Render Cámaras Múltiples Facilidad de Uso Panda3D Buena Soportado Moderada Soya3D Moderada Soportado Muy Fácil PyOpenGL Excelente Posible, no soporta- Difícil do por defecto PySoy Buena No soportado Fácil
Todos los motores gráficos que fueron probados tenían ventajas y desventajas, pero la decisión final de usarSoya3D pese a que era uno de los motores con el menor rendimiento gráfico fue debido a un análisis profundo de los requerimientos de velocidad del sistema de proyección. Mientras que aparentemente podría parecer que el motor que proveyera la mayor
41
velocidad sería el más recomendable, la facilidad de uso de los motores da al programador la libertad de enfocarse en los problemas más difíciles y no concentrarse en los aspectos de presentación y esto fue lo que inclinó la balanza a favor deSoya3D. En las limitaciones del proyecto se menciona el argumento principal para respaldar la decisión de utilizar software que este acorde a las capacidades del equipo en uso: el rendimiento siempre puede ser aumentado adquiriendo computadoras más poderosas. Mientras que la experiencia del usuario del sistema sea lo suficientemente fluida como para crear la ilusión de que un objeto es real (o que se perciba de forma similar a como se percibiría uno real), se cumple el objetivo de este proyecto. Algoritmo de Determinación de Posición del Observador (DPO) El objetivo de este algoritmo es obtener la posición aproximada del observador (usuario del sistema) con respecto a la superficie donde se proyecta el contenido visual. La forma más fácil de describir un algoritmo, es como una serie de acciones continuadas, en las que se define la relación entre las entradas y las salidas. El algoritmo en esencia materializa (efectúa) dicha relación. A continuación se presenta el algoritmo de determinación de posición del observador paso a paso: 1. Se obtiene un frame de la webcam (una imagen en formato de color RGB) 2. El frame es convertido al formato de color HSV 3. Se aplica un filtro de desenfoque gaussiano de intensidad de 3x3 (para suavizar el ruido) 4. El frame es dividido en sus tres componentes (también llamados canales) obtenidos del paso número 2: Hue (Tono), Saturation (Intensidad) y Value (Luminosidad). El resul42
tado son 3 imágenes de un solo canal compuestas por valores que oscilan entre el 0 y el 255. 5. Se aplica un filtro a cada uno de los tres canales con valores calculados previamente. Estos valores dependen en gran medida del material usado para el marcador (Como se explicará en la sección de Lentes y Marcador). Si los lentes que el usuario portará tienen un marcador de un tono 117, se filtra el canal del tono (Hue) y se descarta cada pixel p que no esté dentro de un rango determinado por el valor de tono previamente calculado (117) y un valor de tolerancia t, tal que:
117 − 𝑡 < 𝑝 < 117 + 𝑡
El mismo procedimiento se realiza con los canales de intensidad y luminosidad. 6. Se recombinan los canales con una operación AND que mantiene los pixeles comunes entre los 3 canales. 7. Sobre la imagen resultante se aplica la función FindContours de OpenCV. Cuando se ejecuta la función FindContours sobre una imagen binaria, está utiliza el algoritmo Suzuki85 para agrupar los pixeles contiguos (Suzuki y Abe, 1985). En términos prácticos, el algoritmo toma un pixel que sea 1 y busca entre sus vecinos otros pixeles que sean 1. El algoritmo Suzuki85 repite esta operación hasta lograr una figura cerrada. Si se encuentra una figura cerrada dentro de otra, es denominada un “hueco”. Después de identificar todos los contornos (de ahí el nombre), la función provee una lista de blobs (grupo de puntos). 8. La lista de blobs es filtrada para desechar las agrupaciones de puntos que son demasiado pequeñas y demasiado grandes para tratarse del “marcador” de los lentes. Una vez 43
descartados los grupos inválidos, se eliminan también los grupos que no tengan una relación ancho/alto aproximada a la del marcador. En el caso de este sistema, el marcador es cuadrado y por lo tanto toda agrupación de puntos de forma rectangular (un ratio diferente a 1:1) es descartada inmediatamente. Para finalizar con el proceso de selección, se elige de los blobs restantes al que tenga el mayor ancho y alto. 9. Se sustituye el ancho del blob en la ecuación 5 para convertir ancho en pixeles a metros y centímetros.
En la figura 15 se explica el último paso del algoritmo de DPO y en la tabla 3, se pueden apreciar los resultados experimentales de la correspondencia del ancho del marcador en pixeles y la distancia de la cámara. Todo el código en Python del algoritmo de DPO puede encontrarse en el Apéndice.
Figura 15. Imagen captada por la webcam de un marcador a dos distancias diferentes.
44
Tabla 3. Equivalencia ancho en pixeles/distancia. Ancho en pixels 54 52 46 37 33 28 19 17 13 13 12 12 12
Distancia en metros 1.0 1.15 1.30 1.45 1.60 1.75 1.90 2.10 2.25 2.40 2.55 2.70 2.85
12 10
3.00 3.15
En el algoritmo de DPO, el último paso consiste en determinar la distancia del marcador en metros y centímetros a partir de su ancho en pixeles. Para no depender de una tabla, fue necesario encontrar una función que permitiera modelar las distancias a partir del ancho del marcador, y para eso se recurrió a un servicio online llamado ZunZun.com que es una suite completa de regresión lineal que permite analizar un conjunto de datos para encontrar funciones que los describan, proceso conocido como curve fitting. Se seleccionó la función que arrojaba el error absoluto cuadrado más bajo, que fue la siguiente:
1 + 𝐵1 𝑥 2 𝐵2 𝑥 2 𝐵3 𝑥 2 𝑛 𝑥 = + 2 + 2 𝑥 2 − 𝐶1 𝑥 − 𝐶2 𝑥 − 𝐶3 2
𝑒 2 = 0.24259590506402443 (5)
45
En la función descrita por la ecuación 5 existen 6 parámetros, y los valores de estos que más se ajustan a los datos, son listados a continuación.
B1= 3.8782666584676417E+02 C1 = 1.7050366276033477E+00 B2 = 3.2873183622454560E-01 C2 = 4.6229098596138856E+03 B3 = -3.8730630399235122E+02 C3 = 1.2816121372013620E+00 (6) En la figura 16 se puede apreciar un gráfico de la función 5 y los datos originales.
Figura 16. Relación Ancho/Distancia, los puntos son los datos experimentales, la curva es la función calculada por ZunZun.
46
Generación de contenido tres dimensiones estéreo Para poder crear una imagen diferente para cada ojo, fue necesario generar el contenido tridimensional dos veces, esto no quiere decir que los objetos dentro del escenario tridimensional fueran diferentes para cada ojo, sino que la perspectiva debe ser diferente para cada ojo (Ver Fig. 12). Existen numerosos estudios de las dimensiones del rostro humano, y todos coinciden en que la distancia interpupilar (Interpupillary distance o IPD) oscila entre los 65mm en las mujeres y los 70mm en los hombres (Dodgson, 1995). Tomando como base estas consideraciones de distancia entre los ojos, las dos cámaras en el escenario tridimensional debían estar separadas entre sí por una distancia similar a la que están los ojos en la naturaleza del ser humano, sin embargo los motores de gráficos en tres dimensiones no utilizan unidades de distancia en metros y centímetros debido a que todo contenido generado por ordenador necesita ser representado físicamente de alguna forma, y la representación de los pixeles varía dependiendo del medio utilizado (Hitchcock, 2005). Estas variaciones de tamaño del pixel en el medio generalmente se miden en DPI, que significa puntos por pulgada. Finalmente la separación en pixeles entre las dos cámaras en este proyecto fue calculada cada vez que se instaló el sistema (en relación a la parte física) ya que la distancia entre el proyector y la superficie de proyección tanto como la distancia entre los espejos afectan el tamaño físico resultante de los objetos proyectados y esto provoca que sea muy difícil calcular una distancia universal en pixeles que resulte óptima en todas las situaciones, principalmente porque las condiciones experimentales varían ligeramente entre prueba y prueba.
47
Integración de DPO y motor tres dimensiones El último paso en cuanto al software fue la integración de los dos componentes principales: el algoritmo de determinación de posición del observador y el de generación del contenido tridimensional. En un primer momento el algoritmo DPO arroja un punto en el espacio que es una aproximación de la posición del observador. Estos valores son usados para mover las cámaras en el escenario tridimensional. Cabe destacar que para la mayoría de las aplicaciones, el único valor que importa es la posición en el eje de las x y de las y. Esto se debe a que el observador se aleja físicamente del objeto tridimensional generado en la computadora que está siendo proyectado. No es necesario que se calcule en la computadora la transformación debido al cambio de perspectiva y que se deba volver a generar el objeto tridimensional, ya que el objeto proyectado está sufriendo dicha transformación en los ojos del observador cuando este se aleja.
Equipo físico Después de analizar los métodos existentes para la proyección en tres dimensiones, se llegó a la conclusión de que la forma más fácil sería utilizar espejos para separar las imágenes correspondientes a cada ojo. Como el objetivo era usar un solo proyector, el uso de espejos es necesario.
Espejos En la primera iteración del equipo físico, los espejos se sostenían con las manos, en las subsiguientes se usaron bloques de poliestireno expandido para sostener los espejos, y en la versión final, los espejos están fijados en tablas de madera.
48
Aunque existe un porcentaje de luz que se pierde cada vez que un haz de luz incide sobre un espejo, incluso con espejos comunes como los usados en el hogar y que pueden ser adquiridos en vidrierías, la atenuación de la luz no fue significativa como para ameritar experimentación con otros espejos de mayor calidad. La disposición de los espejos es lo que causa que las imágenes que parten de un solo proyector de video se dividan y unan al llegar a la pantalla (Ver figura 17).
Figura 17. Distancias y ángulos entre componentes
Un par de espejos dividen la imagen en dos, y forman un ángulo de 45y -45 grados con el haz del proyector de video. Otro par de espejos vuelven combinan las mitades sobre la superficie de proyección.
49
Las distancias deben ser calculadas de forma precisa y de igual manera los ángulos, ya que pequeñas discrepancias entre estos pueden causar que las imágenes proyectadas no converjan apropiadamente sobre la pantalla. Un obstáculo encontrado durante el desarrollo y las pruebas fue la dificultad para asegurarse que los espejos estuvieran perpendiculares con la horizontal, ya que de lo contrario la imagen se distorsiona. En más de una ocasión fue necesario cambiar los ángulos de los espejos de forma manual para compensar los desniveles de mesas y superficies donde se armaba el equipo físico y así evitar efectos ópticos indeseables en la proyección.
Polarizadores Los polarizadores fueron adquiridos vía Internet y aunque su calidad no es la mejor disponible, los resultados experimentales probaron ser suficientemente buenos como para no requerir la adquisición de polarizadores más caros y de mejor calidad. La principal característica que se tiene que tomar en cuenta cuando se compran polarizadores, es la cantidad de luz que polarizan a un determinado ángulo. Este número generalmente se encuentra por encima del 96%, tal como es el caso de los polarizadores usados en este proyecto, que polarizan el 97.5% de la luz que atraviesa perpendicularmente la película polarizadora. Superficie de proyección El verdadero desafío en cuanto al equipamiento físico, fue encontrar una superficie en la que se pudiera proyectar el contenido y que este no perdiera la polarización. Las primeras pruebas fueron un rotundo fracaso, ya que la pintura de las paredes, cortinas, hojas de papel, e incluso pantallas de proyección como las que se encuentran en muchas aulas de clase, son 50
completamente ineficientes en mantener la polarización de la luz debido a que están hechos de materiales dieléctricos, los cuales debido a su configuración atómica, tal como se explica en la sección “Principios básicos de la reflexión de la luz”, reflejan la luz de forma difusa para permitir ángulos de visión más elevados. Fue necesario idear un sistema rápido y eficiente para determinar si un material tenía propiedades deseables para la proyección de luz polarizada. El sistema ideado se describe en la Figura 18.
Figura 18. Sistema para prueba de potenciales materiales para proyección de luz polarizada. La forma de probar materiales era muy simple: si al iluminar un material con el láser se veía (la luz pasaba) por ambos polarizadores, significaba que el material no estaba manteniendo la polarización. Si por el contrario la luz pasaba por uno a la perfección y por otro no lograba pasar, estábamos ante la presencia de un material que mantenía la polarización de la luz.
51
Gracias a la configuración de la linterna láser y los polarizadores en cada dirección, era fácil su transporte para hacer pruebas in situ, por lo que se procedió a visitar tiendas de venta de telas y probar todas las telas en existencia. Los resultados iníciales fueron alentadores, ya que después de solo algunos intentos, una tela resultó mantener muy bien la polarización. La principal desventaja de esta tela fue que era de color metálico y muy opaca, lo que no permitía que los colores proyectados sobre la tela realmente se distinguieran. Un color ligeramente opaco se perdía completamente convirtiéndose en gris al ser proyectado sobre la tela. Mientras que los colores brillantes y saturados se veían bien, los más opacos se perdían, algo que era inaceptable. Una segunda ronda de intentos arrojó más resultados positivos, esta vez con telas de colores más claros. Notablemente cuando más metalizada fuera la tela, al parecer los resultados eran mejores, algo que se esperaba encontrar debido a que los metales son buenos manteniendo la polarización de la luz debido a que son conductores. Los resultados con el segundo grupo de telas fueron mucho mejores que con el primero, solo que ahora fue evidente que no solamente los colores se perdían debido al tono del material, sino también al ángulo desde el cual se mirara. La figura 19 ejemplifica este problema.
Figura 19. Ilustración que muestra el cambio y pérdida de tonalidad dependiendo el ángulo de perspectiva. 52
Existen principalmente dos variantes de superficie para proyectar luz polarizada: materiales y acabados especiales (pinturas). Los materiales especiales cuestan en promedio 80 dólares por metro cuadrado, mientras que la pintura cuesta aproximadamente 60 dólares por metro cuadrado cubierto. Antes de realizar la compra del material especializado para proyección de luz polarizada, se adquirieron nuevas telas y se realizaron más pruebas. Los resultados arrojados por el tercer grupo de telas fue mucho mejor que los resultados experimentales de los grupos anteriores, notando que los precios individuales de cada tela por metro cuadrado del último grupo no eran significativamente superiores a los precios de los grupos anteriores. Después de un exhaustivo conjunto de pruebas, se seleccionó la tela que presentaba la mejor nitidez de color y el mejor ángulo de visión. El nombre comercial de esta tela es “Batman” y puede ser adquirida en establecimientos especializados en la venta de telas.
Lentes y marcador Los lentes polarizados también se adquirieron por Internet y habían sido usados previamente en salas de cine. Una de las principales ventajas de usar lentes que fueron usados en salas de cine es que estos tienen las películas polarizadoras perfectamente alineadas a 90° una de la otra, por lo que la posibilidad de que la luz polarizada para uno de los ojos se filtre en el otro es mínima. Los lentes fueron equipados con un “marcador”, que consiste en un pequeño cuadrado de papel no-reflectivo de color verde. Equivale a un tono (Hue) de 115-118. La figura 20 muestra un diagrama de un par de lentes con un marcador.
53
Marcador
Figura 20. Lentes polarizados y marcador.
54
CAPÍTULO IV
RESULTADOS En este capítulo se analizan los logros obtenidos en este proyecto a la luz de los requerimientos y de los objetivos especificados anteriormente. El objetivo principal consistía en el desarrollo de un sistema de proyección y tracking en tres dimensiones, y en su estado final, el sistema es capaz de presentar una imagen tridimensional a un observador que usa lentes polarizados, y adaptar la perspectiva de dicha imagen a la perspectiva desde la cual el observador se encuentra físicamente en relación con el sistema de proyección mediante un algoritmo de determinación de posición del observador que consiste en esencia es un algoritmo de tracking mediante un marcador. Al finalizar el desarrollo de los diferentes componentes que conforman este proyecto, la funcionalidad descrita en los objetivos fue alcanzada, no obstante, con algunas limitaciones de las que se habla a continuación. En la figura 21, se muestra la configuración final del equipo físico.
Figura 21. Configuración de hardware final. 55
Debido a la naturaleza experimental y a la relativa novedad de las tecnologías usadas, no se puede evaluar el grado de efectividad y desempeño del sistema mediante las percepciones de usuarios, ya que al llevarse a cabo pruebas de usabilidad es necesario admitir principios y guías que en este caso serían inexistentes para los usuarios (Andre y Hartson, 1999). La tarea de evaluar un sistema cuantitativamente en una población que no cuenta con parámetros claros y generalizados o expectativas referentes al desempeño, ni tampoco cuenta con experiencias anteriores que puedan ser comparadas con la presente, no produce resultados relevantes (Andre y Hartson, 1999). Por lo tanto,el sistema fue evaluado cualitativamente, con el más alto rigor, para determinar si en efecto cumplió con los objetivos originales. En las etapas iniciales de investigación, fue evidente que los resultados del proyecto iban a estar determinados fundamentalmente por el método de proyección en tres dimensiones que se eligiera, por lo cual fue necesario seleccionar y filtrar las diversas técnicas, en primer lugar, por su costo, ya que uno de los objetivos principales fue mantener los costos en el nivel más bajo posible. En la selección, se tuvo en cuenta que la búsqueda excesiva de reducir costos podría afectar negativamente los resultados. Después de analizar y filtrar las alternativas de proyección, no quedaron muchas opciones que explorar debido a que la gran mayoría no cumplían con las limitaciones de presupuesto. Se eligió un grupo de tecnologías y un método de proyección basado en la investigación previa, siendo elegido en este proyecto el más económico y el más apropiado para cumplir con los objetivos. A continuación se evalúan los diferentes componentes del sistema en base a su desempeño y características. En cuanto al sistema de tracking, se optó por desarrollar un algoritmo propio, el cual cumple con los objetivos en un marco de evaluación puramente pragmático. Es capaz de determinar la posición de un observador en condiciones controladas de luz y es capaz de analizar 56
cada frame de vídeo en busca del marcador tal como se describe anteriormente. Sin embargo, si se toman en cuenta características como la precisión, la versatilidad del rastreo en diferentes condiciones de luz y el manejo de errores, podemos concluir que el algoritmo no es robusto ni muestra un buen desempeño en escenarios sustancialmente diferentes (no controlados) al que se ha usado para su diseño. El sistema de proyección mediante espejos recombina los haces de luz previamente polarizados vertical y horizontalmente, y la fidelidad de la imagen es notablemente buena, ya que un observador con un par de lentes polarizados puede percibir una imagen tridimensional. La configuración de los elementos físicos que componen el sistema de proyección sufrió muchos cambios desde su concepción inicial hasta su estado final, y en cada una de estas etapas de cambios, se fue construyendo sobre las fortalezas de las anteriores, desde la forma de montado de los espejos hasta la selección de la tela de proyección. Este proceso logró la creación de un sistema efectivo, proveyendo una plataforma de proyección sólida y versátil, que puede ser adaptada con facilidad a las distintas necesidades que se presentan, como por ejemplo, distintos tamaños de pantalla de proyección, o diferentes distancias entre el proyector y la pantalla de proyección. En el proceso de selección de la tela que se usó en la pantalla de proyección se tomaron en cuenta factores como la fidelidad del color, el ángulo de polarización, sin embargo, en la configuración final existen algunas limitaciones en cuanto a la calidad de las imagen polarizadas, en especial en relación a la posición del observador con la pantalla. Cuando el observador se encuentra en un ángulo mayor a los +/- 45° de la normal de la pantalla de proyección, se observa una imagen “fantasma” que debería estar siendo filtrada por los polarizadores, pero que sin embargo, llega sin polarizar al ojo izquierdo o derecho, dependiendo si el observador se encuentra a un ángulo negativo o positivo de la normal de la pantalla de proyección. 57
Este fenómeno interfiere con la percepción de una imagen tridimensional, aún así, el efecto de las diferencias de profundidad se puede notar. Una parte clave en el sistema de proyección son los polarizadores, los cuales para el desarrollo del proyecto se adquirieron en dos presentaciones diferentes. Es imposible asegurar que los polarizadores usados en el proyecto son los mejores, una búsqueda más extensa y la adquisición de más variedades de polarizadores hubiera arrojado datos para poder evaluar los polarizadores de una forma cualitativa en comparación a otros. Se analizaron pruebas con ambos tipos de polarizadores, y en las pruebas experimentales, el desempeño de los polarizadores fue excelente y la luz se polarizó de manera consistente permitiendo que las imágenes tridimensionales se pudieran visualizar sin problemas. Debido a su excelente desempeño, no fue necesario adquirir otros polarizadores: estos produjeron resultados de polarización de excelente calidad. Evaluando los resultados cualitativos de este proyecto de investigación desde un punto de vista holístico, se puede concluir que cumple con todos los requerimientos técnicos y de funcionalidad necesarios para satisfacer y proponer una solución al problema declarado. Sin duda existen defectos y factores que podrían ser mejorados aún más en el futuro para dar una solución más completa y amplia. Dichos factores están recopilados y explicados a profundidad en la sección “Trabajos Futuros”
58
CAPÍTULO V
CONCLUSIONES Y TRABAJOS FUTUROS En este documento se presenta un proyecto interdisciplinario donde software y hardware interactúan para aumentar la experiencia interactiva y sensorial del usuario. El resultado ha sido el desarrollo de un sistema físico y de su contraparte de software que permite al usuario ver imágenes en tres dimensiones mediante el uso de lentes polarizados, y que estas imágenes cambien de forma relativa a su posición. Los resultados del desarrollo de este proyecto fueron muy positivos, sin se considera que existen áreas que pueden ser mejoradas y optimizadas en versiones futuras. A continuación se presentan las conclusiones del trabajo de investigación.
Conclusiones Los resultados del desarrollo de este proyecto fueron muy positivos, considerándolo como más que la suma de sus componentes. Una dificultad para evaluar y llegar a conclusiones con una visión holística en este proyecto, es que debido a su naturaleza multidisciplinaria, se pierde objetividad. A continuación se presentan las conclusiones analizando los diferentes componentes independientemente, considerando que existen áreas que pueden ser mejoradas y optimizadas en versiones futuras. Estas áreas que en el futuro podrían ser exploradas para mejorar el desempeño, se describen en Trabajos futuros.
59
En cuanto al sistema desarrollado 1. El sistema de proyección desarrollado permite a los usuarios ver imágenes tridimen-
sionales mediante el uso de lentes polarizados que reaccionan a la posición del observador, dando una sensación de que lo que se observa, realmente existe.
2. El sistema fue probado en distintos escenarios y con distintos modelos tridimensiona-
les y es capaz de crear la ilusión de presencia de un objeto.
3. El sistema no solamente consiste en un componente de software, sino también en una
parte física diseñada en conjunto con el software para lograr un nivel integración de elevado. En cuanto al problema 1. Es posible desarrollar aplicaciones tecnológicas con un pequeño presupuesto si se co-
nocen de antemano las características esenciales de las tecnologías que se pretenden utilizar.
2. Existen trabajos de investigación que exponen los principios de las tecnologías que di-
versas alternativas comerciales usan en sus productos, y que pueden ser adaptadas para satisfacer diferentes necesidades.
3. Siempre debe tenerse en cuenta que los productos comerciales son vendidos a un pre-
cio que genera ganancias, por lo tanto, se pueden desarrollar productos de la misma calidad que un producto comercial por mucho menos dinero.
60
En cuanto al impacto de un sistema similar presentado en este proyecto en el mundo del entretenimiento Debido al aumento de contenido tridimensional en todas las áreas del entretenimiento (cine, videojuegos, etc.) es muy probable que eventualmente la interacción con este contenido sea una necesidad y un gran punto de venta, por lo que se espera en el futuro ver cómo se desarrollan muchos proyectos similares.
Trabajos futuros
En mejoras al producto desarrollado 1. Un sistema más robusto de detección de la posición del observador. Mientras que el
sistema actual es capaz de realizar el tracking de una forma consistente, existen casos especiales que no están contemplados, como por ejemplo cuando el observador se quita los lentes, o gira la cabeza en un ángulo mayor a los 60°. 2. La configuración del equipo físico puede ser mejorada tanto en su construcción como
en su desempeño. Un elemento que se debería explorar es el uso de espejos movidos por servomotores capaces de auto-alinear las imágenes proyectadas tridimensionalmente. 3. En un futuro sería muy interesante poder tener cámaras reales en una configuración es-
tereoscópica y lentes gran angulares que permitieran al observador percibir imágenes reales en 3 dimensiones que cambiaran de acuerdo a su ángulo de observación con un rango de movimiento mayor.
61
4. Proyectar las imágenes desde atrás de la pantalla de proyección para así lograr que el
observador pueda acercarse a la pantalla a distancias menores a 1 metro y que no cause sombra sobre la misma. 5. Reemplazar el reconocimiento de un marcador por un sistema similar al utilizado por
el periférico desarrollado por Microsoft llamado “Kinect”, el cual proyecta haces de luz infrarroja y mediante una cámara registra el movimiento y permite determinar la posición del observador. 6. Experimentar con más muestras de tela para encontrar un material que sea capaz de
mantener la polarización en un ángulo mayor que el actual.
En otras tecnologías 1. Migrar la parte física a tecnologías más transparentes para el usuario, como lo son los
lentes finos y toda clase de dispositivos ópticos que permiten que el contenido tridimensional generado por computadora pueda ser experimentado sin lentes.
62
APÉNDICE A
CÓDIGO FUENTE EN PYTHON 2.6
63
Código Pyhton 2.6
#!/usr/bin/python # -*- indent-tabs-mode: t -*import sys, os, os.path, math import soya import soya.cube, soya.sphere, soya.widget import soya.sdlconst as sdlconst import soya.pudding as pudding import soya.pudding.ext.svgelements as svgelements import soya.pudding.ext.fpslabel import soya.widget #Initialization flags #Run tracking thread tracking_enabled = True #Show OpenCV window (only when Soya3D is windowed) show_tracking_window = False #Run Soya3D fullscreen fullscreen = True #Soya3D window size soya_width = 800 soya_height = 600 #OpenCV window size capture_width = 637 capture_height = 0 #With 3D model to show active_model = 1 class InteractiveWorld(soya.World): def __init__(self, parent): soya.World.__init__(self, parent) self.prev_x = 0 self.show_calibration = True def begin_round(self): if tracking_enabled : x = float((capture_width/2-tracker_thread.x)/8) else: x=0
64
if self.prev_x != x: sword.rotate_y(self.prev_x-x) jarron.rotate_y(self.prev_x-x) self.prev_x = x """ #Position and image of marker, slow on slow machines..! text = pudding.control.SimpleLabel(panel, label = "("+str(tracker_thread.x)+","+str(tracker_thread.y)+") ~"+ str(round(tracker_thread.z,2))+"m", autosize = True) if tracking_enabled : pudding.control.Image(pudding_root, screen, left=5, top = 5, width = soya_width/20, height=soya_height/20) pudding.control.Image(pudding_root, screen, left=5+soya_width/2, top = 5, width = soya_width/20, height=soya_height/20) pudding.control.Image(pudding_root, marker, left=7+tracker_thread.x/20, top = 7+tracker_thread.y/20, width = tracker_thread.width/10, height=tracker_thread.height/10) pudding.control.Image(pudding_root, marker, left=soya_width/2+7+tracker_thread.x/20, top = 7+tracker_thread.y/20, width = tracker_thread.width/10, height=tracker_thread.height/10) """ #Handle Events for event in soya.MAIN_LOOP.events: if event[0] == sdlconst.KEYDOWN: if (event[1] == sdlconst.K_q) or (event[1] ==dlconst.K_ESCAPE): #If we want to exit sys.exit() elif event[1] == sdlconst.K_1: sword.set_xyz(0,0,0) jarron.set_xyz(0,-10,0) active_model = 1 elif event[1] == sdlconst.K_2: sword.set_xyz(0,-10,0) jarron.set_xyz(0,-0.5,0) active_model = 2 elif event[1] == sdlconst.K_c: #If we want to calibrate if self.show_calibration :
65
#Paint the mark images markTL = pudding.control.Image(pudding_root, mark1, left=soya_width/4-32, top = 5, width = 32, height=32) markTR = pudding.control.Image(pudding_root, mark2, left=soya_width/2+soya_width/4, top = 5, width = 32, height=32) markBL = pudding.control.Image(pudding_root, mark2, left=soya_width/4-32, top = soya_height-150, width = 32, height=32) markBR = pudding.control.Image(pudding_root, mark1, left=soya_width/2+soya_width/4, top = soya_height-150, width = 32, height=32) soya.set_root_widget(pudding_root) self.show_calibration = False else: #Paint the black over the images markTL = pudding.control.Image(pudding_root, black, left=soya_width/4-32, top = 5, width = 32, height=32) markTR = pudding.control.Image(pudding_root, black, left=soya_width/2+soya_width/4, top = 5, width = 32, height=32) markBL = pudding.control.Image(pudding_root, black, left=soya_width/4-32, top = soya_height-150, width = 32, height=32) markBR = pudding.control.Image(pudding_root, black, left=soya_width/2+soya_width/4, top = soya_height-150, width = 32, height=32) self.show_calibration = True g = soya.widget.Group() g.add(c1) g.add(c2) soya.set_root_widget(g) class FixedViewportCamera(soya.Camera): def __init__(self, parent, left, top, width, height): soya.Camera.__init__(self, parent) self.set_viewport(left, top, width, height) def resize(self, left, top, width, height): pass
66
soya.path.append(os.path.join(os.path.dirname(sys.argv[0]), "data")) soya.init("SOYA3D MAIN",soya_width,soya_height,fullscreen) if tracking_enabled : #import the tracker from tracker import Tracker tracker_thread = Tracker(show_tracking_window) tracker_thread.setDaemon(True) tracker_thread.start() pudding.init() #global_font = soya.Font(pudding.sysfont.SysFont('Sans'), 20, 15 ) pudding_root = pudding.core.RootWidget() """ #Panel for marker position, slow on slow machines..! panel = pudding.control.Panel(pudding_root, left = 0, top = 0) fps = pudding.ext.fpslabel.FPSLabel(pudding_root, position = pudding.TOP_RIGHT) global_font = soya.Font(pudding.sysfont.SysFont('monospace'), 10, 10 ) fps.font = global_font """ w2 = soya.World() world = InteractiveWorld(w2)
#Load images for calibration mark1 = soya.Material( soya.Image.get('mark1.png')) mark2 = soya.Material( soya.Image.get('mark2.png')) black = soya.Material( soya.Image.get('black.png')) screen = soya.Material( soya.Image.get('screen.png')) marker = soya.Material( soya.Image.get('marker.png')) model_builder = soya.SimpleModelBuilder() model_builder.shadow = 1 wall_world = soya.World() punto1 = soya.Vertex(wall_world, -2.2, punto2 = soya.Vertex(wall_world, 2.2, punto3 = soya.Vertex(wall_world, -2.2, punto4 = soya.Vertex(wall_world, 2.2,
-0.5, -6, diffuse = (1.0, 1.0, 1.0, 1)) -0.5, -6, diffuse = (1.0, 1.0, 1.0, 1)) -0.5, 6, diffuse = (1.0, 1.0, 1.0, 1)) -0.5, 6, diffuse = (1.0, 1.0, 1.0, 1))
67
punto5 = soya.Vertex(wall_world, -2.2, punto6 = soya.Vertex(wall_world, 2.2, punto7 = soya.Vertex(wall_world, -2.2, punto8 = soya.Vertex(wall_world, 2.2,
3, -6, diffuse = (1.0, 1.0, 1.0, 1)) 3, -6, diffuse = (1.0, 1.0, 1.0, 1)) 3, 6, diffuse = (1.0, 1.0, 1.0, 1)) 3, 6, diffuse = (1.0, 1.0, 1.0, 1))
face1 = soya.Face(wall_world, [punto3, punto4, punto2, punto1]) face1.double_sided = 0 face2 = soya.Face(wall_world, [punto1, punto2, punto6, punto5]) face2.double_sided = 0 face3 = soya.Face(wall_world, [punto3, punto1, punto5, punto7]) face3.double_sided = 0 face4 = soya.Face(wall_world, [punto2, punto4, punto8, punto6]) face4.double_sided = 0 face5 = soya.Face(wall_world, [punto5, punto6, punto8, punto7]) face5.double_sided = 0 wall = soya.Body(w2, wall_world.to_model()) light = soya.Light(w2) light.set_xyz(0.0, 6.0, -6.0) light.linear = 0.5 sword_model = soya.Model.get("sword") sword_model.model_builder = model_builder sword = soya.Body(w2, sword_model) sword.set_xyz(0,0,0) sword.rotate_x(90) sword.rotate_y(90) jarron_model = soya.Model.get("jarron") jarron_model.model_builder = model_builder jarron = soya.Body(w2, jarron_model) jarron.set_xyz(0,-10,0) jarron.scale(0.3,0.3,0.3) c1 = FixedViewportCamera(w2, 0, 0, soya_width/2, soya_height) c1.x = 0.1 c1.y = 0.5 c1.z = 3 c1.back = 10 68
c2 = FixedViewportCamera(w2, soya_width/2, 0, soya_width/2, soya_height) c2.x = -0.1 c2.y = 0.5 c2.z = 3 c2.back = 10
c1.partial = 1 c2.partial = 1 g = soya.widget.Group() g.add(c1) g.add(c2) soya.set_root_widget(g) """ #Add pudding to root, slow on slow machines..! #soya.set_root_widget(pudding_root) #soya.root_widget.add_child(c1) #soya.root_widget.add_child(c2) """ soya.MainLoop(w2).main_loop()
69
import time import sys import cv from threading import Thread from fitting import Sellmeier2D class Tracker(Thread): def __init__ (self, showWindow): #call ancestor Thread.__init__(self) #Get fitting class self.fittingFunc = Sellmeier2D() #initialize self.x = 0 self.y = 0 self.z = 0 self.width = 0 self.height = 0 self.running = True self.showWindow = showWindow def run(self): print "Starting..." self.hue = 50 self.sat = 120 self.value = 140 detectedRatio = 0.0 if self.showWindow : cv.NamedWindow('TRACKING WINDOW', cv.CV_WINDOW_AUTOSIZE) #Move window to second monitor #cv.MoveWindow('Image', 0, 0) #Open any available camera capture = cv.CreateCameraCapture(-1) 70
#Test camera frame = cv.QueryFrame(capture) if not frame: print "Error opening capture device" sys.exit (1) font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.6, 0.6, 0, 2, 8) hsv = cv.CreateImage(cv.GetSize(frame), 8, 3) hue = cv.CreateImage(cv.GetSize(frame), 8, 1) hueFiltered = cv.CreateImage(cv.GetSize(frame), 8, 1) sat = cv.CreateImage(cv.GetSize(frame), 8, 1) satFiltered = cv.CreateImage(cv.GetSize(frame), 8, 1) value = cv.CreateImage(cv.GetSize(frame), 8, 1) valueFiltered = cv.CreateImage(cv.GetSize(frame), 8, 1) result = cv.CreateImage(cv.GetSize(frame), 8, 1) storage = cv.CreateMemStorage(0) while(self.running): #Get latest frame frame = cv.QueryFrame(capture) #Convert color space cv.CvtColor(frame, hsv, cv.CV_BGR2HSV) #Apply gaussian filter to reduce noise cv.Smooth(hsv, hsv, cv.CV_GAUSSIAN,3,3) #Split HSV into its three components cv.Split(hsv, hue, sat, value, None) #Filter out the hue cv.InRangeS(hue,self.hue-15, self.hue+15,hueFiltered) #Filter out by saturation cv.Threshold(sat,satFiltered, self.sat-40, self.sat+40, cv.CV_THRESH_BINARY)
71
#Filter out by value cv.Threshold(value,valueFiltered, self.value-40, self.value+40, cv.CV_THRESH_BINARY) #And operation between all "layers" cv.And(hueFiltered,valueFiltered,result) cv.And(satFiltered,result,result) #Erode and Dilate the resulting image to get rid of small features cv.Erode(result, result, None, 2) cv.Dilate(result, result, None, 3) contour = cv.FindContours(result, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE) #In order to find biggest blob, we refresh these values maxWidth = 0 maxHeight = 0 #Minimum size in pixels of the marker minSize = 5 #Ratio between height/width of the marker ratio = 1 #Tolerance in the ratio (20%), would allow markers of size 9x11 but never 8/12 tolerance = 0.2 #Center of the detected marker markerPoint = None #Distance in meters from the camera markerDistance = None while contour: #Get position+size of the blob bound_rect = cv.BoundingRect(list(contour)) contour = contour.h_next() #Position of blob pt1 = (bound_rect[0], bound_rect[1]) #Height/Width ratio detectedRatio = float(bound_rect[3])/float(bound_rect[2]) #If size of current blob is greater of all previous ones AND # the ratio is within the tolerance levels AND # is bigger than the minimum size
72
if bound_rect[2]>maxWidth and bound_rect[3]>maxHeight and detectedRatio > ratio-tolerance and detectedRatio < ratio+tolerance and bound_rect[2]>minSize and bound_rect[3]>minSize: #Set the new max height/width maxWidth = bound_rect[2] maxHeight = bound_rect[3] #Now the marker is at pt1 markerPoint = pt1 #Calculate distance markerDistance = self.fittingFunc.calculate(bound_rect[3])
#If we found a marker if markerPoint != None : #Paint a rectangle around the blob cv.Rectangle(frame, markerPoint, (markerPoint[0]+maxWidth, markerPoint[1]+maxHeight), cv.CV_RGB(50,255,50), 3) #Paint a shadow with the position of the blob in pixels shadowPoint = (markerPoint[0]+2, markerPoint[1]-8) cv.PutText(frame, str(markerPoint[0])+", "+str(markerPoint[1]),shadowPoint,font,cv.CV_RGB(0,0,0)) textPoint = (markerPoint[0], markerPoint[1]-10) cv.PutText(frame, str(markerPoint[0])+", "+str(markerPoint[1]),textPoint,font,cv.CV_RGB(255,100,100)) #Set current values to the instance self.x = markerPoint[0] self.y = markerPoint[1] self.z = markerDistance self.width = maxWidth self.height = maxHeight #Output the image to the window if self.showWindow : cv.ShowImage('TRACKING WINDOW', frame) c = cv.WaitKey(10) if c == 27 or c == ord('q'): break
73
#!/usr/bin/python import time import math import sys import cv class Main: def dummy1(self, pos): print "hue: "+str(pos) self.trackHue = pos def dummy2(self, pos): print "sat: "+str(pos) self.trackSat = pos def dummy3(self, pos): print "val: "+str(pos) self.trackVal = pos def __init__(self): print "Starting..." cv.NamedWindow('Calibration', 1) capture = cv.CreateCameraCapture(-1) #Test camera frame = cv.QueryFrame(capture) if not frame: print "Error opening capture device" sys.exit (1) font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 0.6, 0.6, 0, 2, 8) hsv = cv.CreateImage(cv.GetSize(frame), 8, 3) hue = cv.CreateImage(cv.GetSize(frame), 8, 1) hueFiltered = cv.CreateImage(cv.GetSize(frame), 8, 1) sat = cv.CreateImage(cv.GetSize(frame), 8, 1) satFiltered = cv.CreateImage(cv.GetSize(frame), 8, 1) value = cv.CreateImage(cv.GetSize(frame), 8, 1) valueFiltered = cv.CreateImage(cv.GetSize(frame), 8, 1)
74
result = cv.CreateImage(cv.GetSize(frame), 8, 1) storage = cv.CreateMemStorage(0) self.trackHue = 52 self.trackSat = 120 self.trackVal = 140 cv.CreateTrackbar("HUE",'Image', self.trackHue, 180,self.dummy1) cv.CreateTrackbar("SAT",'Image', self.trackSat, 255,self.dummy2) cv.CreateTrackbar("VAL",'Image', self.trackVal, 255,self.dummy3) while(True): #Get latest frame frame = cv.QueryFrame(capture) #Convert color space cv.CvtColor(frame, hsv, cv.CV_BGR2HSV) #Apply gaussian filter to reduce noise cv.Smooth(hsv, hsv, cv.CV_GAUSSIAN,3,3) #Split HSV into its three components cv.Split(hsv, hue, sat, value, None) #Filter out the hue cv.InRangeS(hue,self.trackHue-15, self.trackHue+15,hueFiltered) #Filter out by saturation cv.Threshold(sat,satFiltered, self.trackSat-40, self.trackSat+40, cv.CV_THRESH_BINARY) #Filter out by value cv.Threshold(value,valueFiltered, self.trackVal-40, self.trackVal+40, cv.CV_THRESH_BINARY) #And operation between all "layers" cv.And(hueFiltered,valueFiltered,result) cv.And(satFiltered,result,result) #Erode and Dilate the resulting image to get rid of small features cv.Erode(result, result, None, 2) cv.Dilate(result, result, None, 3) 75
#Find contours in the image contour = cv.FindContours(result, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE) maxWidth = 0 maxHeight = 0 minSize = 2 ratio = 1 tolerance = 0.2 markerPoint = None while contour: bound_rect = cv.BoundingRect(list(contour)) contour = contour.h_next() pt1 = (bound_rect[0], bound_rect[1]) detectedRatio = float(bound_rect[3])/float(bound_rect[2]) if bound_rect[2]>maxWidth and bound_rect[3]>maxHeight and detectedRatio > ratio-tolerance and detectedRatio < ratio+tolerance and bound_rect[2]>minSize and bound_rect[3]>minSize: maxWidth = bound_rect[2] maxHeight = bound_rect[3] markerPoint = pt1 if markerPoint != None : #print "WIDTH="+str(maxWidth) cv.Rectangle(frame, markerPoint, (markerPoint[0]+maxWidth markerPoint[1]+maxHeight), cv.CV_RGB(50,255,50), 3) shadowPoint = (markerPoint[0]+2, markerPoint[1]-8) cv.PutText(frame, str(markerPoint[0])+", "+str(markerPoint[1]), shadowPoint,font,cv.CV_RGB(0,0,0)) textPoint = (markerPoint[0], markerPoint[1]-10) cv.PutText(frame, str(markerPoint[0])+", "+str(markerPoint[1]), textPoint,font,cv.CV_RGB(255,100,100))
76
#DrawContours(frame, contour, cv.CV_RGB(0,255,255), cv.CV_RGB(0,0,255), 2) cv.ShowImage('Calibration', frame) c = cv.WaitKey(10) if c == 27 or c == ord('q'): break if __name__=="__main__": Main()
77
import math import sys class Sellmeier2D: dist = 0.0 def calculate(self, x_in): B1 = 1.9782666584676417E+02 C1 = 0.8550366276033477E+00 B2 = 1.6873183622454560E-01 C2 = 2.3229098596138856E+03 B3 = -1.9730630399235122E+02 C3 = 0.6816121372013620E+00
dist = 1.0 + ((B1 * x_in * x_in)/(x_in * x_in - C1)) + ((B2 * x_in * x_in)/(x_in * x_in - C2)) + ((B3 * x_in * x_in)/(x_in * x_in - C3)) #print "Estimated distance:"+str(temp) return dist;
78
#!/usr/bin/python import sys, os, os.path from tracker import Tracker import math soya.init("Testing Depth",400,400,0) soya.path.append(os.path.join(os.path.dirname(sys.argv[0]), "data")) w2 = soya.World() sword_model = soya.Model.get("sword") tracker_thread = Tracker(True) tracker_thread.setDaemon(True) tracker_thread.start() sword = soya.Body(w2, sword_model) sword.rotate_x(90) sword.rotate_y(90) material = soya.Material() material.diffuse = (1.0, 1.0, 1.0, 0.2) cube_world = soya.cube.Cube(material = material) cube_model = cube_world.to_model() cube1 = soya.Body(w2, cube_model) cube1.set_xyz(0, 0, 0) cube1.set_dimensions(30, 20, 10)
class FixedViewportCamera(soya.Camera): def __init__(self, parent, left, top, width, height): soya.Camera.__init__(self, parent) self.set_viewport(left, top, width, height) def resize(self, left, top, width, height): pass def advance_time(self, proportion): print tracker_thread.x , ", ",tracker_thread.y sword.z = tracker_thread.z c1 = FixedViewportCamera(w2, 0, 0, 400, 400) c1.z = 5 c1.x = 0
79
g = soya.widget.Group() g.add(c1) soya.set_root_widget(g) soya.MainLoop(w2).main_loop() """ Experimental results: Pixels wide | Distance (m) 54 1.0 52 1.15 46 1.30 37 1.45 33 1.60 28 1.75 19 1.90 17 2.10 13 2.25 13 2.40 12 2.55 12 2.70 12 2.85 12 3.00 10 3.15 """
80
LISTA DE REFERENCIAS
Agam, G. (2006). Introduction to programming with OpenCV. Recuperado de http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html. Andre, T., Williges, R. y Hartson, H. (1999). The effectiveness of usability evaluation methods:determining the appropriate criteria. Proceedings of the Human Factors and Ergonomics Society.43rd Annual Meeting (Santa Monica CA: HFES) 1090-1094. Audio Procines System (2008). Explicación de la Visión estereoscópica. Recuperado de http://www.adpsystems.net/Pdf/Visi%C3%B3n%20%20estereosc%C3%B3pica.pdf Austriana de Maquinaria y Reproducción Informática. (2011). Guía Básica Para la Elección de un Videoproyector. http://www.amr.es/informatica/docs/VIDEOPROYECTOR.pdf. Chapanis A. (1965). Man Machine Engineering.Recuperado de http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.2.7183&rep=rep1&type=pdf Departamento de Inteligencia Artificial, Universidad Politécnica de Madrid (2011). Visión por Computador. Recuperado de http://www.dia.fi.upm.es/~lbaumela/doctorado/ Dodgson N. A. (1995). Variation and extrema of human interpupillary distance, Universityof Cambridge,Cambridge, England. Ford A. y Alan R. (1998). Colour Space Conversions. Recuperado de http://www.poynton.com/PDFs/coloureq.pdf Gaona A.L. (2007). Introducción al desarrollo de programas con Java. UNAM. Harper R., Rodden T., Rogers Y. y Sellen A. (2007). Being Human: Human-Computer Interaction in the year 2020.Recuperado de http://research.microsoft.com/hci2020 Henshilwood, C. (2010). Engraved pigments point to ancient symbolic tradition. ScienceNews. Recuperado de http://www.sciencenews.org/view/generic/id/ 44668/title/Engraved_pigments_point_to_ancient_symbolic_tradition Hitchcock, G. (2005). "Where does 96 DPI come from in Windows?”. Microsoft Developer Network Blog. Microsoft. 81
Hunt, R. (2004). The Reproduction of Colour. Voyageur Press. Informador Redacción / MPTP (2011, Enero, 07). Tabletas y dispositivos 3D acaparan feria tecnológica. Informador, Recuperado de http://www.informador.com.mx/economia/2011/261851/6/tabletas-y-dispositivos-3dacaparan-feria-tecnologica.htm Iñiguez, A.K. (2011). Propagación de Ondas. Recuperado de http://es.scribd.com/doc/54745580/deber1-emisiones Jenkins F.A. y White H.E. (2008). Experiment 26. Reflection. Recuperado de http://www.physics.usyd.edu.au/pdfs/current/sphys/3yr_lab/Expt_26.pdf Jorke H. y Fritz M. (2005),INFITEC- A New Stereoscopic Visualisation Tool By Wavelength Multiplex Imaging. Recuperado de http://www.jumbovision.com.au/files/Infitec_White_Paper.pdf Jorke y H., Fritz M. (2006). Stereo projection using interference filters. Stereoscopic Displays and ApplicationsRecuperado de http://spie.org/x648.xml?product_id=650348. Karray F., Alemzadeh M., Saleh J. A. y Arab M. N. (2008). Human-Computer Interaction Overview on State of the Art.International Journal on Smart Sensing and Intelligent Systems, Vol.1, No.1, March 2008. King, J. y Raine K. (2010). Light reflection, National Physical Laboratory, Kaye & Laby Tables of physical and chemical constants. Recuperado de http://www.kayelaby.npl.co.uk/general_physics/2_5/2_5_9.html Leavitt N. (2001). 3DTechnology: Ready for the PC?.Computer. Recuperado de www.leavcom.com/pdf/3Dstory2.pdf NASA (2011). Wavelenghts of Visible Light. Recuperadode http://missionscience.nasa.gov/ems/09_visiblelight.html Norman D. y Draper S. (1986). User Centered Design: New Perspective on HumanComputerInteraction. Lawrence Erlbaum, Hillsdale. Perales F.J., Abasolo M.J. y Mas R. (2004). Introducción a la esteroscopía. Recuperado de http://dmi.uib.es/~abasolo/cursorealidad/paco/Estereoscopia.pdf. Picard R.W. (1997). Affective Computing, MIT Press. Cambridge. Python (2.7.2) [Computer Software] http://www.python.org/
82
Sebe N., Lew M.S. y Huang T.S. (2004). The State-of-the-Art in Human-Computer Interaction. Recuperado de Lecture Notes in Computer Science, Volume 3058, SpringerLink. Shapiro, L. G. & Stockman, G. C: "Computer Vision", página 137, 150. Prentence Hall, 2001 Sidelnikov G. (2011). OpenGL Coordinate System Tutorial (Camera, Plane, Basics)Introduction to 3D Coordinate System with OpenGL and 3D basics). Recuperado de http://www.falloutsoftware.com/tutorials/gl/gl0.htm. Suzuki S. y Abe K. (1985).Topological Structural Analysis of Digital Binary Images by BorderFollowing. CVGIP, v.30, n.1. Te’eni D., Carey J. y Zhang P. (2007). Human Computer Interaction: Developing Effective Organizational Information Systems. John Wiley & Sons, Hoboken. The Gna! People. (2006). Soya 3D - Sumario. Recuperado el 18 de Octubre 2010, dehttp://gna.org/projects/soya/ Tuttle, K. y Vish K. (2010). The company that saw 3D coming. Technology Analysis for Business & Investment, RealD Inc. Universidad Blas Pascal (2011). Tecnología de Comunicaciones Ópticas y Normativas. Recuperado de http://revistaonlineiutirla.files.wordpress.com/2010/01/generalidades-dela-fibra-optica.pdf
83