Projet final: Reproduction automatique de peinture impressioniste
Par Pier-Luc Auger

Mise en contexte

Pour ce travail, j'ai décidé d'implémenter l'article de Peter Litwinowicz, Processing Images and videos for An Impressionist Effect. L'idée générale de cet article propose de reconstituer, à partir de photos, des images apparentes à des peintures impressionistes. Le défi m'apparaissait stimulant, dans le sens où il fallait tenter de répliquer le talent d'artistes doués avec un ordinateur et des algorithmes. Voyons de quelle manière le problème a été découpé.

Ébauche

Après une première ébauche d'algorithme, j'obtenu un premier résultat d'intérêt limité. N'empêche, il permi de voir sur quels aspects principaux il fallut travailler: la longuer des coups de pinceau et leur orientation.
La première piste d'amélioration résidait en la détection des contours pour améliorer la précision des coups de pinceau. Voyons comment cela a été effectué.

Détection de contours

Plusieurs méthodes ont été tentées, avec des résultats variables. Dans tous les cas, un filtre passe bas est utilisé sur l'image source. Après essais, les meilleurs résultats sont obtenus avec un filtrage gaussien de 7x2 et un gamma de 2.
Ensuite, la fonction edge de Matlab a permi de détecter les contours dans une image en intensité. J'ai aussi tenté d'appliquer l'algorithme qui calcule la fonction d'énergie de l'image, comme dans le TP2. Les résultats sont différents, mais l'algorithme appliqué subséquemment semblait donner de meilleurs résultats avec Canny, tel que suggéré aussi dans l'article.
Tel que le montre le résultat, Canny retourne un masque logique avec les arrêtes de l'image. Ce masque est utilisé dans le calcul des coups de pinceau.

Calculs des coups de pinceau

L'article suggérait un algorithme pour calculer les coups de pinceau. L'essence de cet algorithme avait une certaine ressemblance avec celui implanté pour le TP2. En somme, il s'agit de calculer le coup de pinceau le plus long possible, qui ne dépasse ni la longueur maximale fournie en entrée ne franchissant pas non plus de contour dans l'image. Avec l'implantation de ces fonctionnalités, déjà, les résultats se montrairent intéressants. À cet étape, l'angle des coups de pinceau est placée à 45 degrés par défaut. Cet angle est utilisé pour trouvé le prochain pixel qui ferait parti du coup de pinceau, lequel doit être évalué selon l'énoncé explicité précédemment.
Tel qu'énoncé plus haut, j'ai trouvé les images dont le masque utilisé était de type Canny plus intéressante. L'effet est différent, mais on remarque une meilleure souplesse dans les changements de textures ce qui à mon oeil rend l'effet peinture légèrement plus réaliste. N'empêche, les images produites sont à ce stade toujours très synthétiques.

Ajustement de l'angle des coups de pinceau

À l'itération précédente, j'ai trouvé plus synthétique le fait de voir des coups de pinceau tous dans le même axe. L'amélioration tentée ensuite fut de gérer l'angle dans lequel le coup de pinceau serait donné. Pour respecter un allure impressioniste, il fallut éviter de tracer des lignes parallèle aux contours. C'est en effet quelque chose qui distingue ce style de d'autres. J'ai donc calculé la fonction d'énergie de l'image, pour repérer les contours et déduire le meilleur angle.
Le masque que montre l'image de droite dépeint une carte d'intensité pondéré du nombre de visites faites sur chaque pixels, blanc étant le pixels le plus visité, noir l'inverse. J'ai remarqué par cet image que mon algorithme initial ne tenait plus la route, car les coups de pinceau partaient alors dans tous les sens. Il était alors invalide de boucler en sautant certains pixels sous prétexte que la largeur et la longueur du coup de pinceau couvriraient tout l'espace de la photo. En corrigeant cet aspect, ces résultats furent obtenus.

Angles variables et contours adoucis

L'image obtenue à l'itération précédente devenait intéressante au point de vue visuel. Or, elle demeurait, au goût de certains qui analysèrent mes images, synthétiques par endroit. La critique provenait du fait que tous les traits étaient similaires...en fait parfaitement similaires. J'ai alors tenté d'introduire dans l'algorithme un traitement qui adoucierait certaines régions des coups de pinceaux.
Les deux résultats ci-haut se sont avérés intéressants. Ils montrent un peu plus de fluidité. Par contre, pour l'image de la plage, on remarque que de la précision a été perdue, ce qui rend indistinctibles certains éléments.

Peinture aléatoire

Pour arriver à une meilleure superposition des coups de pinceau, l'article suggérait d'appliquer de manière aléatoire les coups de pinceaux. Plutôt que d'y aller par lignes et par colonnes, on laisse le hasard faire le travail. En superposant les coup de pinceau, cela ajoute du réalisme.

Résultats finaux

Brosse plus large et plus longue

La plupart des résultats s'avèrent intéressants. Sauf un peut-être, que je trouve très peu réaliste. Celui des vélos. En effet, il y a probablement trop d'arrêtes dans cette images pour que les coups de pinceau puissent être d'une allure réelle. De fait, voici de quoi à l'air la détection de Canny:
J'ai tenté de modifié le filtrage, pour potentiellement réduire la quantité d'arrêtes dans l'image.
Le résultat n'est pas beaucoup plus intéressant. J'ai alors tenté de refaire la peinture avec des traits tous dans le même sens.

Conclusion

Il final, il faut admettre qu'il est difficile de donner du talent artistique à un algorithme. Les paysages se reconstituent assez bien, mais les images avec un petite profondeur de champ ressorte avec un effet de flou plus ou moins bon. Aussi, les images chargées en arrêtes qui s'avèrent importantes pour comprendre l'image sont difficiles à reproduire. L'exemple des vélos est très évocateur.