IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème algorithme partage des eaux en traitement d'images


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut Problème algorithme partage des eaux en traitement d'images
    Bonjour à tous,

    Pour pouvoir effectuer de la segmentation d'image j'ai codé l'algorithme de la ligne de partage des eaux de Vincent & Soille. J'ai comparé les résultats de mon code avec un programme en java écrit par un chercheur à l'INRIA.
    Je ne trouve pas le même résultat que lui pourtant c'est le même algo. Ne connaissant pas le java j'ai du mal à trouver mon erreur pouvez vous m'aider svp ?

    voici le résultat que je devrais obtenir, mon algo et l'autre algo :

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Je ne connaissais pas du tout ce type d'algorithme. En même temps je ne fais pas de traitement d'image, alors...
    En recherchant sur le net quelques explications j'ai commencé de mon côté à essayer de coder un petit quelque chose.
    En regardant ton code je ne comprends pas pourquoi tu supprimes des doublons lorsque tu tries les pixels en fonction de leur valeur. Si j'ai bien comprends ce que j'ai pu lire ici ou là on ne supprimes rien lors de cette phase.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    Je vous remercie de vous intéressé à mon souci d'implémentation.

    euh non je ne supprime pas les doublons (si c'est le cas indiquez le moi), au début je pensais le faire mais j'ai mis la fonction en commentaire. Peut être que vous avez une mauvaise version prenez celle qui est dans ce topic.
    L'article sur lequel l'algo est explicité est celui là (paragraphe 4.1):
    http://www.google.com/url?sa=t&rct=j...tGCmCw&cad=rja

    J'ai effectué une modification dans l'algo en me basant sur ce que le chercheur à fait, car l'algo de base ne donne pas de résultat assez satisfaisant, mais en même temps je tombe pas sur le même résultat que lui. Je ne vois pas où sa ne vas pas.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Avant de pouvoir décortiquer ton code (on peut se tutoyer ici ) je tiens à comprendre l'algorithme. J'ai codé la première partie qui consiste à trier les pixels. C'est la partie inondation que j'ai du mal à saisir.

    Pour un pixel donné à une hauteur donnée faut-il regarder tous les pixels adjacents ? Si les pixels adjacents sont inférieurs que faire ? Je ne comprends pas le principe de bassin.

    Voila, tant que tout ceci n'est pas clair pour moi il m'est très difficile de comprendre et à fortiori de trouver une erreur ou une correction possible

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    En fait la watershed (ligne de partage des eaux) est un algorithme de segmentation d'image, c'est à dire un algo qui va découper mon image en régions distinctes. Cela peut servir à isoler des objets du fond ou dans le cas de cet algo obtenir les contours d'un objet dans l'image. Par exemple dans l'image que j'ai mis dans les fichier joins au topic séparer les différentes cellules qui se trouve dans l'image.

    De manière informelle le principe de la watershed est de considéré une image en niveau de gris comme un relief 3D topographique (où le niveau de gris correspond à l'altitude). On détermine les minimas locaux du relief (c'est l'endroit où va commencer l'inondation). Après on simule une inondation du relief en perçant les minimas et en plongeant le relief dans l'eau. L'inondation se fait de manière constante et à chaque pas on voit apparaître la naissance de bassin ou l'expansion des bassins déjà existant. Lorsque deux bassins se rencontrent on met une digue pour que les eaux de ces bassins ne se mélange pas. Quand l'inondation est finie on ne peut distinguer que les digues et les eaux des différents bassins. On remarque que les digues correspondent aux frontières entre les différents objets qui se trouvent dans l'image.

    L'algo se décompose en trois parties :
    -une première partie ou on trie les pixels selon leur valeurs en gris,
    et on masque tous les pixels au niveau h,
    -une deuxième partie ou on procède à l'expansion des bassins existants au niveau h-1,
    -la troisième partie où on recherche les minimas locaux c'est à dire l'endroit où des nouveaux bassins vont se créer.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Ta fonction quicksort(); est utilisée en récurcivité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void quicksort(Pixel tab[], int gauche, int droite)
    { register unsigned int pivot;
    	if(gauche<droite)
    	{ 
    	   pivot=partition(tab,gauche,droite);
    	   quicksort(tab,gauche,pivot-1);
    	   quicksort(tab,pivot+1,droite);
    	}
    }
    Je ne suis pas sûr de son fonctionnement. De plus pourquoi tries-tu les pixels ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Oui ma fonction quicksort est récursive, elle fait appel à une autre fonction nommée partition qui fait tous le taff normalement.
    Je trie les pixels pour avoir un accès direct aux pixels lors de l'inondation.
    Cela rend l'algorithme plus rapide, ça permet de ne pas faire plusieurs parcours du tableau lorsque je veux masquer l'ensemble des pixels qui ont une valeur h.

Discussions similaires

  1. [image] Watershed (partage des eaux) en niveaux de gris
    Par pseudocode dans le forum Contribuez
    Réponses: 24
    Dernier message: 26/05/2011, 11h56
  2. segmentation d'images avec la ligne de partage des eaux
    Par Imène_23 dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 26/04/2009, 18h49
  3. Aide ligne partage des eaux
    Par comrad85 dans le forum Traitement d'images
    Réponses: 9
    Dernier message: 05/06/2008, 13h50
  4. segmenter par ligne de partage des eaux
    Par savoir_plus dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 28/02/2008, 14h55
  5. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo