Tesis Jaziel Olmedo y Gabriel Trisca

Anuncio
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
Descargar