ebsynth
es una herramienta versátil para la síntesis de imágenes por ejemplo. Se puede utilizar para una variedad de tareas de síntesis de imágenes, incluida la síntesis de texturas guiada, la transferencia de estilos artísticos, la pintura basada en el contenido y la superresolución.
El objetivo de ebsynth
es preservar la fidelidad del material original. A diferencia de otros enfoques recientes, ebsynth
no depende de redes neuronales. En cambio, utiliza una implementación de última generación de algoritmos de síntesis de texturas no paramétricos. Gracias a su naturaleza basada en parches, ebsynth
produce resultados nítidos que preservan todos los detalles finos presentes en la imagen original.
ebsynth -style -guide -output
-style
-guide
-weight
-uniformity
-patchsize
-pyramidlevels
-searchvoteiters
-patchmatchiters
-extrapass3x3
-backend [cpu|cuda]
El binario de Windows prediseñado se puede descargar desde aquí: http://jamriska.cz/ebsynth/ebsynth-win64.zip.
El primer ejemplo muestra cómo realizar una síntesis de textura guiada básica con ebsynth
. Este caso de uso se propuso por primera vez en el artículo original de Image Analogies [1], donde lo llamaron "textura por números". Comenzamos con una fotografía de un escenario natural junto con su segmentación (p. ej., la roca se pinta de verde, el cielo de azul):
ebsynth -style source_photo.png -guide source_segment.png target_segment.png -output output.png
A continuación, pintamos una segmentación objetivo a mano y le pedimos ebsynth
que produzca una nueva 'fotografía' que coincida con ella. En el lenguaje de la transferencia de estilo: queremos transferir el estilo de la fotografía de origen a la segmentación de destino de una manera que respete los segmentos individuales. La segmentación actúa como guía para la síntesis.
Este ejemplo muestra cómo lograr una representación no fotorrealista con ebsynth
. Se basa en el trabajo de Fišer et al. [7]. El objetivo es renderizar un modelo 3D como lo haría un artista. Específicamente, queremos capturar la forma en que un artista transmite los diferentes efectos de iluminación, como luces, sombras de contacto y rebotes indirectos. Para ello, montamos una escena de referencia sencilla con una bola iluminada y dejamos que el artista la dibuje a su estilo. Usamos un trazador de ruta disponible en el mercado para producir pases de renderizado separados, por ejemplo, iluminación global completa, solo el componente difuso directo, solo el rebote indirecto, etc. A continuación, renderizamos el mismo conjunto de pases para el modelo 3D de destino. y utilícelos como guías para ebsynth
.
ebsynth -style source_style.png
-guide source_fullgi.png target_fullgi.png -weight 0.66
-guide source_dirdif.png target_dirdif.png -weight 0.66
-guide source_indirb.png target_indirb.png -weight 0.66
-output output.png
En comparación con la textura por números, la principal diferencia aquí es que ahora tenemos múltiples canales de guía. Tenga en cuenta que las guías siempre vienen en pares: primero la guía de origen y después la guía de destino. Para obtener mejores resultados, es posible que deseemos aumentar la contribución de las guías en relación con el estilo. En el ejemplo anterior, el estilo tiene un peso predeterminado de 1,0, mientras que los canales guía tienen un peso de 0,66 cada uno. En resumen, el peso total de la guía es 2,0, lo que da como resultado una relación guía-estilo de 2:1.
Este ejemplo demuestra cómo se puede utilizar ebsynth
para transferir el estilo de un retrato a la fotografía de otra persona. Se basa en el trabajo de Fišer et al. [8]. El objetivo es reproducir los finos matices de la pintura original, preservando al mismo tiempo la identidad de la persona objetivo. Es decir, queremos que la persona siga siendo reconocible después de la síntesis.
A diferencia de StyLit, en esta configuración no tenemos la geometría 3D de referencia para usar como guía. Sin embargo, podemos aprovechar el hecho de que tanto la pintura de origen como la foto de destino contienen un rostro humano, que tiene una estructura bien definida. Usaremos esta estructura para inferir la información guía necesaria.
ebsynth -style source_painting.png
-guide source_Gapp.png target_Gapp.png -weight 2.0
-guide source_Gseg.png target_Gseg.png -weight 1.5
-guide source_Gpos.png target_Gpos.png -weight 1.5
-output output.png
Específicamente, detectamos los puntos de referencia faciales tanto en la imagen de destino como en la de origen, y los usamos para producir una guía de segmentación suave Gseg
y una guía posicional Gpos
, que es esencialmente un campo de deformación denso que asigna cada píxel de destino a su posición correspondiente en la fuente. . Para preservar la identidad de la persona, utilizamos la guía de apariencia Gapp
, que es una versión en escala de grises de la foto de destino que se ecualizó para que coincida con la luminosidad de la pintura de origen.
El código se libera al dominio público. Puedes hacer lo que quieras con él.
Sin embargo, debe tener en cuenta que el código implementa el algoritmo PatchMatch, patentado por Adobe (patente estadounidense 8.861.869). También podrían patentarse otras técnicas. Es su responsabilidad asegurarse de no infringir los derechos de ningún titular de patente al utilizar este código.
Si encuentra este código útil para su investigación, cite:
@misc{Jamriska2018,
author = {Jamriska, Ondrej},
title = {Ebsynth: Fast Example-based Image Synthesis and Style Transfer},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/jamriska/ebsynth}},
}