begin process at 2008 08 08 21:49:57
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

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 !

DIAGRAMME DE VORONOI


Information sur la source

Catégorie :Graphique Classé sous : diagramme, décomposition, voronoi, cmugraphics, image Niveau : Débutant Date de création : 27/02/2007 Date de mise à jour : 11/03/2007 13:10:30 Vu / téléchargé: 5 000 / 490

Note :
Aucune note

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note


Description

Ce petit programme permet de construire en 2D le diagramme de Voronoi. Je l'es fait en réponse à des questions que l'on m'a posé.

Le diagramme de Voronoi permet de cartographier l'image en zone d'influence.
On pourrait considérer les points comme des villes et déterminer ainsi quel est la zone qui est sous son contrôle.
On peut être sure que tous les points dans la zone d'influence de la ville est plus près en distance de la ville il appartient, que de n'importe qu'elle autre ville.

Conclusion

J'ai créé un algorithme linéaire. Est ce que vous avez des idées pour amméliorer les performances?

Si vous voulez trouver la librairie CMUgraphics, vous pouvez la télécharger sur mon site internet:

http://pistol.petesampras.free.fr
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

28 février 2007 19:58:24 :
J'ai ajouté la possibilité de change de distance: Distance euclidienne et distance de manhattan. Ajout des stats de mon algo
02 mars 2007 20:08:53 :
Ajout de la triangulation de Delaunay: opération dual du diagramme de Voronoi
11 mars 2007 13:10:30 :
Ammélioration des performances de l'algo de voronoi =>gain de 40% sur l'algo d'origine
  • signaler à un administrateur
    Commentaire de Kirua le 28/02/2007 13:03:15

    Euhm, je doute fortement que ton algorithme soit linéaire ( O(n) )comme tu dis. Et si c'était le cas, ce serait vraiment dommage de vouloir le transformer en un O(n lg n)... La triangulation de delaunay, qui est le problème "dual" de celui-ci, donc de complexité intrinsèque équivalente, peut être construit en au mieux O(n lg n). D'où mes doutes.

    Du reste, le résultat est assez joli, mais ça aurait été chouette que tu dessines les villes par dessus les polygones :).

    Tu as utilisé quoi comme définition de distance? Euclidienne ou manhattan? (ie: sqrt(a² + b²) ou abs(a) + abs(b) ?). En fait, je ne suis pas familier avec le diagramme de voronoi, mais j'en comprends bien la définition, et je suis étonné de voir des polygones plutôt que des formes courbes quelconques, ce qui s'expliquerait assez simplement si tu as utilisé la distance de manhattan.

    Sinon, le rendu est splendide!

  • signaler à un administrateur
    Commentaire de Pistol_Pete le 28/02/2007 19:50:54

    Salut Kirua
    Je t'assure que mon algo est linéaire. Je vais bientôt mettre un doc de stat sur les performances en temps de mon algorithme.
    L'équation de la droite est : y = 90 x+200 le tout en ms.

    Je ne comprends pas pourquoi tu dis qu'un algo en nlog(n) est moins performant qu'un algo linéaire. La différence en temps ce fait surtout lorsque n devient très grand à l'avantage de l'algo en nlog(n)?

    Sinon mon programme utilise la distance euclidienne mais je vais voir ce qui ce passe avec les autres distances...
    Merci de ton commentaire en tout cas.

  • signaler à un administrateur
    Commentaire de Pistol_Pete le 28/02/2007 20:05:16

    Voila voila j'ai ajouté la possibilité de choisir la distance que l'on souhaite: euclidienne ou manhattan.

    J'avoue que je suis assez surpris du résultat du diagramme pour la distance de manhattan. Cela donne vraiment un diagramme assez inabituelle.
    Je vous invite à allez le voir, il est très sympas.

    Ah oui au fait Kirua, tu peux réafficher les villes une fois que tu as tracé les polygones. (Appuye sur POINTS)

  • signaler à un administrateur
    Commentaire de Kirua le 28/02/2007 20:45:56

    Effectivement, c'est très joli avec la distance de manhattan, et je suis tjs aussi étonné du résultat pour la distance euclidienne :). Ton interface graphique est vrmnt agréable en tout cas.

    Et ton analyse statistique est convainquante pour n < 800 en tout cas, je peux difficilement contredire. C'est juste très étonnant.

    Sinon, n < n log n pour tout n > 1, donc oui, de manière tout à fait certaine, n est mieux que n log n. Aucun doute là dessus.

  • signaler à un administrateur
    Commentaire de Pistol_Pete le 01/03/2007 07:58:41

    Salut

    Tu as tout à fait raison pour n< nlog n, je me suis emballé.
    J'ai dit cela car j'ai vu des algorithmes tourner qui était bien plus rapide que le mien...
    Je vais essayer de laisser tourner mon pc plus longtemps pour tester des n>800, mais c'est vrai qu'à priori, c'est bien un algo linéaire!

  • signaler à un administrateur
    Commentaire de adnan05 le 07/03/2007 18:20:06

    est ce que qlq avais ce pgm en builder.
    merci.

  • signaler à un administrateur
    Commentaire de f le 08/04/2007 20:16:17

    Le meilleur algo existant est en n*log(n), meme pour les plus grands chercheurs..

  • signaler à un administrateur
    Commentaire de Pistol_Pete le 10/04/2007 14:44:59

    Je sais bien et je ne prétend pas avoir trouvé l'algo du siècle cependant j'ai fait des tests qui montrent que la construction du diagramme de voronoi est fait en o(n).

    J'aimerai aussi comprendre car mon algo est très simple...

    Tous mes tests ont été fait en mesurant le temps c'est peut etre à cause de cela.

  • signaler à un administrateur
    Commentaire de Muff le 06/09/2007 16:11:07

    Salut,
    Si j'ai bien compris ton algo, ça consiste en gros à parcourir tous les points de l'image et à choisir pour chacun d'entre eux la ville la plus proche. À ce moment là, l'algorithme est en effet linéaire suivant le nombre de villes, il est aussi linéaire suivant le nombre de pixels dans ton image.
    Le meilleur connu actuellement est en n*log(n) suivant le nombre de villes, et s'applique dans un cadre plus général: il renvoie les équations des segments qui séparent chaque région et définit de manière exacte chaque région d'influence tandis qu'ici, tu ne t'attaches qu'aux points à coordonnées entières. De plus il est en O(n) en espace mémoire utilisé tandis que le tien est en O(la surface de l'image = la surface du plan entre les villes aux extrémités, ce qui est dépendant de leurs coordonnées).
    Voilà qui conclura peut-être le débat sur la complexité

    Sinon, très jolies les mosaïques et sympa le choix de la distance.
    On pourrait se servir de ce principe pour mettre un effet de mosaïque sur une image

  • signaler à un administrateur
    Commentaire de Pistol_Pete le 10/09/2007 08:20:15

    Salut Muff

    Merci de ton message, il met les choses en place au niveau de la complexité. En effet je savais bien qu'il devait y avoir une différence entre ma facon de faire et celle des chercheurs...

    Merci d'avoir pris le temps de poster ce message.
    Tu as travaillé sur les diagramme de Voronoi ? Parce que je serais intéressé de trouver le code de la construction du réseau comme le font les chercheurs.
    A+

  • signaler à un administrateur
    Commentaire de nilda2007 le 10/04/2008 21:45:34

    salut!
    ma question sur cette methode esk ca marche avec des image en couleur ou non cad esk c 1 des methodes de segmentation des images couleurs car j'ai appliqué sur une photos un proramme sur DV mais resultat était en noir et blans mais je vois ici que le resulta est en couleur??
    esk kelk1 peut m'expliqué...merciii

  • signaler à un administrateur
    Commentaire de Pistol_Pete le 11/04/2008 09:40:03

    Salut
    Voronoi est une methode de segmentation, c'est a dire qu'il segmente l'image initiale et chaque nouvelle region obtenue aura une unique valeur.
    Ex:
    La region 1 aura le label 0
    La region 2               1  etc...

    Apres c'est a toi de faire comme tu veux. Moi j'ai choisi de mettre des couleurs aleatoires pour chaque region mais c'est un choix personnel.
    donc le label 0 aura comme valeur R=rand()%255, G=rand()%255, B=rand()%255

    A+

Ajouter un commentaire

Discussions en rapport avec ce code source

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS