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 :

graphe d'image 3D


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    25
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2004
    Messages : 25
    Par d�faut graphe d'image 3D
    Bonjour,

    J'ai fait un programme qui cr�e un graphe � partir d'une image 3D en mettant une ar�te entre chaque pixels voisins - on consid�re ici un 6-voisinage. Il compile tr�s bien, mais j'obtiens un segmentation fault.
    Voici le code en question (j'ai enlev� la suite du code pcq pas interessante pour le probl�me):
    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
     
    int main(int argc, const char* argv[])
    {
      Image3D<unsigned char> img(argv[1]);
      typedef Graph<double,double,double> GraphType;
      int nb_edges = 6*img.size; //grosse sur-estimation du nbe d'aretes
      GraphType *g = new GraphType(img.size, nb_edges); 
      for (int l = 0; l < img.size; ++l)
        {
          g -> add_node(); 
        }
       //triple boucle de parcours de l'image 3D
      for (int k = 0; k < img.nbz; ++k)
        for (int j = 0; j < img.nby; ++j)
          for (int i = 0; i < img.nbx; ++i)
    	{
    	  int head, tail;
    	  double cap=0;
    	  head = (k)*img.nbx*img.nby + (j)*img.nby + (i); //le pixel courant
    	    if (img.isInside(i, j+1 , k))
    	    {
                 //on calcule la position du noeud dans g
    	     int  tail = (k)*img.nbx*img.nby + (j+1)*img.nby + (i);
    	     //to do : calcul de la capacité de l'arête
    	      g->  add_edge(head ,tail , cap, cap);
    	    }
    	  if (img.isInside(i+1, j , k))
    	    {
    	      int tail = (k)*img.nbx*img.nby + (j)*img.nby + (i+1);
    	     //to do : calcul de la capacité de l'arête
    	      g->  add_edge(head ,tail , cap, cap);
    	    }
    	  if (img.isInside(i, j , k+1))
    	    {
                 int tail = (k+1)*img.nbx*img.nby + (j)*img.nby + (i);
    	     //to do :calcul de la capacité de l'arête
    	      g->  add_edge(head ,tail , cap, cap);
    	    }
    	}
      }
    En utilisant gdb, j'obtiens :
    0x0804a5a1 in main (argc=0, argv=Cannot access memory at address 0xb7fb3000) at GraphCut3D.cc:89
    89 g-> add_edge(head ,tail , cap, cap);

    J'ai bien compris qu'il y a un probl�me d'acc�s m�moire, mais pas moyen de trouver quel symbol appelle l'adresse concern�e.
    Quand je demande un print de "head", c'est nickel, il me donne la bonne valeur mais quand je demande un print de "tail", j'ai "no symbol tail in context" et pareil pour "cap".
    Je ne sais plus trop quoi faire. Si quelqu'un a une id�e...

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 89
    Par d�faut
    Bonjour,

    Je ne sais pas si tu as r�ussi � r�soudre ton probl�me?

    En tout cas, dans le code que tu pr�sentes, il risque d'y avoir un conflit entre le tail que tu d�clares au tout d�but des boucles for :
    et les tail que tu d�clares � l'int�rieur de chaque if:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int  tail = (k)*img.nbx*img.nby + (j+1)*img.nby + (i);
    Donc soit tu supprime la d�claration de tail au d�but des boucles for, soit tu supprimes les 'int' dans les if

    Apr�s, pourquoi cap ne marche pas non plus, je ne sais...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    25
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2004
    Messages : 25
    Par d�faut
    J'avais fait pas mal de petits changements pour chercher la cause et ce bazar avec les d�clarations/d�finitions de "tail" en est le r�sultat. Mais j'avais d�j� corrig� le pb. N�anmoins, merci.
    Je n'ai tjs pas r�solu ce mic-mac, aussi si quelqu'un a une id�e, je suis preneur car je ne sais plus trop quoif aire avec ce code qui n'est pourtant pas tr�s compliqu� (c'est d'ailleurs d'autant plus �nervant!)

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    89
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 89
    Par d�faut
    D'accord, effectivement le probl�me est plus complexe qu'il n'y paraissait alors

    Comme �a, je ne vois pas o� est le probl�me (je ne suis pas d'une grande aide d�sol�).

    J'aurais quelques questions par contre :
    Les print de tail et cap, tu les avais bien mis juste avant l'appel � add_edge()?

    Tu as essay� de v�rifier la ligne o� �a plantait en ex�cutant pas � pas avec un debugger (ou en mettant des print dans tous les sens)?
    C'est bien la ligne que tu as indiqu�e?

    [HS]
    Sinon accessoirement dans :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    head = (k)*img.nbx*img.nby + (j)*img.nby + (i)
    ce n'est pas img.nbx que devrait multiplier j?
    (idem pour les calculs de tail)
    [/HS]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    25
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2004
    Messages : 25
    Par d�faut
    Bien vu!!! c'est effectivement une erreur, le pire c'est que je l'ai �crit correctement sur mon cahier et quand j'ai tap� le code, j'ai m�lang� le bazar. Et y'a des chances que ce soit �a qui entraine la segmentation fault. Je corrige �a et je regarde si �a change.
    Merci du coup de main

    Les print de tail et cap, tu les avais bien mis juste avant l'appel � add_edge()?
    Euh, ce sont les print du debbuger, ceux qui te permettent de conna�tre la valeur du symbole � un endroit du code...

    Tu as essay� de v�rifier la ligne o� �a plantait en ex�cutant pas � pas avec un debugger (ou en mettant des print dans tous les sens)?
    C'est bien la ligne que tu as indiqu�e?
    Comme je le disais juste au-dessus, c'est d�j� fait le coup du debbuger et �a me donne aps bcp d'info au final

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    25
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2004
    Messages : 25
    Par d�faut
    Bon, �a change rien au probl�me... mais c'�tait quand m�me une correctionne bonne � prendre.
    Thanks!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. recalage de deux graphes d'images 3D (graphe de reeb)
    Par mokakimo dans le forum MATLAB
    R�ponses: 3
    Dernier message: 10/09/2008, 15h59
  2. [JFreechart] Rediriger le graphe vers image
    Par maserati dans le forum 2D
    R�ponses: 4
    Dernier message: 01/06/2007, 20h08
  3. graphe vers image jpeg
    Par me_yassine dans le forum 2D
    R�ponses: 3
    Dernier message: 01/06/2007, 14h41
  4. Copier le contenu d'une feuille Excel avec graphes et images
    Par billynirvana dans le forum VB 6 et ant�rieur
    R�ponses: 3
    Dernier message: 12/01/2007, 20h25
  5. [TP] Enregistrement d'un graphe en image
    Par Alanis dans le forum Turbo Pascal
    R�ponses: 1
    Dernier message: 07/04/2006, 17h22

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