Sintetizado de texturas

Sintetizador de texturas

Muchas veces interesa generar texturas a partir de patrones o muestras, para ahorrar trabajo. Para esta tarea se han venido desarrollando una serie de algoritmo, algunos de los cuales se mostraran a continuación

Los algoritmos de síntesis de texturas deben de ser capaces de tomar una muestra de textura y generar una cantidad ilimitada de imagen, la cual no debe ser exactamente como la original pero debe ser percibida por los humanos como la misma textura que la muestra. Además, sería interesante poder transferir la textura de un objeto a otro. Julesz sugirió que dos imágenes de texturas serán percibidas como la misma textura por observadores humanos cuando las estadísticas apropiadas de esas dos imágenes estén relacionadas. Esto hace que las dos tareas fundamentales de un sintetizador de texturas estadístico sean: coger el conjunto de estadísticas correcto para relacionar y encontrar un algoritmo que las relacione.

A la hora de sintetizar texturas se pueden utilizar varios enfoques:

En ambos casos la unidad para trabajar puede ser un píxel o un bloque de píxeles.

Método de Efros y Leung

El proceso de sintetizado hace crecer una nueva imagen (a un ritmo de un píxel cada vez) desde una semilla inicial. Se asume un modelo de campo aleatorio de Markov (MRF) y se estima la distribución condicional de un píxel dada su vecindad sintetizada hasta ahora interrogando la imagen de muestra y encontrando todas las vecindades similares. El grado de aleatoriedad se controla mediante un parámetro.

La textura sintética es creada en la base pixel-by-pixel copiando los valores de los píxeles de la textura original en la sintética en un escaneo secuencial. El valor de un pixel de una posición dada es elegido de acuerdo a los valores de los pixels vecinos.


Aplicación del método de Efros y Leung, propuesto en 1999.

En la figura anterior, el punto indica la posición de un píxel donde el valor tiene que ser asignado, mientras el recuadro indica los píxeles vecinos. La síntesis del algoritmo busca porciones de la textura original (imagen de la izquierda) que mejor coincidan con el píxel vecino. Una vez que se ha encontrado, el valor del píxel que se encuentra en el medio de la caja es copiado a la imagen sintética, y el proceso se repite para el siguiente píxel.

Método de Ashikhmin

Desarrollado independientemente del trabajo de Efro, Wei y Levoy propusieron un algoritmo en el cual se inicializa la imagen de salida con un ruido aleatorio, cuyo histograma coincide con el histograma de la textura de muestra. A continuación se generan los píxeles en orden scanline, es decir, de izquierda a derecha y de arriba abajo. Para cada píxel se busca un píxel similar en la imagen de muestra con la vecindad más parecida y el valor del píxel en la imagen de muestra se copia en la textura sintetizada. La vecindad tiene una forma de L y para estimar la vecindad más parecida se calcula la suma de todos los píxeles de la vecindad de sus diferencias al cuadrado en los tres canales RGB.


Método de Wei y Levoy

En general, esta técnica sufre 2 problemas: el coste computacional y la calidad de la textura sintetizada. EL primero deriva en un gran número de cálculos, ya que la búsqueda debe realizarse para cada pííxel. El segundo problema se debe a que el mejor candidato para el algoritmo quizás no sea el mejor candidato visual, en el caso de texturas rugosas, produciendo así un resultado pobre.

Estos problemas fueron solucionados por Ashikhmi. Especialmente interesado en la síntesis de texturas naturales enseñando repeteciones de pequeños objetos, tales como flores, cesped, guijarros, etc propuso un principio de traslación para encontrar los mejores píxeles candidatos. El observo que si en un paso previo el candidato se encontraba en la posición (x,y), para el próximo píxel, estaría en una posición parecida a (x+1,y). Esto permite evitar gran cantidad de cálculos, solucionando así el primer problema del método de Wei y Levoy.


Método de Ashikhmi

Para solucionar el segundo problema usa un array para almacenar la posición desde la que se asignó píxeles de la imagen de muestra. Al principio el array se inicializa aleatoriamente. Con este array se crea una lista de candidatos para cada píxel a sintetizar y se escoge el que mejor encaje entre los candidatos comparando su vecindad entre la imagen de muestra y la de salida. Se ha comprobado experimentalmente que cuando el tamaño de la lista es aquel generado por los píxeles que forman la "L" el algoritmo trabaja bien (en un principio se dejaba al usuario que controlara este parámetro). Otro factor a tomar en cuenta es el coste de comparar dos vecindades, como el coste es elevado merece la pena buscar duplicados en la lista de candidatos y eliminarlos.


De izquierda a derecha: resultado aplicando Ashikhmi, resultado aplicando Wei y Levoy y textura original.

Método de Efros y Freeman

La necesidad de incrementar la velocidad de los algoritmos y de mejorar la calidad de las texturas sintetizadas motivaron la búsqueda de nuevas formas de abordar el problema. En vez de copiar píxeles individuales, ahora se procede a copiar porciones enteras de la textura original, mediante lo que se llaman métodos basados en parches.

El primero en proponer un método de este tipo fué Y. Q. Xu, que propuso uno al que llamo mosaico caótico. En él, las porciones de la textura original era copiadas aleatoriamente y pegadas juntas para formar una textura sintética. Después de hacer este collage, los bordes de los parches superpuestos eran difuminados. Este algoritmo tan simple y f´cil ofrece una buena calidad visual, ya que los empalmes entre los parches son cubiertos por la alta frecuencia del contenido de la imagen. A pesar de eso, si los parches son cuadrados las juntas horizontales y verticales se notan demasiado. Una técnica más efectiva consistia en conectar solo los parches que tenian vecinos similares.


Aquí un parche se copia entero desde la textura original. El mejor candidato se busca comprobando los píxeles colindantes al agujero destino. Este método fué propuesto por Liang, mejorado posteriormente por Zelinka y Garland, los cuales aceleraron el proceso de búsqueda creando una tabla de referencia gracias a la cual no se tienen que realizar comparaciones ahorrando bastante tiempo.

Una mejora general fué hecha por Efros y Freeman. En vez de pegar parches juntos difuminando los bordes, computaron un límite adaptativo que asegura diferencias locales muy pequeñas.


Aproximación I: textura generada meniante bloques escogidos aleatoriamente de la textura de entrada.


Aproximación II: textura generada mediante bloques escogidos de la textura de entrada. Los bloques tiene una restricción de solapamiento.


Aproximación III: textura generada a partir de bloques dentados de la textura de entrada. Los bloques son escogidos entre los que tienen menor error en la zona de solapamiento. Ahora los bordes de estos bloques son dentados, ya que se busca el camino de mínimo coste entre ese bloque y su vecino.


Trabajo realizado para la asignatura de Gráficos de Computación de la UDC, del curso 2008/2009, por los alumnos
Jorge Abad Casares, Rafael Bermudez Míguez, Yerai Doval Mosquera y Jorge Pérez Rodríguez