Présentation du sujet

Ce projet a été proposé et est encadré par M. David Vanderhaeghe, maître de conférence à l’Université Toulouse III - Paul Sabatier et rattaché à l’IRIT, au sein de l’équipe STORM.

Le but de ce projet est d'implémenter partiellement un article scientifique, AniPaint: interactive painterly animation from video. Cet article présente un algorithme de stylisation d’image pour rendre une séquence d’images avec une simulation des coups de pinceaux.

L’effet de peinture est obtenu grâce à la génération d’une série de coups de pinceau sur toute l’image à traiter. Ces derniers sont rendus à partir d’un simulateur de medium, sur un canvas qui sera représenté comme un plan 3D. Ces coups de pinceau correspondent à des lignes passant par plusieurs "points de contrôle". Chaque coup de pinceau possède donc des points de contrôle et la courbe associée à ces points. Ainsi, à partir d’une image issue d’une scène 3D, l’algorithme va définir des points de départ pour les coups de pinceau et commencer à calculer les points de contrôle suivants. Le tracé d’un coup de pinceau s’arrête dès que le nouveau point de contrôle calculé ne vérifie plus certains critères appelés “contraintes”.

Lien vers l'article AniPaint : AniPaint: Interactive Painterly Animation from Video

Travail réalisé

Environnement

Nous nous sommes intégré au projet Painty de notre encadrant, developpé à l'aide du moteur Radium Engine.

Nous avons utilisé Discord et les mails pour communiquer. Nous avons aussi utilisé un scrum board sur GitHub pour suivre les avancées de chacun.

Pour le developpement nous avons surtout utilisé QtCreator et Eclipse.

Le gestionnaire de source a été Git avec un dépôt privé sur SourceSup mis à disposition par le client.

Chaîne Fonctionelle

  • Mise en place des structures de données nécessaires
  • Mise en place d'une boîte à outil visant a completer Radium Engine avec des fonctionnalitées tel que :
    • Flou gaussien
    • Détection de contours avec Canny
    • Champs d'orientation (constant et Edge Tangent Field)
    Exemple de rendu d'image de contours Exemple de rendu d'image de champ d'orientation constant Exemple de rendu d'image de champ d'orientation Edge Tangent Field
  • Génération de points de départ aléatoirement (de manière stratifiée ou bien à l'aide d'un bruit bleu)
  • Exemple de points de départ aléatoire stratifié Exemple de points de départ avec bruit bleu
  • Mise en place des contraintes pour sélectioner ou arrêter un coup de pinceau.
  • Mise en place des différentes fonctions d'énergies pour construire le meilleur coup de pinceau.
  • Génération du tracé (liste de points de contrôle) d'un coup de pinceau.
  • Exemple d'utilisation d'énergie (tous les poids à 1) Exemple d'utilisation d'énergie (poids différents pour chaque énergie

Sauvegarde et chargement

  • Utilisation de QtXML
  • Sérialisation des données au format XML.
  • Restauration des données à partir d'un fichier XML sauvegardé.

Rendu - Aplats de couleur

  • Utilisation d'une classe proposée par notre encandrant : GlStrokes
  • Adaptation pour gérer une taille différente en chaque point de contrôle.
  • Mise en liens avec notre module de génération de coup de pinceau.

Résultats

Résultat sur GoodDog Résultat sur Mont Fuji