Projet final

Carl Nadeau 2017

Description du projet

Dans ce dernier travail personnel, nous effectuons de la génération de texture. Il est fortement inspiré et suit le TP2 présenté à l'hiver 2015. Nous allons effectuer les 3 premières parties du TP2 et implanter une dimension d'information de profondeur en plus.

Partie 1 : Appariement manuel de la profondeur et implantation du générateur de patch


Félix Labrie-L. avait des images réalignées de profondeur et en couleurs.
Dans le code, on retrouve un générateur de patch. Il les stocke dans la variable stack. Le générateur de patch est appelé à chaque fois que l'on désire synthétiser une texture.

J'utilise les fonctions patchStack.m dans les fichiers main.m, main_tp2.m pour produire les résultats.
Le plus grand défi était de déterminer un nombre raisonnablement grand de patchs à mettre en stock pour que les fonctions de synthèses donnent de bons résultats.
Aussi, nous devions programmer un générateur aléatoire de texture. Les résultats sont les comparatifs de base pour évaluer les autres méthodes implantées postérieurement. Voir quilt_random.m

Partie 2: Couture Simple (Simple Quilt)

J'utilise la fonction quilt_simple.m pour trouver des patchs proches du voisinage actuel.
Vous remarquerez que mon implantation est permet d'obtenir de très bons résultats en bordure, tandis que sur le reste de l'image, ils sont acceptables. On utilise la somme des différences au carré avec une mécanique de tolérance pour déterminer une patch candidate. La SDC se fait sur les parties chevauchantes de la patch et de la toile actuelle.

Partie 3: Couture à joint (Joint Quilt)

J'utilise la fonction quilt_JOINT.m pour synthétiser une toile avec des patchs découpées. Le découpage ce fait dans calculerChemin.m.
Les résultats ici sont en moyen meilleur aussi, mais toujours pas aussi intéressant que ceux présentés dans l'article de Efros et Freeman (2001).
Les bordures sont encore impeccables. À mon hypothèse, avoir ajouté de l'information de profondeur aurait rendu l'algorithme encore plus robuste. Avec quelques observations, nous pensons que certains paramètres, comme la dimension de la patch, influencent beaucoup la qualité de la toile. Il faudrait plus de tests pour confirmer. Pour calculer le chemin au coût minimal, nous avons effectué un parcours aux différences au carré. Nous avions 5 départs différents, ce qui nous permettait de confirmer la convergence vers le chemin choisi. Par la suite, nous en faisions un masque. Pour les patchs à voisinage double, nous adaptions un masque en confinant deux masques(horizontal et vertical.)

Exemple de chemin : Bricks tol:0.1

Exemple du TP2 : Bricks tol:0.1

Exemple du TP2 : Text tol:0.1

Exemple du TP2 : White tol:0.1

Mur tol:0.2 (simple + 3 quilt (dernier:profondeur))

Toit tol:0.2 (simple + 3 quilt (dernier:profondeur))

Conclusion

Il y a plusieurs façons d'améliorer l'algorithme pour le rendre aussi performant que celui présenté dans l'article. Une façon est de tester davantage sur les paramètres. Un autre, est de définir de meilleur critère pour choisir une "bonne patch" considérant son voisinage. Sinon, comme pour le cas des tuiles sur le toit, le générateur de textures semble flancher, car il y a trop de zones vides.