ebsynth
é uma ferramenta versátil para síntese de imagens por exemplo. Ele pode ser usado para uma variedade de tarefas de síntese de imagem, incluindo síntese de textura guiada, transferência de estilo artístico, pintura com reconhecimento de conteúdo e super-resolução.
O foco do ebsynth
é preservar a fidelidade do material de origem. Ao contrário de outras abordagens recentes, ebsynth
não depende de redes neurais. Em vez disso, ele usa uma implementação de última geração de algoritmos de síntese de textura não paramétricos. Graças à sua natureza baseada em patches, ebsynth
produz resultados nítidos, que preservam todos os detalhes presentes na imagem original.
ebsynth -style -guide -output
-style
-guide
-weight
-uniformity
-patchsize
-pyramidlevels
-searchvoteiters
-patchmatchiters
-extrapass3x3
-backend [cpu|cuda]
O binário pré-construído do Windows pode ser baixado aqui: http://jamriska.cz/ebsynth/ebsynth-win64.zip.
O primeiro exemplo mostra como realizar uma síntese básica de textura guiada com ebsynth
. Este caso de uso foi proposto pela primeira vez no artigo original da Image Analogies [1], onde o chamaram de 'textura por números'. Começamos com uma fotografia de uma cena natural juntamente com sua segmentação (por exemplo, a rocha está pintada de verde, o céu está pintado de azul):
ebsynth -style source_photo.png -guide source_segment.png target_segment.png -output output.png
Em seguida, pintamos uma segmentação alvo à mão e pedimos ebsynth
que produza uma nova 'fotografia' que corresponda a ela. Na linguagem da transferência de estilo: queremos transferir o estilo da fotografia de origem para a segmentação de destino de uma forma que respeite os segmentos individuais. A segmentação atua como um guia para a síntese.
Este exemplo mostra como obter uma renderização não fotorrealista com ebsynth
. Baseia-se no trabalho de Fišer et al. [7]. O objetivo é renderizar um modelo 3D como um artista faria. Especificamente, queremos capturar a forma como um artista transmite os diferentes efeitos de iluminação, como realces, sombras de contato e reflexos indiretos. Para isso, montamos uma cena simples de referência com uma bola iluminada, e deixamos a artista desenhá-la no seu estilo. Usamos um rastreador de caminho pronto para uso para produzir passagens de renderização separadas, por exemplo, iluminação global completa, apenas o componente difuso direto, apenas o salto indireto, etc. Em seguida, renderizamos o mesmo conjunto de passagens para o modelo 3D alvo e use-os como guias 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
Em comparação com a textura por números, a principal diferença aqui é que agora temos vários canais de orientação. Observe que os guias sempre vêm em pares: primeiro o guia de origem, depois o guia de destino. Para melhores resultados, podemos querer aumentar a contribuição dos guias em relação ao estilo. No exemplo acima, o estilo tem peso padrão de 1,0, enquanto os canais guia têm peso de 0,66 cada. Em suma, o peso total da guia é 2,0, resultando em uma proporção de guia para estilo de 2:1.
Este exemplo demonstra como se pode usar ebsynth
para transferir o estilo de um retrato para a fotografia de outra pessoa. Baseia-se no trabalho de Fišer et al. [8]. O objetivo é reproduzir as nuances da pintura original, preservando ao mesmo tempo a identidade da pessoa alvo. Ou seja, queremos que a pessoa ainda seja reconhecível após a síntese.
Ao contrário do StyLit, nesta configuração não temos a geometria 3D de referência para usar como guia. No entanto, podemos explorar o fato de que tanto a pintura de origem quanto a foto de destino contêm um rosto humano, que possui uma estrutura bem definida. Usaremos essa estrutura para inferir as informações norteadoras necessárias.
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
Especificamente, detectamos os pontos de referência faciais nas imagens alvo e de origem e os usamos para produzir um guia de segmentação suave Gseg
e um guia posicional Gpos
, que é essencialmente um campo de distorção denso que mapeia cada pixel alvo para sua posição correspondente na fonte. . Para preservar a identidade da pessoa, usamos o guia de aparência Gapp
, que é uma versão em escala de cinza da foto alvo que foi equalizada para corresponder à luminância da pintura original.
O código é lançado em domínio público. Você pode fazer o que quiser com ele.
No entanto, você deve estar ciente de que o código implementa o algoritmo PatchMatch, que é patenteado pela Adobe (Patente dos EUA 8.861.869). Outras técnicas também podem ser patenteadas. É sua responsabilidade certificar-se de que não está infringindo os direitos de nenhum detentor de patente ao usar este código.
Se você achar este código útil para sua pesquisa, 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}},
}