ebsynth
est un outil polyvalent pour la synthèse d'images par exemple. Il peut être utilisé pour diverses tâches de synthèse d'images, notamment la synthèse guidée de textures, le transfert de styles artistiques, l'inpainting sensible au contenu et la super-résolution.
L'objectif d' ebsynth
est de préserver la fidélité du matériel source. Contrairement à d’autres approches récentes, ebsynth
ne s’appuie pas sur des réseaux de neurones. Au lieu de cela, il utilise une implémentation de pointe d’algorithmes de synthèse de texture non paramétriques. Grâce à sa nature basée sur des patchs, ebsynth
produit des résultats nets, qui préservent tous les détails fins présents dans l'image originale.
ebsynth -style -guide -output
-style
-guide
-weight
-uniformity
-patchsize
-pyramidlevels
-searchvoteiters
-patchmatchiters
-extrapass3x3
-backend [cpu|cuda]
Le binaire Windows pré-construit peut être téléchargé à partir d'ici : http://jamriska.cz/ebsynth/ebsynth-win64.zip.
Le premier exemple montre comment effectuer une synthèse de texture guidée de base avec ebsynth
. Ce cas d'utilisation a été proposé pour la première fois dans l'article original Image Analogies [1], où ils l'appelaient « texture par nombres ». Nous commençons par une photographie d'une scène naturelle avec sa segmentation (par exemple, la roche est peinte en vert, le ciel en bleu) :
ebsynth -style source_photo.png -guide source_segment.png target_segment.png -output output.png
Ensuite, nous peignons une segmentation cible à la main et nous demandons ebsynth
de produire une nouvelle « photographie » qui y correspondrait. Dans le langage du transfert de style : nous voulons transférer le style de la photographie source sur la segmentation cible d'une manière qui respecte les segments individuels. La segmentation sert de guide à la synthèse.
Cet exemple montre comment réaliser un rendu non photoréaliste avec ebsynth
. Il est basé sur les travaux de Fišer et al. [7]. Le but est de restituer un modèle 3D comme le ferait un artiste. Plus précisément, nous souhaitons capturer la manière dont un artiste transmet les différents effets d'éclairage, tels que les reflets, les ombres de contact et les rebonds indirects. Pour cela, nous mettons en place une scène de référence simple avec une boule lumineuse, et laissons l'artiste la dessiner à sa manière. Nous utilisons un traceur de chemin disponible dans le commerce pour produire les passes de rendu séparées, par exemple une illumination globale complète, uniquement la composante diffuse directe, uniquement le rebond indirect, etc. Ensuite, nous rendons le même ensemble de passes pour le modèle 3D cible. et utilisez-les comme guides pour 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
Par rapport à la texture par numéros, la principale différence ici est que nous disposons désormais de plusieurs canaux de guidage. Notez que les guides viennent toujours par paires : le guide source en premier, le guide cible ensuite. Pour de meilleurs résultats, nous souhaiterions peut-être augmenter la contribution des guides par rapport au style. Dans l'exemple ci-dessus, le style a un poids par défaut de 1,0, tandis que les canaux de guidage ont un poids de 0,66 chacun. En résumé, le poids total du guide est de 2,0, ce qui donne un rapport guide/style de 2:1.
Cet exemple montre comment on peut utiliser ebsynth
pour transférer le style d'un portrait sur la photographie d'une autre personne. Il est basé sur les travaux de Fišer et al. [8]. Le but est de reproduire les fines nuances du tableau source, tout en préservant l’identité de la personne cible. Autrement dit, nous voulons que la personne soit toujours reconnaissable après la synthèse.
Contrairement à StyLit, dans ce paramètre, nous n'avons pas la géométrie 3D de référence à utiliser comme guide. Cependant, nous pouvons exploiter le fait que la peinture source et la photo cible contiennent toutes deux un visage humain, qui a une structure bien définie. Nous utiliserons cette structure pour déduire les informations de guidage nécessaires.
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
Plus précisément, nous détectons les repères faciaux dans les images cible et source, et les utilisons pour produire un guide de segmentation souple Gseg
et un guide de position Gpos
, qui est essentiellement un champ de distorsion dense qui mappe chaque pixel cible à sa position correspondante dans la source. . Pour préserver l'identité de la personne, nous utilisons le guide d'apparence Gapp
, qui est une version en niveaux de gris de la photo cible qui a été égalisée pour correspondre à la luminance de la peinture source.
Le code est rendu public. Vous pouvez faire tout ce que vous voulez avec.
Cependant, sachez que le code implémente l'algorithme PatchMatch, breveté par Adobe (brevet américain 8 861 869). D'autres techniques pourraient également être brevetées. Il est de votre responsabilité de vous assurer que vous ne violez pas les droits des titulaires de brevet en utilisant ce code.
Si vous trouvez ce code utile pour votre recherche, veuillez citer :
@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}},
}