La síntesis de texturas es el proceso de construir algorítmicamente una imagen digital grande a partir de una imagen de muestra digital pequeña aprovechando su contenido estructural. Es objeto de investigación en infografía y se utiliza en muchos campos, entre otros, edición de imágenes digitales , infografía 3D y postproducción de películas .
La síntesis de texturas se puede utilizar para rellenar huecos en imágenes (como en pintura ), crear imágenes de fondo grandes no repetitivas y ampliar imágenes pequeñas. [1]
Las texturas procesales son una técnica relacionada que puede sintetizar texturas desde cero sin material de origen. Por el contrario, la síntesis de texturas se refiere a técnicas en las que se compara o amplía alguna imagen fuente.
" Textura " es una palabra ambigua y en el contexto de la síntesis de texturas puede tener uno de los siguientes significados:
La textura se puede organizar a lo largo de un espectro que va desde regular hasta estocástico, conectado por una transición suave: [2]
Los algoritmos de síntesis de texturas están destinados a crear una imagen de salida que cumpla con los siguientes requisitos:
Como la mayoría de los algoritmos, la síntesis de texturas debería ser eficiente en tiempo de cálculo y en uso de memoria.
Se han investigado o desarrollado los siguientes métodos y algoritmos para la síntesis de texturas:
La forma más sencilla de generar una imagen grande a partir de una imagen de muestra es colocarla en mosaico . Esto significa que simplemente se copian y pegan varias copias de la muestra una al lado de la otra. El resultado rara vez es satisfactorio. Excepto en casos raros, habrá costuras entre los mosaicos y la imagen será muy repetitiva.
Los métodos de síntesis de textura estocástica producen una imagen eligiendo aleatoriamente valores de color para cada píxel, solo influenciados por parámetros básicos como brillo mínimo, color promedio o contraste máximo. Estos algoritmos funcionan bien sólo con texturas estocásticas; de lo contrario, producen resultados completamente insatisfactorios ya que ignoran cualquier tipo de estructura dentro de la imagen de muestra.
Los algoritmos de esa familia utilizan un procedimiento fijo para crear una imagen de salida, es decir, están limitados a un único tipo de textura estructurada. Por lo tanto, estos algoritmos sólo se pueden aplicar a texturas estructuradas y sólo a texturas con una estructura muy similar. Por ejemplo, un algoritmo de propósito único podría producir imágenes de textura de muros de piedra de alta calidad; sin embargo, es muy poco probable que el algoritmo produzca algún resultado viable si se le da una imagen de muestra que muestra guijarros.
Este método, propuesto por el grupo Microsoft para gráficos de Internet, es una versión refinada del mosaico y realiza los siguientes tres pasos:
El resultado es una imagen de textura aceptable, que no es demasiado repetitiva y no contiene demasiados artefactos. Aun así, este método no es satisfactorio porque el suavizado del paso 3 hace que la imagen de salida parezca borrosa.
Estos métodos, que utilizan campos de Markov, [3] muestreo no paramétrico, [4] cuantificación de vectores estructurados en árbol [5] y analogías de imágenes [6] , son algunos de los algoritmos de síntesis de texturas generales más simples y exitosos. Por lo general, sintetizan una textura en el orden de las líneas de escaneo buscando y copiando píxeles con la vecindad local más similar a la textura sintética. Estos métodos son muy útiles para completar imágenes. Pueden verse obligados, como en las analogías de imágenes , a realizar muchas tareas interesantes. Por lo general, se aceleran con algún tipo de método del vecino más cercano aproximado, ya que la búsqueda exhaustiva del mejor píxel es algo lenta. La síntesis también se puede realizar en multiresolución, como mediante el uso de un campo aleatorio de Markov multiescala no paramétrico y no causal. [7]
La síntesis de texturas basada en parches crea una nueva textura copiando y uniendo texturas en varios desplazamientos, similar al uso de la herramienta clonar para sintetizar manualmente una textura. El acolchado de imágenes [8] y las texturas de corte gráfico [9] son los algoritmos de síntesis de texturas basados en parches más conocidos. Estos algoritmos tienden a ser más efectivos y rápidos que los métodos de síntesis de texturas basados en píxeles.
Más recientemente, se demostró que los métodos de aprendizaje profundo son un enfoque paramétrico potente, rápido y basado en datos para la síntesis de texturas. El trabajo de Leon Gatys [10] es un hito: él y sus coautores demostraron que los filtros de una red neuronal profunda entrenada discriminativamente pueden usarse como descriptores de imágenes paramétricos efectivos, lo que condujo a un novedoso método de síntesis de texturas.
Otro desarrollo reciente es el uso de modelos generativos para la síntesis de texturas. El método Spatial GAN [11] mostró por primera vez el uso de GAN totalmente no supervisadas para la síntesis de texturas. En un trabajo posterior, [12] el método se amplió aún más: PSGAN puede aprender imágenes periódicas y no periódicas de forma no supervisada a partir de imágenes individuales o grandes conjuntos de datos de imágenes. Además, el muestreo flexible en el espacio de ruido permite crear texturas novedosas de tamaño de salida potencialmente infinito y realizar una transición suave entre ellas. Esto hace que PSGAN sea único con respecto a los tipos de imágenes que puede crear un método de síntesis de texturas.
Algunas implementaciones de síntesis de texturas existen como complementos para el editor de imágenes gratuito Gimp :
Una implementación de síntesis de textura basada en píxeles:
Síntesis de texturas basada en parches:
Síntesis de textura generativa profunda con PSGAN, implementada en Python con Lasagne + Theano:
Varios de los artículos más antiguos y más referenciados en este campo incluyen:
aunque también hubo trabajos anteriores sobre el tema, como
(Este último algoritmo tiene algunas similitudes con el enfoque Chaos Mosaic).
El enfoque de muestreo no paramétrico de Efros-Leung es el primer enfoque que puede sintetizar fácilmente la mayoría de los tipos de textura y ha inspirado literalmente cientos de artículos posteriores sobre gráficos por computadora. Desde entonces, el campo de la síntesis de texturas se ha expandido rápidamente con la introducción de tarjetas aceleradoras de gráficos 3D para computadoras personales. Sin embargo, resulta que Scott Draves publicó por primera vez la versión basada en parches de esta técnica junto con el código GPL en 1993, según Efros.