Ce repository s'appuie sur l'article Texture Optimization for Example-based Synthesis écrit par Vivek Kwatra, Irfan Essa, Aaron Bobick et Nipun Kwatra. Cet article publié en 2005 propose une méthode de génération de texture basée sur la minimisation d'une énergie globale grâce à un algorithme similaire à l'algorithme EM.
La méthode proposée par l'article repose sur une approche globale basée sur une mesure de similarité entre les voisinages de l'Input et les voisinages de la texture en cours de synthèse. On note
Cette optimisation se fait successivement par rapport aux
L'optimisation consiste à itérer successivement 2 étapes de minimisation de l'énergie par rapport aux
E_step :
Cette étape correspond à la minimisation de l'énergie par rapport aux voisinages
On commence par créer un masque avec la fonction create_overlap_mask, qui indique le nombre de voisinages qui se recouvrent à chaque pixel de l'image. Puis chaque E_step consiste à remplir l'image
M_step :
L'objectif de cette étape est de minimiser l'énergie par rapport aux
On procède donc à la construction de cet arbre au début de l'algorithme grâce à la fonction KDTree du module sklearn.neighbors. Puis à chaque M_step, on utilise cet arbre et la fonction query pour trouver les