Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ANTIALIASING DES CONTOURS D'UNE IMAGE


Information sur la source



Description

Cliquez pour voir la capture en taille normale
Nouvelle source pour moustachu et ennixo pour montrer comment faire un antialiasing sur les contours d'une forme d'un dessin. Cette source est une combinaison de mes sources de tracé de contour et de zoom avec antialiasing.

Le principe est simple : récupèrer les contours des formes de l'image, puis appliquer un filtre median sur les pixels des contours. Et voilà le résultat ;)

Ici, il s'agit d'une image en noir et blanc pour qu'on puisse mieux distinguer l'effet, cependant, ca marche aussi avec les images en couleurs, mais c'est moins visible car il y a plus de nuances possibles.

Cette source utilise bien évidement ma classe de gestion d'image pour un traitement rapide, donc vous obtiendrez une plus grande rapidité en compilant le projet !
 

Conclusion

Je ne pense pas mettre cette source à jour puisqu'il ne s'agit que d'une méthode
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de moustachu le 24/12/2004 11:39:30

Arrête, c'est trop, c'est trop !
Merci
Joyeux Noel
Moustachu

signaler à un administrateur
Commentaire de DARKSIDIOUS le 24/12/2004 11:53:07 administrateur CS

Bon finalement j'aurais fais la source que tu voulais faire alors ;)

Joyeux noël à toi aussi !

DarK Sidious

signaler à un administrateur
Commentaire de moustachu le 24/12/2004 11:56:15

Pas excatement mais ça va grandement m'aider !!
++
Moustachu

signaler à un administrateur
Commentaire de moustachu le 24/12/2004 11:57:18

Quand je dis pas exactement, ce que tu as fais c'est exactement ce dont j'avais besoin, mais  je compte l'utiliser comme base.

++
Moustachu

signaler à un administrateur
Commentaire de DARKSIDIOUS le 24/12/2004 12:04:12 administrateur CS

Ce genre de source peut servir pour pas mal de domaine de la retouche graphique. Par contre, il faut faire attention à la rapidité (j'aurais pu optimiser un peu plus, mais bon, c'était juste pour le principe).

DarK Sidious

signaler à un administrateur
Commentaire de moustachu le 24/12/2004 12:06:40

Dark Sidious,
Après un DrawText, ça fait un peu "strange" l'antialias.

Merci pour tout, je vais effectivement m'en servir !

signaler à un administrateur
Commentaire de DARKSIDIOUS le 24/12/2004 12:36:03 administrateur CS

Je viens de tester, et je trouve ca normal : ca fait du flou sur les contours des caractères, c'est normal...

DarK Sidious

signaler à un administrateur
Commentaire de moustachu le 24/12/2004 14:39:18

Ah ok alors. Je vais continuer à étudier tout ça.

Merci
Moustachu

signaler à un administrateur
Commentaire de ennixo le 24/12/2004 16:00:29

le problème d'après moi c'est que tu ne t'intéresse pas du tout à la forme (chose très compliquée) et ton algo bien qu'il tente bien d'anticréneler.

ton filtre doit calculer pour chaque point du contour la tangeante de la forme et calculer si le "fondu" (plutot que "flou") doit etre réalisé à l'horizontale ou à la verticale.

et ce fondu doit juste faire une transition sur un nombre de pixels donné (un paramètre) ce qui fait un anticrénelage, un vrai.

la grosse diffuculté réside dans le fait de définir ce qu'est réellement la forme pour calculer la tangeante.

pour cette image par exemple c'est facile mais pour une image + complexe avec plein de couleurs c'est beaucoup plus difficile...

enfin tout ça ce n'est que de la théorie mais ça devrait fonctionner =)

signaler à un administrateur
Commentaire de DARKSIDIOUS le 24/12/2004 16:52:50 administrateur CS

Vu comme cà, c'est sûr que c'est bien plus compliqué de faire un antialiasing !

Pour détecter la forme, cela demanderai un temps de calcul encore plus grand puisqu'il ne suffit pas de se baser sur le seul pixel du contour mais aussi des 3 pixels alentours du contour (et encore, je pense que ca ne serait pas suffisant).

Je n'aurais pas le temps de pousser plus loin mes recherches je le crains, mais je laisse la place si il y en a de motivés ;)

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 25/12/2004 09:21:15

en fait le calcul de la tangeante peut se baser sur les pixels alentours puisqu'il ne s'agit pas de calculer la tangeante exacte mais juste à déterminer si l'anticrénelage doit etre réalisé en horizontal ou en vertical.

il peut d'ailleurs être remplacé par un calcul de tangeante simplifé ne retournant que 2 valeurs afin d'éviter la fonction tan et d'optimiser le code =)

bref... bonne chance aux éventuels codeurs qui vont essayer ça =)

signaler à un administrateur
Commentaire de ennixo le 25/12/2004 19:07:36

en y réfléchissant un peu non la tangeante ne sert pas à déterminer si l'on doit effectuer le fondu à l'horizontale ou à la verticale...

elle permet de définir l'angle de fondu ainsi que la zone à fondre (à 45° on ne fait que 1px de chaque coté alors qu'à 5° il faut faire un fondu plus important pour mieux simuler l'inclinaison)

ça rend les calculs nettement plus compliqué =)
mais je voulais juste corriger ce que j'avais dit car c'était faux

signaler à un administrateur
Commentaire de ChrisPM le 27/12/2004 09:08:13

Donc en gros ça veut dire que photoshop (pour ne citer que lui :D) fait un boulot de fou à une vitesse dingue...

sinon, je trouve que le filtre médian n'est pas adapté du tout, car seulemen quelques rares endroits de la forme ont " l'air " antialiasés... Maintenant, cela dit, c'est pas mal quand même car je serais pas capable de le faire :D

signaler à un administrateur
Commentaire de DARKSIDIOUS le 27/12/2004 09:16:02 administrateur CS

Oui, Photoshop fait des calculs complexes à une vitesse de folie. De même pour les filtres dans les jeux !

Sinon, le filtre médian n'est pas appliqué à tout les pixels des contours, mais uniquement aux contours qui en ont besoin (dont la différence entre les 2 pixels aux alentours de la matrice est supérieure à 128), car sinon, il serait appliqué à tout les pixels pour un image de dégradé par exemple alors qu'il n'y en aurait pas besoin !
Mais l'antialiasing doit sûrement utiliser une matrice médiane comme ici pour calculer la couleur du pixel pour l'antialiasing je pense, mais peut-être avec une matrice un peu plus grande... En combinant la méthode que j'utilise avec celle d'ennixo pour savoir vers quelle direction il faut orienter le flou, je pense qu'on doit avoir un résultat proche de celui utilisé par Photoshop !

DarK Sidious

signaler à un administrateur
Commentaire de DARKSIDIOUS le 27/12/2004 09:26:09 administrateur CS

Pour ce à qui ca interesse, voici un procédé qui m'a l'air pas mal sur sourceforge, par contre, c'est du C :

http://scale2x.sourceforge.net/algorithm.html

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 27/12/2004 12:29:38

excusez moi mais Photoshop ne fait pas l'anticrénelage...

et pour ce qui est des filtres des jeux les calculs ne se font pas sur une image tracée mais sur des "objets" qu'il est alors beaucoup plus simple d'afficher avec un anticrénelage...

non là pour faire un anticrénelage efficace sur une image existante ben... j'ai jamais vu un programme faire ça =)

signaler à un administrateur
Commentaire de DARKSIDIOUS le 27/12/2004 12:55:55 administrateur CS

As tu m'interesse ennixo alors ;)

Peut-être que je me pencherais sur ce problème car les défis m'interesse ;) Mais je le ferais lorsque j'aurais du temps libre !

Je pensais que Photoshop, ou encore Paint Shop Pro le faisait !

En tout cas, MicroAngelo le fait pour les icônes !

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 27/12/2004 16:27:21

non microangelo non plus... il ne travaille pas sur une image finie mais sur un tracé qu'on vient de faire, c'est moins compliqué...

très honêtement si tu te lance dans la programmation d'un tel algorithme je te souhaite bonne chance et bien du courage =)

signaler à un administrateur
Commentaire de DARKSIDIOUS le 27/12/2004 16:35:44 administrateur CS

Ben j'ai essayé d'y réfléchir, et en effet, ca à l'air bien compliqué !!!

Je me demande même si c'est réalisable sur une forme quelconque pour récupèrer la pente d'un segment de 3 pixels (2 pixels n'étant pas assez précis).

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 27/12/2004 17:09:29

faudra que j'y réfléchisse plus et que j'essaie de mon coté puis on pourra mettre nos travaux en commun et les comparer.

en fait ça doit être possible mais pas de tout repos =)


et juste un autre truc si je peux me permettre tu fais :
For iFor1 = 0 To pctDest.ScaleWidth
    For iFor2 = 0 To pctDest.ScaleHeight

mais il serait plus judicieux de faire
For iFor2 = 0 To pctDest.ScaleHeight
    For iFor1 = 0 To pctDest.ScaleWidth

ça augmenterais légèrement les performances car ça irait dans l'ordre des bits de l'image et ça utiliserait donc pleinement le cache du processeur...

je sais pas si tu as déjà fait le test mais c veridique =)

signaler à un administrateur
Commentaire de ChrisPM le 27/12/2004 18:00:41

Salut !

Quand je parlais de photoshop qui fait de l'anticrénelage, c'étais uniquement dans le cas ou on trace quelque-chose, bien sur !

*nouvelle sélection non-carrée (avec lissage activé)
* importation d'un tracé illustrator (même très complexe : mais là on "voit" que c'est dûr à réaliser étant donné le temps qu'il mets...)
* dessin avec les formes de base... ou bien ajout de texte, qui là par contre est vraiment très rapide et impressionnant !

Par contre, si on a un objet quelquonque affiché qui n'est pas lissé, on a très peu de chances, mis à part en travaillant à la main, de réaliser un anticrénelage...

En tout cas, darksidious, si tu devait réussir à programmer un truc qui fait même un anticrénelage approximatif d'une image existante, je te dirais franchement chapeau, et cet outil sera bien souvent utile ! Mon rêve étant un programme qui prends une image sur un fond transparent, et qui réalise un antialiasing avec la transparence pour pouvoir le réutiliser dans paint shop pro ou photoshop ;)

Ca dois être possible, mais très coûteux en temps processeur...

signaler à un administrateur
Commentaire de DARKSIDIOUS le 27/12/2004 18:12:17 administrateur CS

ben actuellement, on peux dire qu'il s'agit d'un semi-anti-crénelage étant donné que cette source fait un flou sur les contours des zones ou les couleurs varient le plus => les contours de formes. J'ai essayé de voir ce que ca donne avec des images de 3D avec un fond uni, et l'effet donne pas trop mal, par contre, pour du texte, ou des formes assez petites, cela donne un vulgaire flou.

Je ne vois vraiment pas comment récupèrer la pente des contours d'une image quelconque, si ennixo a une idée, je suis preneur !

Je pense que si on s'y met tous, on pourrait arriver à un résultat assez pratique pour tous, et niveau rapidité, faut voir...

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 27/12/2004 18:20:22

ok pour photoshop mais pour ce qui concerne les tracés illustrator (qu'on peut aussi faire dans photoshop d'ailleurs) je me demande comment ils s'y prennent car a priori ça ne devrait pas être si compliqué que ça... et si on observe bien on peu trouver qulques lacunes à photoshop (heureusement c'est dans des fonctions généralement peu utilisées (flou radial, transformation > torsion)) donc peut-être qu'on peut faire mieux =)


sinon ça sent le défi tout ça moi j'aime bien ça =)

signaler à un administrateur
Commentaire de DARKSIDIOUS le 27/12/2004 18:22:23 administrateur CS

Ben pour illustrator, c'est pas du vectoriel cà ?

Si c'est du vectoriel, pas trop dur de trouver les pentes vu qu'on connait les points de chaque droites/courbes !

Par contre, pour du bitmap, là c'est bien plus compliqué :(

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 27/12/2004 18:31:38

ouais enfin je sais tracer des courbes de bézier (en feintant un peu car c'est pas aussi bien fait que photoshop (cf: ennixo fils à observer de + près)) mais je ne sais pas tracer une forme quelconque pleine comme celle qu'on a utilisé en test =)

mais oui en vectoriel c'est "facile", rien à avoir avec ce qu'on veut faire =)

signaler à un administrateur
Commentaire de ennixo le 28/12/2004 21:02:41

j'ai recherché un peu de la doc concernant l'anticrénelage d'images existantes le seul moyen c'est (comme je le craignais) de connaitre les objets indépendament de leur résolution. par exemple pouvoir obtenir le centre, le rayon et la couleur de ce qu'on supposerait être un cercle pour carrément le retracer. pour résumer notre forme il faudrait arriver à capter que c'est des courbes de bézier de telles positions de couleur noire et que la forme est pleine.
et pourtant elle n'est pas si compliquée.......

il y a une alternative, modifier un peu scale2x pour anticréneler mais on obtiendrait trop d'anticrénelage (même ce qui ne devrait pas l'être le serait) et on aurait quand même des problèmes pour tout ce qui est proche de l'horizontale ou de la verticale...

bref tout ça pour dire : ne te creuse pas la tête, un résultat parfait (meme presque) c'est ""impossible"".
entre guillemets car c'est faisable mais à grande echelle car boulot énorme, pour peu qu'on veuille s'attaquer a des image vraiment complexes avec des dégradés etc.......

signaler à un administrateur
Commentaire de ennixo le 28/12/2004 21:24:27

Aaaaaaaaahhhhhhhhh non il y a une autre alternative =)

http://people.deas.harvard.edu/~pvs/research/overdraw/

très impressionnant !

signaler à un administrateur
Commentaire de ennixo le 05/04/2005 14:02:15

bon là je suis obligé d'en parler : Illustrator CS 2 transforme les images pixellisées en vecteurs. ce qui permet non seulement d'anticréneler les contours mais aussi de redimensionner une image. je vous recommande de voir le Live Trace. Ils l'ont fait.

bravo Adobe.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.