Du Pixel Art A Une Image Vectorisee

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet Du Pixel Art A Une Image Vectorisee
Cadre Projets de spécialité
Page principale Du Pixel Art A Une Image Vectorisee

Encadrants Leo Allemand-Giorgis


Cette page présente les résultats du projet de spécialité intitulé "Du Pixel Art à une image vectorisée" de 2014 effectué par ABBOUD Clément, BELLOUKI Iman et URRIOLA PARADA Ulrich.

Contexte de travail

Nous nous intéressons dans le cadre de ce projet à deux formes d’art correspondant à deux formats d’images différents.

Pixel Art

C’est une image créée à l’échelle d’un pixel. Il s’agit généralement d’une petite image, présentant des contours en escalier caractéristiques correspondant aux pixels que nous pouvons clairement percevoir.

Image Vectorisée

Il s’agit d’une image que l’on peut redimensionner à volonté sans perdre de qualité. L’image n’est pas composée de pixels mais d’objets géométriques recalculés à chaque redimensionnement de l’image.


Objectifs

Le but de notre travail est de créer un logiciel permettant de transformer des images de Pixel Art en image vectorisée. Notre travail s’appuie donc sur un article de recherche qui présente les étapes de cette transformation [1]. Notre projet se base donc sur cette étude mais tout élément d’évolution ou de modification de la méthode employée est libre si justifiée. L’objectif de ce changement de format est d'une part la rénovation d’anciens jeux vidéos, dont les images étaient exclusivement en Pixel Art à cause des performances des machines de l’époque et d'autre part l'agrandissement d'images de petite taille. Différents algorithmes, intégrés aux émulateurs de consoles existent mais ne rendent pas un format vectoriel en sortie [3]. Notre travail nous permet donc de faire renaître une ancienne forme d’art , et ainsi, de créer une nouvelle expérience de jeu.

Etapes du projet

Image initiale de Yoshi en Pixel Art

Pour la lecture de fichiers, nous avons opté pour l’utilisation du type QImage de Qt. Cela nous permet d’appliquer notre algorithme à de nombreux formats d’image (bmp, gif, jpg, jpeg, png, pbm, pgm, ppm, tiff, xbm et xpm). Le format de sortie que nous avons choisi est le svg (Scalable Vector Graphics).

Notre projet se constitue de 4 étapes principales :

- construction du graphe de similarité.

- construction du graphe de Voronoï.

- construction de courbes de Bézier.

- optimisation des contours.


Graphe de similarité

Graphe de Similarité

Le graphe de similarité correspond à un graphe de liaisons entre un pixel de l’image et ses voisins. Pour chaque pixel, nous créons une liaison avec un de ses voisins si celui-ci possède une couleur identique à celle de notre pixel. Le but est ensuite de modifier ce graphe afin de le rendre planaire (sans croix).



Graphe de Voronoï

Graphe de Voronoï

Un graphe de Voronoï est une décomposition d’un certain espace basé sur les distances à un certain nombres de points ou autres objets. Des zones sont définies autour de ces objets: pour un objet donné, tout point de sa zone est plus proche de lui que de tout autre objet dans l’espace considéré. Dans notre cas, nos objets sont des ensembles de centres de pixels et de liaisons associées potentielles. Il s’agit donc de créer des zones autour de ces objets, c’est-à-dire remplacer des pixels carrés par des polygones, ou formes de Voronoï.



Image en courbe de Bézier

Courbes de Bézier

Après avoir affiché notre image résultant de l’algorithme de Voronoï, notre image ne possède que des contours polygonaux. Afin de lisser ces contours, nous allons créer de nouveaux contours sous forme de courbes de Bézier.



Résultat après optimisation des contours

Optimisation des contours

Même si les contours que nous obtenons après la création et l’affichage des courbes de Bézier sont lisses, il reste des zones où le contour n’est pas parfaitement fluide, où il y a présence d’une “vaguelette”. L’optimisation permet donc de transformer ces dernières en une nouvelle courbe, plus “fluide” et avec un meilleur rendu que la précédente. Elle repose sur le lissage de Taubin [2].







Résultats

Image en Pixel Art
Résultat de notre algorithme

Les résultats de notre algorithme sont des images vectorisées en format svg. Les contours sont arrondis et des effets de flous (dégradés) sont visibles. Notre application donne des rendus corrects pour des images dont les zones sont clairement définies. Certains Pixel Art utilisés dans les jeux vidéo sont composés de multiples nuances de couleur pour rendre des effets de lumière ou un faux semblant de relief et de réalisme. Les résultats pour ce type d’image ne sont pas satisfaisants dans la mesure où les formes des pixels ne peuvent pas être transformées. En effet les couleurs des pixels voisins sont souvent (voire toujours) différentes.




Critique

Différents éléments d'évolution de notre algorithme restent encore à développer.

Tout d'abord la gestion des éléments en T. Il s'agit en fait de points où trois courbes de Bézier se terminent. En ces points, il faut sélectionner quelles courbes sont à "lier" de façon à obtenir un rendu plus lisse. Cette amélioration nous est apparue tardivement dans le projet car son intérêt est plus visible lors de l'utilisation de dégradés dans les images.

Dans un second temps, il serait intéressant de pouvoir utiliser différentes optimisations des contours. La méthode utilisée dans notre projet rend des résultats intéressants mais dépend de paramètres qui doivent être modifiés pour obtenir un meilleur rendu pour chaque image. D'autres méthodes, notamment celle présentée dans l'article de référence, pourraient être implémentées afin d'obtenir des résultats différents.

Finalement il serait intéressant de développer une autre méthode pour créer les dégradés dans les images. Les filtres de flou Gaussien utilisés dans notre travail donnent un rendu cohérent mais sont en réalité limités sur les courbes en question. L'utilisation d'une méthode alternative, par "gradient mesh" ou bien l'outil présenté dans l'article de O RZAN, BOUSSEAU, WINNEM̈OLLER, BARLA, THOLLOT, et SALESIN intitulé "Diffusion curves: a vector representation for smooth-shaded images." [4] serait une amélioration significative des dégradés.

Quelques résultats

Dans cette section nous présentons quelques résultats obtenus à l'aide de notre algorithme.

De gauche à droite : Rabite, Toad, Koopa.

Les originaux :

Image en Pixel Art (Rabite) Image en Pixel Art (Toad) Image en Pixel Art (Koopa)

Les résultats vectorisés (png sur le wiki pour pouvoir visualiser) :

Résultat de notre algorithme (Rabite) Résultat de notre algorithme (Toad) Résultat de notre algorithme (Koopa)

Conclusion

Notre travail a permis de développer une application permettant de transformer des images de Pixel Art en images vectorisées. Les zones voisines de couleurs similaires sont liées par un flou qui rend une sorte de dégradé. Les résultats se limitent cependant à des images dont les zones sont clairement définies pour obtenir des résultats satisfaisants. Les effets de lumière par exemple, qui peuvent être créés dans un Pixel Art rendent un résultat médiocre. Les éléments suivants pourraient être les objectifs de travaux futurs de complétion du travail effectué. Tout d’abord la gestion des croisements multiples de courbes de Bézier lors de la présence d’un dégradé entre zones. Ensuite la possibilité d’optimiser les courbes selon différents algorithmes. Finalement l’application de notre algorithme à un jeu en Pixel Art, ce qui est l’utilité de cette transformation d’image.

Annexes

Fichier:Pixel art vectorisee rapport.pdf

Fichier:Pixel art vectorisee transparents.pdf

Références

Article de référence:

[1] Johannes Kopf and Dani Lischinski. 2011. Depixelizing pixel art. ACM Trans. Graph. 30, 4, Article 99 (July 2011), 8 pages. DOI=10.1145/2010324.1964994 http://doi.acm.org/10.1145/2010324.1964994

Lissage de Taubin :

[2] G. Taubin. 1995. Curve and surface smoothing without shrinkage. In Proceedings of the Fifth International Conference on Computer Vision (ICCV '95). IEEE Computer Society, Washington, DC, USA, 852-.

Page Wikipédia sur les algorithmes existants :

[3] http://en.wikipedia.org/wiki/Image_scaling

Gestion des dégradés dans des images vectorielles

[4] ORZAN, A., BOUSSEAU, A., WINNEM̈OLLER, H., BARLA, P., THOLLOT, J., AND SALESIN, D. 2008. Diffusion curves: a vector representation for smooth-shaded images. ACM Trans. Graph.27, 3, 92:1–92:8.