Source: http://docplayer.es/10590706-Capitulo-2-silueta-figura-2-1-tetera-capturada-por-la-camara-con-la-silueta-resaltada.html
Timestamp: 2018-12-14 12:51:21+00:00

Document:
Capítulo 2 Silueta. Figura 2.1 Tetera capturada por la cámara con la silueta resaltada - PDF
Download "Capítulo 2 Silueta. Figura 2.1 Tetera capturada por la cámara con la silueta resaltada"
María Victoria Giménez Navarro
1 Capítulo 2 Silueta 2.1 Silueta La silueta de un objeto es muy importante porque es lo que nos da las pistas visuales de cómo es que está formado, nos dice dónde están sus límites y ayuda a diferenciar al objeto de lo que pueda haber detrás de él. Encontrar las siluetas de un objeto en una escena 3D no es un problema trivial aunque lo parezca. Debido a que la silueta de un objeto depende de la posición que tenga con respecto a la cámara, la silueta debe de ser encontrada de nuevo cada vez que haya un cambio en la cámara o en el objeto, como puede ser al mover la cámara de un lado a otro o girarla en cualquier eje. En la Figura 2.1 se ve un objeto capturado por una cámara virtual. En la imagen obtenida, la silueta está resaltada por un color verde y se observa porqué la silueta depende de la posición que tenga el objeto con respecto a la cámara. Si variara la posición del objeto o la cámara la silueta sería diferente. Figura 2.1 Tetera capturada por la cámara con la silueta resaltada Además de la silueta hay otras líneas que son importantes para poder apreciar los detalles de un objeto, a estas líneas de les llama pliegues del objeto o valles y montañas. Estas líneas se presentan cuando el ángulo entre dos caras contiguas es mayor que cierto ángulo previamente establecido como límite. Los pliegues son útiles para describir las características internas del objeto y nos ayudan a apreciar de mejor manera cómo está construido un objeto. Al conjunto que forman la silueta y los pliegues de un objeto se le llama características de un objeto. En la Figura 2.2 se muestra la diferencia que existe entre un objeto con las características resaltadas y otro que no las tiene. Recorriendo la imagen de izquierda a derecha y de arriba abajo, se muestra un cubo en el cual no han 9
2 sido detectadas sus características, un cubo con la silueta resaltada, un cubo con los pliegues resaltados y un cubo con la silueta y los pliegues resaltados. Las características de un objeto son útiles para varios propósitos, como puede ser el describir técnicamente la manera en que está construido un objeto [Gooch, 1999]. Las características de un objeto pueden ser procesadas posteriormente a ser encontradas y dar efectos completamente diferentes, como se hace en el caso del NPR (Non-Photorealistic Rendering). Figura 2.2 Cubo, cubo con silueta, cubo con pliegues y cubo con características. La silueta de un objeto se definirá en este trabajo como el conjunto de puntos que se encuentran sobre la superficie de un objeto, donde la normal de la superficie es perpendicular al vector dirección de la cámara. Si en una escena 3D existe un punto x i con una normal n i y una cámara cuyo centro está en el punto C j, se puede determinar si el punto es silueta evaluando la siguiente ecuación: n i (x i C j ) = 0 Si el resultado de la ecuación es cero, entonces el punto es silueta de acuerdo a la cámara C j. En una escena en la que se cuente con varias cámaras, un punto puede ser silueta para una o mas cámaras mientras que para otras no lo sea. En la Figura 2.3 se observa cómo el punto x i es silueta con respecto a la cámara debido a que su normal es perpendicular al vector dirección de la cámara [Hertzmann, 1999], [Gooch, 2003]. 10
3 Figura 2.3 Punto que es silueta de un objeto con respecto a la cámara C [Hertzmann, 1999]. En un objeto 3D cerrado la silueta se puede definir como el conjunto de las aristas que conecten una cara cuyo frente apunte a la cámara y otra que le de la espalda. En dicho objeto cada cara tiene una normal que apunta hacia fuera del objeto. 2.2 Tipos de algoritmos y el espacio en que trabajan Para encontrar las características de un objeto existen varias aproximaciones. Estas aproximaciones se pueden catalogar de diferentes maneras como puede ser la velocidad en que se ejecutan, la fidelidad de los detalles que encuentran, etc. En este trabajo clasificamos a los algoritmos de detección de silueta de acuerdo al espacio en que trabajan: espacio imagen, espacio objeto e híbridos Detección de silueta en espacio imagen Para poder ver una escena 3D en un monitor se necesita hacer una proyección a una imagen 2D. Los algoritmos que intentan detectar la silueta en esta imagen obtenida se catalogan como algoritmos que trabajan en espacio imagen. Al proyectar una escena a una imagen lo que se obtiene es una matriz de píxeles del tamaño de la resolución de la imagen, la cual representa lo que es visible de la escena. Los píxeles que componen la imagen tan solo contienen información acerca de qué color representan, mas no contienen información acerca del espacio 3D que representa la escena, como profundidad, posición de los objetos, etc. Es esta simplicidad la que intentan explotar este tipo de algoritmos de detección de silueta, ya que al ser una imagen 2D se pueden utilizar los algoritmos de discontinuidad en imágenes para detectar la silueta. Además de que el tiempo de procesamiento del algoritmo depende de la resolución de la imagen y no de la complejidad de la escena. Lo cual permite aplicar este algoritmo a escenas muy complejas. Otro factor que hace a estos algoritmos rápidos es que detectan los pliegues y la silueta del objeto en una sola iteración y no tienen que hacer iteraciones separadas para cada elemento, como otros algoritmos [Isenberg, 2003]. Al aplicar los algoritmos de detección de silueta a una imagen 2D lo que se obtiene como resultado es una lista de píxeles que representan la silueta. Estos píxeles 11
4 después pueden ser procesados para representar de mejor manera la silueta, por ejemplo se pueden pintar de otro color. Estos algoritmos tienen varias desventajas entre las que se cuenta que dependen de la resolución de la imagen y el nivel de detalle que contenga. Entre más pequeña y comprimida sea la imagen más difícil va a ser detectar la silueta. El nivel de detalle más pequeño al que pueden llegar es al de un píxel, lo cual hace difícil la detección de la silueta de elementos pequeños en la imagen o que se encuentran distantes de la cámara. Otra desventaja es que dependen de discontinuidades en los colores, lo cual hace que estos algoritmos no funcionen bien en escenas en las que existen diferentes objetos del mismo color o colores muy similares, ya que no se detectarían los bordes entre estos objetos. Esto también hace difícil la aplicación de estos algoritmos en escenas en las que los objetos tienen texturas, ya que las texturas pueden estar compuestas de varios colores. Otra desventaja importante de estos algoritmos es que en objetos que tengan el mismo color en toda su superficie va a ser complicado que encuentren los pliegues ya que no va a haber discontinuidades en el color. La mayor desventaja de estos algoritmos es que no se obtiene una descripción analítica de la silueta, sino solo una lista de los puntos que la componen. En la Figura 2.4 se observa cómo es que la detección de la silueta en estos algoritmos depende de la resolución de la imagen. Recorriendo la imagen de izquierda a derecha primero hay un caballo de ajedrez dibujado en forma normal, después está el mismo caballo con sus detalles remarcados en una imagen de alta resolución y en el extremo derecho se observa la misma imagen de en medio pero en baja resolución. Figura 2.4 Dibujado normal de una pieza de ajedrez, la misma pieza con los detalles resaltados en alta resolución y la pieza con los detalles resaltados pero en baja resolución Algoritmo de Aaron Hertzmann Esta sección se tomó del artículo Introduction to 3D Non-Photorealistic Rendering: Silhouettes and Outlines [Hertzmann, 1999]. Dentro de este tipo de 12
5 algoritmos se encuentra el de Hertzmann. Él propone obtener los detalles de los objetos de una escena utilizando un Depth Map y un Normal Map. Un Depth Map es una imagen en escala de grises en la cual la intensidad de cada píxel es proporcional a la profundidad que ese píxel representa de la escena 3D. Primero se calcula el Depth Map de la escena y se le aplica un algoritmo de detección de discontinuidades. En este paso no se encuentran los pliegues de los objetos pero es muy posible que si se encuentren los bordes de los objetos. Esto es porque generalmente la diferencia entre los objetos es suficiente para que el detector de discontinuidades los detecte. Posteriormente se genera el Normal Map de la escena. Un Normal Map es una imagen que representa las normales de cada punto que componen la imagen. Lo que se hace para generar el Normal Map es que a cada objeto de la escena se le asigna el color blanco y se traslada al origen. Después se pone una luz roja en el eje X, una verde en el eje Y y una azul en el eje Z, apuntando al objeto. Además se ponen luces con una intensidad negativa en el lado opuesto de cada eje. Posteriormente se genera la imagen 2D y se buscan las discontinuidades en el objeto. Estos últimos dos pasos se repiten para cada objeto de la escena. En esta segunda fase del algoritmo es cuando se detectan los pliegues del objeto y se puede diferenciar al objeto de otros que estén a la misma profundidad. Esto es porque el Normal Map muestra discontinuidades en la orientación de las caras que componen al objeto. Para finalizar, se juntan los detalles que se encontraron en el Depth Map con los del Normal Map para generar una sola imagen que contenga los detalles de los dos pasos anteriores. En la Figura 2.5 se muestran los pasos del algoritmo de Hertzmann. En el extremo superior izquierdo se ve el Depth Map y debajo de él está el Normal Map. En las dos imágenes del centro se muestran los detalles obtenidos en cada uno de los pasos anteriores. Mientras que en la imagen de la derecha se muestra el conjunto de los detalles obtenidos en ambas imágenes. Figura 2.5 Pasos del algoritmo de Hertzmann para encontrar los detalles de un objeto [Hertzmann, 1999] Algoritmos de detección de silueta híbridos 13
6 Este tipo de algoritmos se caracterizan por realizar operaciones en el espacio 3D de la escena y después realizar la interpretación de la escena de una manera convencional. Lo que estos algoritmos generalmente hacen es modificar la geometría de los objetos que componen la escena para que resalten los detalles. En este tipo de algoritmos el resultado que se obtiene es similar al de los algoritmos de espacio imagen. Se obtiene una matriz de píxeles que representa la parte visible de la escena y una lista de píxeles que son silueta. Estos algoritmos tienen la ventaja de que permiten manejar hasta cierto grado los elementos que componen la silueta que se va a obtener. En este caso se puede controlar el grosor y la fidelidad de los detalles, mientras que en los algoritmos de espacio imagen no se podía. La fidelidad y el nivel de detalle que estos algoritmos obtienen es mucho mayor. Como estos algoritmos operan primero en el espacio objeto (escena 3D) y después en el espacio imagen, son capaces de obtener detalles de los objetos pequeños que componen la escena. Además pueden procesar los objetos que se encuentran lejos de la cámara y que por esa razón aparecen pequeños en la imagen final. El tiempo de ejecución de estos algoritmos es medio, no son tan rápidos como los algoritmos de espacio imagen pero todavía pueden ser utilizados en aplicaciones interactivas [Isenberg, 2003]. La desventaja principal de estos algoritmos es que tampoco se obtiene una descripción analítica de la silueta, sino que se obtiene qué píxeles forman las características del objeto. Debido a eso el nivel de estilización que se puede generar de la silueta es limitado Algoritmo de Rossignac y Van Emmerik Este algoritmo se describe en el artículo Contours on a frame buffer [Rossignac, 1992]. Rossignac y Van Emmerik presentan un algoritmo muy sencillo para desplegar la silueta de un objeto. Este algoritmo se divide en dos pasos, el primero consiste en dibujar las caras visibles del objeto de manera tradicional, mientras que para el segundo paso hay que dibujar las caras ocultas de tal manera que resalten las uniones y sea posible entonces ver la silueta del objeto. Una primera implementación de este algoritmo consiste en que en el segundo paso se dibujen las caras ocultas del objeto en modo de wireframe con un grosor mayor. De esta manera la silueta del objeto va a resaltar. Este algoritmo tiene la desventaja de que solo funciona en la silueta y no en los pliegues del objeto. Otro detalle de este algoritmo es que la silueta se dibuja del grosor que se haya especificado para el wireframe, pero cuando el grosor de la línea es mayor que 2 pixeles, esta implementación tiene el error de que la silueta del objeto parece estar definida por segmentos de recta que nunca se tocan. En la segunda implementación que hicieron se cambió el segundo paso, el cual consistió en desplazar una distancia X las caras ocultas del objeto en dirección a la cámara. Con esto se obtuvo que la silueta se viera continua y no como segmentos de recta. El problema de esta implementación es que no se tiene control sobre el grosor de la silueta que se genera. Esto se debe a que el grosor depende del ángulo que forme la 14
7 cara frontal con la cara posterior. En la Figura 2.6 se muestra cómo es que esta segunda implementación funciona. De izquierda a derecha primero está la cámara y después un objeto en el que se puede apreciar qué cara es frontal y cuál es posterior. En la imagen del centro y de la derecha la cara posterior ha sido desplazada la misma distancia en dirección a la cámara, pero como el ángulo que forma esa cara con la cara frontal es diferente, entonces se obtiene un grosor diferente de la silueta del objeto. Este detalle es todavía más evidente en un objeto completo, ya que en diferentes partes del objeto, la silueta puede tener diferentes grosores. Figura 2.6 Representación del algoritmo de Rossignac y Van Emmerik Algoritmo de Raskar y Cohen Este algoritmo se presentó en el documento Image Precision Silhouette Edges [Raskar, 1999]. R. Raskar y M. Cohen hicieron mejoras al algoritmo de Rossignac y Van Emmerik. El primer paso se mantuvo intacto, mientras que fue el segundo paso el que cambiaron completamente. Lo que ellos hicieron fue que expandieron los triángulos que forman las caras ocultas a lo largo de cada uno de sus bordes. La distancia que se expanden estas caras depende del ángulo que forme la cara con la cámara y la distancia a la que se encuentre de ella. Con eso se logra que la silueta del objeto sea del mismo grosor a lo largo de todo el objeto. En la Figura 2.7 se muestra cómo es que las caras posteriores son expandidas a lo largo de sus bordes. Figura 2.7 Expansión de las caras posteriores en el algoritmo de Raskar y Cohen [Raskar, 1999]. 15
8 2.2.3 Espacio Objeto Para poder tener un control completo sobre la imagen final se debe especificar como trazar la silueta y los pliegues de los objetos al momento de dibujarlos. Para poderlo hacer es necesario tener una descripción analítica de cómo es que están formadas las características de ellos. Los algoritmos que trabajan en espacio objeto realizan todas sus operaciones en el espacio 3D que describe la escena. Debido a eso son capaces de generar una descripción analítica de cómo están formadas las características del objeto [Isenberg, 2003]. En la Figura 2.8 se muestra cuál es la diferencia entre encontrar los píxeles que forman la silueta y hallar una descripción analítica de la silueta. En las dos imágenes de arriba se observa el mismo cubo con la silueta y pliegues detectados. En la imagen de la izquierda se ve lo que se obtiene en un algoritmo de espacio imagen mientras que en la derecha está lo que se obtiene de un algoritmo de espacio objeto. En las dos imágenes inferiores se observa que es lo que pasa al dibujar ambas aproximaciones a una imagen de baja resolución. En la imagen de espacio imagen se pierde la silueta, mientras que en la imagen en la que se obtuvo la silueta de espacio objeto se observan mejor los detalles. En este ejemplo, en la imagen que se obtuvo la silueta de espacio objeto, se pintó la silueta y los puntos que la forman de color azul, pero de igual manera se pudo haber pintado negra y omitir los puntos que la forman. Figura 2.8 En la izquierda hay dos cubos con sus detalles resaltados a partir del espacio imagen. En la derecha están con una descripción analítica de sus detalles. La ventaja que tiene este tipo de algoritmos sobre los demás radica en que el resultado que se obtiene es una descripción analítica de los detalles del objeto. Esta descripción permite generar una silueta mucho más estilizada que en los dos métodos anteriores. Al tener los puntos que forman la silueta se pueden unir estos puntos de la manera que uno desee, por ejemplo con líneas que simulen el trazo de un pincel grueso, el de una crayola, el de un estilógrafo, etc. Otra ventaja es que permite dibujar los detalles del objeto del mismo grosor siempre. 16
9 La desventaja principal de este tipo de algoritmos es que dependen de la complejidad de la escena. En una escena que esté formada por pocos objetos u objetos no complejos es posible obtener resultados interactivos, pero en escenas complejas es muy difícil detectar los detalles con suficiente velocidad como para crear una aplicación interactiva Método de fuerza bruta Este es el algoritmo más sencillo que trabaja en espacio objeto [Isenberg, 2003] [Gooch, 2003]. Lo que hace es que para cada imagen que va a ser generada, recorre la lista de todas las aristas que componen la escena, buscando las aristas que conectan una cara frontal con una cara posterior. Al encontrar una arista que cumpla esta condición la añade a una lista de aristas que son silueta. Dependiendo de la implementación puede variar en que añada la arista o los dos vértices que conecta. Posteriormente se dibujan de la manera deseada todas las aristas que se encuentran en la lista. La ventaja principal de este algoritmo es que garantiza encontrar todos los detalles del objeto, además de que funciona bien con escenas sencillas. La desventaja que tiene es que debe de verificar todas las aristas de los objetos que componen la escena. Lo cual implica un exceso de comparaciones ya que son pocas las aristas de un objeto que son silueta Algoritmo estocástico de Markosian En un objeto tridimensional solo una pequeña parte de sus aristas son silueta. Si un objeto contiene n aristas, aproximadamente n es el número de aristas que son silueta [Markosian, 1997]. Debido a esto no es práctico evaluar todas las aristas de un objeto. Markosian propone buscar las aristas que son silueta de forma aleatoria para no tener que hacer comparaciones en todas las aristas, para posteriormente buscar en las aristas adyacentes a las que fueron silueta para comprobar si también son silueta. En el algoritmo primero hay que calcular el ángulo dihedral de las aristas del objeto y hacer una lista ordenada de mayor a menor de acuerdo a este ángulo. La probabilidad de que una arista sea silueta es θ / π, donde θ es el ángulo dihedral que se forma entre las dos caras que comparten la arista. Al momento de estarse ejecutando el programa de detección de silueta se eligen al azar X número de aristas para probar si son silueta. Esta búsqueda aleatoria se configura para que la probabilidad de que una arista pueda ser elegida, sea proporcional a su ángulo dihedral. Una vez que se obtienen cuales aristas del grupo original son silueta, se comprueba recursivamente si sus aristas adyacentes también son silueta. Esto se hace porque las aristas que son silueta generalmente son adyacentes a otras que también lo son. 17
10 Al actualizar la escena porque cambia la relación entre los objetos y la cámara, el algoritmo no comienza desde cero otra vez. Primero prueba las aristas que antes del cambio eran silueta, esto es porque si fue un cambio pequeño es factible que las aristas que antes eran silueta, de nuevo lo sean. Posteriormente se eligen de nuevo X aristas al azar y se prueba si son silueta o no. Para finalizar de nuevo se hace una comprobación recursiva con las aristas adyacentes de las que resultaron ser silueta. Este algoritmo tiene la deficiencia de que es factible que no encuentre todos los detalles de los objetos. La probabilidad de que una silueta o un pliegue en específico sean detectados depende del número de aristas que lo compongan. Cómo el algoritmo no comienza desde cero a partir de la segunda iteración, tiene la ventaja de que en cada nueva iteración puede encontrar los detalles que en imágenes anteriores no pudo. 2.3 Elección del Algoritmo Al momento de seleccionar un algoritmo de detección de silueta es importante saber con anterioridad cual es el tipo de aplicación en la que se va a utilizar. En aplicaciones interactivas los algoritmos de espacio objeto no son convenientes porque tardan mucho en ser procesados, lo cual fuerza a buscar otra solución o usar el algoritmo en conjunto con escenas sencillas o un algoritmo de aceleración de escenas 3D. En cambio, en aplicaciones en las que lo más importante es procesar las características de los objetos, los algoritmos de espacio imagen no dan el resultado óptimo, pero generan el resultado en tiempo real. En esta tesis se eligió el algoritmo de Aaron Hertzmann porque se puede utilizar en conjunto con el estilo caricatura utilizado para el navegador y aún así producir resultados en tiempo real. Otro factor importante para la elección de este algoritmo es que puede ser implementado en Shaders, mientras que los otros dos tipos de algoritmos no pueden ser implementados en Shaders. Tienen que ser ejecutados primero en el CPU central de la computadora y posteriormente pasar sus resultados a la tarjeta de video. Al algoritmo seleccionado se le pueden hacer mejoras en los Shaders para que produzca mejores resultados y no este confinado a producir una silueta del grosor de un píxel, sino que pueda producirla de diferentes grosores. 18

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución