Accueil > Flash-AS3, Imagerie, géométrie > vectorisation v0

vectorisation v0

cover
twitter c’est cool…

sakri nous a pondu un savoureux petit algorithme de marching squares qui est le petit frère des marching cubes et qui sert à détourer (vectoriser) des formes dans une image rasterizée.

dans les commentaires, Alan Shaw fait allusion à Potrace et son portage en AS3 : PotrAS qui fait partie de l’incroyable mais vrai Spark project.

Après je laisse un commentaire en disant que ce serait trop fastoche de refaire pareil mais en envoyant cher du pâté en batchant la vectorisation des patchs de couleur. Sachant que le plus dur c’est quand même l’algo de détourage.

donc ce que j’ai fait c’est juste une passe de component labelling et une boucle de vectorisation des composants couleur.

dans mon commentaire chez sakri, j’ai metionné un algo de généralisation de lignes créé par Andreas Weber et qui se trouve ici

car si les formes détectées par les marching squares sont exactes, elles sont vraiment lourdes à redessiner (puisque chaque pixel est représenté) et surtout elles sont vilaines (crénelées). j’ai rajouté à la suite de lavectorisation la possibilité de simplifier le trajet. le résultat est beaucoup plus léger ( environ 10% de la forme originale! ) mais il croute sévère…
que faire ?

Comme j’avais déjà fait une méthode de lissage pour assouplir un ensemble de points donc je l’ai rajouté au moment du rendu et ça déchire!

voila le déroulement de l’action:
explaination

et une démo de la marche du train:

The Flash plugin is required to view this object.


cochez la case smooth render pour voir le résultat lissé

voilà 2, 3 sorties:
explaination
une vectorisation sans perte

explaination
avec des formes simplifiées

explaination
et le rendu assoupli
2, 3 autres ici

et les classes + fla (CS4 à cause des Vector.<T>…)

C’est plutôt convaincant j’ai essayé de faire simple: on a un objet VectorShape qui est un dataHolder et une classe Vectorize.
on peut faire beaucoup mieux en particulier dans la méthode Vectorize.process() :

  • il y a d’énormes problèmes de traitement de la couleur des plages qui disparaissent -> à fixer
  • j’ai fait une seule méthode pour traiter tous les composants -> ce serait bien de faire une séquence récursive et non bloquante
  • je simplifie les formes pendant l’extraction -> ça pourrait être fait plus tard, peut être dans la classe VectorShape
  • insérer la méthode de lissage dans la classe Vectorize
  • résoudre le problème de Z-sorting/superposition ou bien agrandir les régions pour ne pas laisser de blanc
  • et bien sûr optimiser, toujours…

limites:

  • rendu pourrave sur les images détaillées( photos )
  • rendu pourrave sur les images couleur (trop segmentées)
  • grosse charge CPU mais ça pourrait changer

perspectives:

  • 2D des joulis dessins à partir d’images aplaties
  • de grands rendus à partir de petites images
  • 2D physics : come on obtient des formes vectorisées, optimisées qui plus est on pourrait les inclure dans un moteur physoque genre Box2D !
  • 3D : sakri s’acharne à extruder des formes, il est suffisament près du but pour considérer que c’est fait.
  • pour le reste, n’importe quel DA t’en parlera mieux que moi ^^

et j’allais oublier: ça existait déja vectormagic (je peux pas blairer les softs qui ont le mot ‘magic’ dedans …)
ou bien raven l’éditeur de dessins vectoriels de la suite aviary

je parlais de Twitter, en fait les différentses étapes ont été diffusées via twitpic, et twitter et au final c’est Philippe Elsass qui twittait : ‘La vectorisation lissée est très pro - me rappelle feu-Streamline’
… streamline en flash quoi !
amusez vous bien :)

nicoptere Flash-AS3, Imagerie, géométrie , , , , ,

  1. imad
    04/06/2009 à 20:22 | #1

    bonsoir ,il ya aussi cette librairie :http://www.kirupa.com/forum/showthread.php?t=319798

  2. 05/06/2009 à 10:00 | #2

    salut,
    je viens de tester le package ( il est cité par Alan Shaw dans les commentaires de Sakri)
    he ben c’est super lent !
    pour la même image:
    le package :
    41566 ms ( = quasiment une minute ! )
    ma version:
    it took 1541 ms to process 888 shapes (20586 points / 0 when simplified )

    juste 26 fois plus rapide et je maintiens qu’on peut faire mieux ^^
    qui plus est, sa version ne prend pas les transparences…. nul

    en plus il y a 1000 lignes de code bien compact avec des tableaux dans tous les sens contre respectivement 400l. (dont la moitié d’utilitaires et un tiers de commentaires) pour ma classe et 200 l. compactes pour le détourage de sakri (avec commentaires et bien mis en page).
    je vote pour moi ^^

  3. Seraph
    28/05/2010 à 15:21 | #3

    Bonjour!
    Merci pour ce code géniale, ça m’as permis d’apprendre beaucoup de choses en as3 (notamment, l’utilisation de l’interface qui génère l’image).

    J’aimerais savoir si cela est possible de faire pareil mais en live, par exemple avec une webcam allumé? Au lieu d’appliquer l’effet à l’image, l’appliquer en temps réel à la vidéo?

    Merci d’avance!

  4. 28/05/2010 à 22:36 | #4

    salut,
    merci pour le petit mot, ça fait plaisir :)
    c’est un traitement très gourmand en CPU, à mon avis c’est difficile de l’appliquer sur un flux live.
    par contre on peut obtenir un rendu quasiment identique en floutant l’image, puis en faisant un paletteMap. c’est moins brutal pour le CPU
    en revanche, on ne récupère aucune info sur les vecteurs ; ça reste graphique :)

  1. Pas encore de trackbacks