Síntesis de Textura

La síntesis de textura, como procedimiento algorítmico no tiene nada de artístico;  aunque una exploración en el tema pudiera llevarnos a controlar mejor el aspecto de obras visuales que la utilicen. Existen diversos métodos para efectuar síntesis de textura: por cortes mínimos, teselaciones de Wang, o redes neuronales, entre otras posibilidades.

El problema de síntesis de textura consiste en que, a partir de la muestra pequeña de una textura, se pueda crear un tapiz más grande con ésta, que se perciba como la misma textura de la que provino. En la creación de videojuegos es común querer pintar un cielo, o una región de pasto, o tal vez aplicar un aspecto de mosaicos a un castillo, y una manera eficiente para realizar esta tarea sin saturar el procesamiento computacional, sería que, cada uno de esos tapices estuviera generado por una imagen muy pequeña. De aquí que sea útil desarrollar un algoritmo de síntesis de textura.

La texturización de geometría conforma sólo un sub sistema en un programa como Blender; sin embargo, la síntesis de textura también tiene diversas aplicaciones fuera del modelado 3D. Se pudiera pensar en usar una misma textura para unir varias aplicaciones o porciones de videos (o de imágenes, o entornos virtuales), conformando una pieza visual, donde esa misma textura estuviera presente desde varias perspectivas distintas.

Desglosaré algunas maneras de emplear y pensar la síntesis de textura y la transferencia de estilo.

Texturas y Teselaciones

Esta sección intentará establecer una relación entre los conceptos de textura y teselación.

Una teselación (o embaldosado) en el plano $\mathcal{T}$ es una familia numerable de conjuntos cerrados $$\mathcal{T} = \{T_1, T_2, \ldots\}$$que cubren al plano, que no se sobrelapan unos con otros y no dejan huecos. Más formalmente, se cumplen dos condiciones: $$\mathcal{T} = T_1\cup T_2\cup \ldots \text{,}$$ lo que significa que la unión de todas las teselas (o baldosas) debe ser todo el plano euclidiano, e $$int(T_i)\cap int(T_j) = \emptyset$$para $i \neq j$. Es decir, los puntos interiores de los conjuntos $T_i$ son disjuntos dos a dos. 1

En la siguiente imagen (figura 1), cada “ave” representa una tesela $T_i$ , según la definición. Si contáramos con una infinidad de ellas, sin duda se cubriría el plano.

Figura 1: Teselación Escher

Y más aún, decimos que la teselación es “periódica, con centros de simetría de órdenes 6, 3 y 2” (haciendo referencia al “grupo 632”). 2

Periódico quiere decir, que al trasladar los centros de simetría hacia otros centros de simetría, la figura queda invariante (es decir, parece que no hubo un movimiento de imagen después de la traslación).

Hay tres centros de simetría para esta ilustración, que son: a) los puntos en donde se juntan las colas de 3 pájaros con las alas de otras 3 aves, y donde se puede rotar 60º y 180º, dejando invariante la teselación; b) los puntos donde se juntan únicamente las alas derechas de 6 pájaros, y donde se puede rotar 120º sobre este centro, dejando la figura igual, salvo por que se intercambien algunos colores.

En el contexto de la síntesis de textura, es posible considerar la imagen descrita (Figura 1) como una textura estructurada y hacer el experimento de tomar esta muestra como la imagen de entrada en un algoritmo de síntesis de textura, buscando obtener un tapiz más amplio, que preserve la “configuración de aves.”

De los resultados experimentales, corroboramos que esto no es lo que realmente ocurre (ver figuras 2 y 3). Para el algoritmo de síntesis de textura de Kwatra el al. algunas aves quedan recortadas (figura 2), y especialmente en el modelo de Gatys, las teselas ya no tienen forma de aves (figura 3). 3 Ya no se puede decir que la imagen obtenida es un embaldosado periódico, a diferencia de la ilustración original, que sí lo era. De donde podemos concluir que el modelo de Gatys no sirve muy bien para emular texturas estructuradas.

Figura 2: Síntesis de textura por cortes mínimos.

Sin embargo, el mismo modelo sí permite realizar síntesis de textura a varias escalas, agrandando o achicando las figuras de la imagen de entrada (figura 4).

Luego del análisis anterior, plantearemos cuatro preguntas, y que se intentarán responder:

Figura 3: Síntesis de textura por redes neuronales convolucionales.
  1. ¿Es una teselación una textura?4
  2. ¿Es una textura una teselación?5
  3. ¿Este punto de vista ayudaría a desarrollar un mejor algoritmo de síntesis de textura?
  4. ¿El concepto de teselación ya figura de algún modo en la implementación de alguno de los algoritmos de síntesis de textura estudiados?   
Figura 4: Síntesis de textura con NST usando diferentes escalamientos.

Una definición general de textura es: “la agregación de materiales que se perciben como variaciones o irregularidades de una superficie continua, y que se distinguen a través del tacto, la vista o el oído. A las texturas tactiles se les llama así, pues es el tacto el que mejor distingue entre una textura y otra. Por ejemplo, la suavidad, aspereza y rugosidad son sensaciones que transmite la textura. En una pintura, se destaca la importancia de la textura, abarcando desde el lienzo o papel, hasta las brochas y la pintura utilizados. En música, textura hace referencia al modo en que se combinan los materiales rítmicos, melódicos y armónicos en una composición, determinando así, la cualidad sonora global de una pieza. Finalmente, las texturas visuales imitan la realidad, como puede ser el caso de imágenes de arena, piedras, o agua.”

Entonces, ¿Es una textura una teselación?

Tomando en cuenta la noción general de textura, sería poco adecuado decir que lo es; incorrecto inclusive, pues en el caso de una pintura, su rugosidad bien puede deberse a varios elementos que se sobrelapan, que serían varios trazos encimados sobre un lienzo, el cual también forma parte de la textura.

¿Es una teselación una textura?

Sí. En el contexto de síntesis de textura, si la imagen de entrada del algoritmo es una teselación, la consideramos una textura estructurada, y éstas son particularmente difíciles de sintetizar. Fuera de este escenario, que ya no es tan relevante para el presente texto, las teselaciones suelen ser un decorado para el suelo y las paredes de hogares, hasta catedrales y ruinas. Son distinguibles al tacto y la vista, por lo que también se manejan como texturas en el ámbito social.

Luego, ¿El concepto de teselación ya figura de algún modo en la implementación de alguno de los algoritmos de síntesis de textura estudiados?

Pensando en el algoritmo con que se está realizando la síntesis de textura, que en el caso de los modelos tratados se da con respecto a parches de pixeles, sin duda estos parches no tienen la forma de las teselas que conforman lo que en la imagen de entrada, podría ser una baldosa. La elección de los parches es aleatoria, y es aplicable no solamente a texturas estructuradas, sino también a las estocásticas. Aunque estas últimas pudieran llegar a considerarse, en casos muy particulares, teselaciones aperiódicas, sería difícil identificar los bloques básicos que las construirían.

Observamos, sin embargo, que, en el modelo de Kwatra, y en el nivel de los pixeles que componen una imagen, el algoritmo de flujo máximo corte mínimo determina qué pixeles de cada parche serán pegados en la imagen de salida, lo que eventualmente cubre a toda la resolución de la imagen de salida. Este punto de vista, en el nivel de los pixeles, concuerda con la definición de teselación, donde subconjuntos de pixeles en los parches son una tesela. Y nuevamente hay que recalcar, que los parches no suelen coincidir con lo que sería una baldosa en la imagen de entrada, si tal muestra de entrada fuera una teselación.

¿Considerar que en el contexto de la síntesis de textura, una textura pudiera ser una teselación,  ayudaría a desarrollar un mejor algoritmo de síntesis de textura?

Esta pregunta es más interesante, y también más difícil de responder.

Primero, hay que tomar en cuenta que el área de la computación maneja una propia teoría y metodología, la cual puede prescindir de la “teoría de las teselaciones en matemáticas” para proponer un algoritmo de síntesis de textura que funcione. A esto agreguémosle los trabajos que en el pasado ya se han hecho para elaborar síntesis de textura. Kwatra et. al se basaron en trabajos previos de Efros y Freeman; Gatys et. al usaron el mismo modelo que Portilla y Simoncelli, pero en el ámbito de las redes neuronales. De esto y muchas otras cosas se deriva que existan muchas maneras de hacer síntesis de textura, y sería difícil establecer un único algoritmo, nombrándolo el más eficiente. Así, si se pretende desarrollar un buen algoritmo de síntesis de textura que tome como inspiración la definición matemática de teselación, sería conveniente conocer otras implementaciones de síntesis de textura, en lugar de reinventar la rueda totalmente.

Dicho esto, existen aplicaciones de las llamadas “teselaciones de Wang” a la síntesis de textura, que datan desde 1997 (Stam). Consultar también “Wang Tiles for image and texture generation” (Cohen, et al, 2003).

Las teselaciones de Wang son colecciones de baldosas cuadradas y coloreadas en cada una de sus esquinas. La regla para apilar a una tesela seguida de otra es: únicamente se pueden unir los extremos que comparten color. Además, no se pueden rotar los cuadrados. El comportamiento es parecido al del juego de dominó, donde sólo se puede agregar una nueva ficha que comparta extremo con la pieza que ya está en el tablero.

Está demostrado que cualquier conjunto de teselas de Wang que sea capaz de cubrir todo el plano, lo hará de manera aperiódica; lo que significa que la teselación carecerá de simetría traslacional. Y esta es la motivación principal para utilizar este tipo de mosaicos en síntesis de textura, ya que el algoritmo necesitará muy pocas piezas cuadradas “rellenas” de textura para producir una teselación aperiódica de esa misma textura. Como los parches empleados son pocos, esto ayudará en el procesamiento computacional, y también facilitará la programación de un algoritmo que junte los mosaicos. Por otro lado, la aperiodicidad garantizará que visualmente sea imperceptible que las mismas piezas se están utilizando una y otra vez para tapizar la textura de salida.

Texturas y transferencia de estilo

El problema de transferencia de estilo consiste en que, a partir de dos imágenes de entrada, un algoritmo haga posible combinar ambas, de tal modo una de ellas aporte el contenido y la otra, el estilo, generando una sola imagen de salida.

Figura 5: Transferencia de estilo que preserva los colores de las imágenes contenido.

Desde Efros y Freeman, en su artículo “Image quilting for texture synthesis and transfer” (2001) se propuso a la transferencia de estilo como una extensión de la síntesis de textura. Posteriormente, se crearon algoritmos que lograron procesar  cualquier imagen con un único estilo. No fue sino hasta el modelo Neural Style Transfer de Gatys, Ecker, Bethge, que la técnica se implementó de manera realmente eficiente, pudiendo adaptarse el algoritmo a diversos estilos, y siendo capaz de extraer con suficiente fidelidad las características relevantes de las imágenes contenido y estilo. 6

El algoritmo Neural Style Transfer propuesto por Gatys et al, funciona así:

Se tiene una red neuronal convolucional que acepta como entrada dos imágenes aleatorias: a la primera se le llama la imagen contenido, y a la segunda, la imagen estilo. La salida del algoritmo será una única ilustración que fusionará ambas imágenes de entrada, a partir de estilizar la imagen contenido. En el ejemplo más típico, como contenido se elige la fotografía de una persona, mientras que la imagen estilo es una pintura de Van Gogh (“La noche estrellada”), y que al combinarse, se obtiene lo que parecería ser una pintura de la persona fotografiada, en el estilo de Van Gogh (ver figura 6).

Figura 6. La imagen estilo es “La noche estrellada”, de Van Gogh.

La imagen estilizada es el resultado de haber optimizado la red neuronal, donde la función que se optimiza —y que en el contexto de redes neuronales es comúnmente llamada función de pérdida— es:

$$\mathcal{L}_{total} = \alpha\mathcal{L}_c + \beta\mathcal{L}_s \text{.}$$ 

Significa que la función de pérdida total es la suma de dos funciones de pérdida $\mathcal{L}_s$  y  $\mathcal{L}_c$  , donde $\mathcal{L}_s$ es la función de pérdida para la imagen estilo, y $\mathcal{L}_c$ es la función de pérdida para la imagen contenido (consultar el artículo de Gatys en (3) para más detalles acerca de esta ecuación). Los escalares $\alpha$ y $\beta$ que acompañan a $\mathcal{L}_s$ y $\mathcal{L}_c$ determinarían cuanta información de cada una de estas funciones de pérdida, permanecerá en la imagen de salida.

Por ejemplo, si $\alpha = 0$ y $\beta = 1$, entonces $\mathcal{L}_{total} = 0 + \mathcal{L}_s = \mathcal{L}_s$ . Pero en este caso, lo que aparece en la imagen de salida, sólo tiene información de la imagen estilo.

También se podría hacer algo parecido, pero al revés, especificando $\beta = 0$ y $\alpha \neq 0$. De este modo, $\mathcal{L}_{total} = \alpha\mathcal{L}_c + 0 = \alpha \mathcal{L}_c$ . Y lo que daría como resultado  una reconstrucción de la imagen contenido sin ningún tipo de estilización.

Como bien constata el artículo de Gatys en [3], la función de pérdida $\mathcal{L}_s$ es nada más ni nada menos que una implementación de síntesis de textura. Es decir, estableciendo $\alpha = 0$ y $\beta$ igual a un número distinto de cero, es una manera de hacer síntesis de textura para la imagen de estilo.

En sus inicios, y con el objetivo de efectuar síntesis de textura, Neural Style Transfer requería que la imagen de entrada e imagen de salida fueran del mismo tamaño. De este modo, sólo se estaba trabajando en el problema de que la textura de salida se pareciera mucho a la textura de entrada, pero no se estaba tomando en cuenta la idea de crear un tapiz más amplio a partir de la muestra pequeña de una textura. Se puede ilustrar este proceso de reconstrucción de imagen que lleva a cabo Neural Style Transfer (Figura 6).

Figura 6: Proceso de reconstrucción de imagen. Cada muestra representa una iteración del algoritmo.

En posteriores mejoras al algoritmo, como en “neural_style_pt” 7, se puede especificar que la imagen de salida tenga igual resolución a la imagen contenido, mientras que la imagen estilo sea más pequeña. Así, en el caso de síntesis de textura ($\alpha = 0$), la imagen contenido sería inicializada por un ruido aleatorio aplicado sobre un canvas blanco. Y en este caso ya es posible generar un tapiz más amplio de una textura a partir de la muestra pequeña de la misma.

Al realizar síntesis de textura con Neural Style Transfer, donde la ya referida ilustración de Escher se tomó como la imagen estilo, y que tenía una dimensión de 256×256 pixeles, se generó una imagen de salida de 1990×1290 pixeles de dimensión. style_scale y style_weight fueron parámetros que se modificaron en el programa y que determinaron totalmente la apariencia de la imagen generada. El primer parámetro escala la textura de entrada, agrandándola o achicándola hacia la imagen de salida. Dado que la imagen contenido es de mayor resolución que la textura, de no modificarse el escalamiento (es decir, dejando style_scale=1), se obtendría una textura agrandada y muy poco similar a lo que se busca. Mejores resultados de síntesis de textura se producen al dar valores 0.1, 0.2, …., 0.9 a style_scale (ver figura 4).

Los diferentes escalamientos de la textura inciden de manera relevante, en una fotografía estilizada por la textura (ver figura 7).

Figura 7: Transferencias de estilo usando las texturas generadas.

Conclusiones

Estudiar algoritmos de síntesis de textura puede ayudar a entender cómo funciona el procesamiento de imágenes desde el nivel de los pixeles, y conocer la teoría matemática involucrada en ella.

Existen diversas maneras de hacer síntesis de textura, y actualmente se siguen elaborando nuevos algoritmos que sintetizan texturas, algunos de los cuáles parten de que una textura debe ser modelada por un campo aleatorio de Markov, mientras otras propuestas usan estadísticas de segundo orden, modelos fractales o transformadas Wavelet. Los algoritmos de síntesis de textura varían enormemente entre sí; algunos (los más antiguos) trabajan pixel por pixel, y otros emplean bloques de pixeles denominados parches. Algunos métodos funcionan mediante programación estructurada, a diferencia de los que emplean aprendizaje de máquinas o redes neuronales. Aún así, no se puede hablar de un algoritmo óptimo de síntesis de textura, lo que también estaría muy relacionado con el para qué será utilizada la textura.

Varios métodos de síntesis de textura pueden generalizarse a videos. Tal es el caso del algoritmo de Kwatra et al, y el de Gatys et al.

Visto desde el lado matemático, los campos aleatorios de Markov, los modelos probabilísticos en gráficas o la estadística, forman parte de la teoría que sustenta varios algoritmos de síntesis de textura. 8

Visto del lado de la programación, también podría ser de interés la optimización de algoritmos en visión computacional. E igualmente lo sería la transferencia de estilo, para la cual ya existen muchos más algoritmos que hacen uso de esta técnica, además de Neural Style Transfer (por ejemplo Strotss Style Transfer).

Para más ideas sobre cómo emplear síntesis de textura y transferencia de estilo en obras visuales visitar: Green ScreenTransferencia de Estilo en Videos, y Modelado de cabezas en 3D , en pasadas publicaciones de este blog.

Bibliografía

[1] A. Efros y W. T. Freeman, Image quilting for texture synthesis and transfer, Proceedings of the 28 th Annual Conference on Computer Graphics and Interactive Techniques, (2001), 341-346.

[2] L. Gatys, A. S. Ecker y M. Bethge, Texture Synthesis using convolutional neural networks, NIPS’S15, Proceedings of the 28 th International Conference on Neural Information Processing Systems, (2015) 262-270.

[3] L. Gatys, A. S. Ecker y M. Bethge, Image Style Transfer using convolutional neural networks, IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (2016)

[4] B. Grünbaum y G. Shepard, Tilings and Patterns, 2da edición, Dover Publications, 2016

[5] V. Kwatra, A. Schödl, et. al. Graphcut Textures: Image and Video Synthesis Using Graph Cuts. ACM Transactions on Graphics. (22)(3) (2003)

[6] Y. Jing, et al., Neural Style Transfer: A review, Transactions on Visualization and Computer Graphics. (26)(11) (2020), 3365-3385.

  1.   El interesado en esta definición debería revisar “Tilings and Patterns,” de Grünbaum y Shepard.
  2.   Más detalles sobre el grupo 632 en https://en.wikipedia.org/wiki/Wallpaper_group#Group_p6_(632)
  3.   Consultar (3) y (5) en la bibliografía para la referencia completa a los artículos de estos modelos de síntesis de textura.
  4.   Se refiere a si “¿todo lo que es teselación es una textura?”
  5.   Refiriéndose a: si cualquier textura es una teselación.
  6.   Se recomienda leer el artículo “Neural Style Transfer, a review,” en (6).
  7.   Disponible en  https://github.com/ProGamerGov/neural-style-pt 
  8.   En https://youtu.be/QSBS-keJcfM se puede ver la charla que di sobre matemáticas y síntesis de textura en el CaRT 2020.
Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *