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

Images Discussion :

squelette et minimal path


Sujet :

Images

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut squelette et minimal path
    Bonjour, je suis sur un projet en codant sous Matlab et j'ai un petit soucis. Je suis arrive a obtenir un squelette satisfaisant de mon image et mon but est de rechercher le chemin minimum entre les points pour optimiser le squelette
    Voici le debut d'un code qu'on m'a propose dans lequel je n'arrive pas a déterminer a quoi correspondent les variables NumP et Result...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
    % minimum path between points
     
    Nodes = zeros(NumP,2);
    [Nodes(:,1),Nodes(:,2)] = find(Result ==1);
     
     
     
     
    TotalChemin = 0;
     
     
    for i=1:NumP-1
         for j=i+1:NumP
           FirstPoint = Nodes(i,:);
           LastPoint = Nodes(j,:);
     
           if (norm(LastPoint-FirstPoint)<MaxiDist)
     
           % Search area for the minimum path
     
           SearchA = abs(LastPoint(1)-FirstPoint(1)) ;
           SearchB = abs(LastPoint(2)-FirstPoint(2)) ;
           Candidates = zeros(SearchA*SearchB,2);
           num = 0;
           if (FirstPoint(1)<LastPoint(1))
               signA =1;
           else
               signA = (-1);
           end
           if (FirstPoint(2)<LastPoint(2))
               signB =1;
           else
               signB = (-1);
           end
           for p=0:SearchA
               for q =0:SearchB
     
                   num= num+1;
                   Path(numero,1) = FirstPoint(1)+signX*p;
                   Path(numero,2) = FirstPoint(2)+signY*q;
               end
           end
    Quelqu'un a une idee?

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    peut-être qu'il faudrait expliquer un peu plus le problème avant de pouvoir proposer une solution ; en particulier :
    • le squelette, il est sous quelle forme ? Une image binaire avec une structure de 1 pixel d'épaisseur ? ou un ensemble de points muni d'une relation d'adjacence ?
    • le chemin minimum entre quels points ?
    • qu'entends-tu par "optimiser le squelette" ?


    En étudiant un peu le code, j'ai l'impression que l'idée est de transformer l'image binaire du squelette en structure de graphe. Dans ce cas Result devrait être le résultat de la squeletisation. et NumP correspondrait au nombre de points non nuls du squelette. Essaie de rajouter ce code au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    img = imread('circles.png');
    Result = bwmorph(img, 'skel', Inf);
    NumP = sum(Result(:))
    A+

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Salut,
    Merci pour ta réponse Kangourou

    Mon squelette est une image binaire [0 1]
    Je cherche a sélectionner les pixels terminaux du squelette, du coup j'ai utilise la fonction anaskel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [dmap,exy,jxy] = anaskel(fig);
    et ça me renvoie donc les coordonnées de ces points, ici exy (j'ai superposer le plot des points sur l'image du squelette et les points correspondent bien aux pixels terminaux).

    Ce que je cherche a faire maintenant c'est de faire correspondre les coordonnées des points exy avec la valeur correspondante (l'index) du squelette 0 ou 1. j' ai penser a utiliser la fonction 'find' mais ça me renvoie une erreur de dimension entre les matrice, (logique puisque ma matrice exy est 2x240 et celle du squelette est 1020x1020)

    Ensuite je relierai ces points et sélectionnerai les liaison que je veux garder

    A+

  4. #4
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Hello,

    je m'étais posé des question un peu similaire il y a quelques années. J'ai des codes qui trainent et qui peuvent peut-être faire une partie du travail.

    La stratégie que j'avais suivie est a suivante :
    1. Calculer le squelette de l'image, sous la forme d'une image binaire. Jusqu'ici, pas de souci, c'est ce qu'on obtient avec bwmorph.
    2. Transformer l'image binaire du squelette en un graphe, avec les sommets correspondants aux pixels du squelette, et les arêtes correspondant aux relations entre pixels voisins. Ca se fait en prenant un pixel au hasard, en parcourant ses voisins, et en itérant de voisin(s) en voisin(s) jusqu'à ce que l'on ait parcouru tout le squelette.
    3. On peut ensuite simplifier le graphe, en regroupant les pixels formant des branches (suites de pixels n'ayant chacun que deux voisins).


    Pour la transformation du squelette en graphe, j'ai une fonction dispo ici : imBinaryToGraph.m.

    Pour le traitement de la topologie du graphe, j'ai quelques fonction dans une boîte à outils "matGeom" :


    Ca date un peu, mais j'ai l'impression que ca correspond bien à ce que tu cherches ?

    A+

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Salut
    Merci beaucoup pour ton aide Kangourou :-D

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Struts][jsp] probleme de path
    Par vpet dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/03/2004, 18h21
  2. Ajouter des chemins dans la variable PATH
    Par Righetto Dominique dans le forum Linux
    Réponses: 7
    Dernier message: 21/03/2004, 17h38
  3. récupérer le path system
    Par Eugénie dans le forum MFC
    Réponses: 4
    Dernier message: 22/12/2003, 13h03
  4. Réponses: 3
    Dernier message: 10/06/2003, 14h16
  5. Redhat-9 changer le path des databases
    Par jean christophe dans le forum Installation
    Réponses: 7
    Dernier message: 30/05/2003, 17h53

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