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

MATLAB Discussion :

probléme avec mon algo


Sujet :

MATLAB

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Points : 50
    Points
    50
    Par défaut probléme avec mon algo
    Bonjour

    voila je vous explique un peu ce que je veut faire !!
    en fait j'ai une image binaire que je veut décomposer en bloc de telle sorte que les blocs soient uniformes c a d il ont les même coordonnées en abscisse
    un bloc se caractérise par ses coins sup gauche et inf droit (x1 y1,x2 y2)
    moi je veux une structure qui contient tous les blocs enfin leur coordonnées seulement parce que le contenu c'est des "1" alors pas d'importance quand je veux faire des traitements!
    Alors j'ai écrit un algo mais j'ai des problème en ce qui concerne le premier élément de mon cell array voici l'algo bien expliqué avec la première erreur générée.
    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
    45
    46
    47
    48
    49
    50
    function [b] = IBR(im)
    k=1;        %%indice du tableau cell contenant les info des bloc ajouté
    kp=1;       %% indice du vecteur contenant les indice des bloc ajouter
                  %%precedement  
    [M N]=size(im);
    for y=1:N
       kc=1; %% indice du vercteur contenant les indice des blocs en cours de %%traitement 
       x=1;
        while (x<=M)
            while (im(x,y)==0 && x<M)
                x=x+1;
            end          %%ajout blocs a b{} qui est vide initialement 
            if (x<=M)     %%detection de l'objet et initialisation du 1er repére (x1)
                x1=x;
            end
            while (im(x,y)==1)    %% parcourir l'objet
                x=x+1;
            end
            if (x<=M)          %%detection de la fin de l'objet
                x2=x-1;         %%2éme repére (x2)
                trouv=true;  %%objet trouver pour dire que la ligne contien des '1'
            end
            if (trouv)             
                connect=false; 
    %%si objet trouver vérifier si il ne correspond pas    
    %%a des bloc ajouter precedement ie: avec les méme x1 et x2
                for j=1:kp
                    if(x1==b{p(j)}(1) && x2==b{p(j)}(2))    %%verification
                        C(kc)=p(j); b{p(j)}(4)=y;
                        connect=true;            %%si il ya correspondance alors 
                    end         %%on le connect avec le bloc qui lui correspond
                end
     
            if (connect==false) 
    %%pas de correspondance alors on crée un nouveau bloc 
                b{k}(1)=x1; b{k}(2)=x2;
                b{k}(3)=y; b{k}(4)= y;
                C(kc)=k; k=k+1; %%incrementé l'indice de nombre de blocs ajouter
            end
            kc=kc+1;                                        
            end
        for i=1:k-1
            p(i)=C(i);
            kp=kc;           %%indice de blocs precedent est incrementé
        end
        end
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    end
    pour l'erreur :
    >> IBR(im)
    ??? Undefined function or variable "p".

    Error in ==> IBR at 25
    if(x1==b{p(j)}(1) && x2==b{p(j)}(2)) %%verification
    j'espère que c'est clair !

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    j'ai pensé a ajouter ca mais une autre erreur !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function [b] = IBR(im)
    k=1; 
    kp=1; 
    b{1}=[0 0 0 0];
    p(1)=1;
    [M N]=size(im);
    for y=1:N
    kc=1;  
    x=1;
    autre erreur :
    ??? Attempted to access p(2); index out of bounds because numel(p)=1.

    Error in ==> IBR at 27
    if(x1==b{p(j)}(1) && x2==b{p(j)}(2)) %%verification

  3. #3
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Il suffit de comprendre l'anglais et d'écouter ce que MATLAB te dit.

    Dans le premier cas il te dit que la variable p n'existe pas.
    C'est censé être quoi cette variable p ? D'où ça vient ?


    Dans le 2ème cas tu as créé arbitrairement une variable p qui est un scalaire (taille 1*1) donc quand j=2 il essaye d'accéder à p(2) qui n'existe pas.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    merci pour votre réponse
    le problème c'est qu'au premier passage j ne peut être a '2'
    et qu'après la variable 'p' qui est un vecteur aura un autre élément donc (2*1)
    et la le problème ne se pose pas pour j qui pourra prendre 2 a la prochaine itération .

  5. #5
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Je n'ai rien compris...

    Essaye de répondre au moins à ma question :
    C'est censé être quoi cette variable p ? D'où ça vient ?

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    la variable p est un vecteur qui contiens les indice des blocs précédents
    lorsque j'ajoute les coordonnées d'un blocs c'est a dire (x1 x2 y1 y2) a b{}
    qui est un tableau de cellules je mes l'indice de cet élément dans p avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     for i=1:k-1
            p(i)=C(i);
            kp=kc;           %%indice de blocs précédent est incrémenté
        end

  7. #7
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Ah oui ça y est j'ai vu.
    Mais tu crées cette variable p à la fin de ton code et tu essayes de l'utiliser avant de la créer : ce n'est pas logique !

    Donc il faut effectivement que tu revois ton algorithme.

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    effectivement j'ai revus l'algo et donc j'ai fait un premier passage pour étre sur qu'au second la variable "p" soit pleine !!
    et maintenant mon algo fonctionne très bien
    merciii

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

Discussions similaires

  1. Problême avec les algos, itérateurs ...
    Par R'SKaP dans le forum C++
    Réponses: 14
    Dernier message: 19/12/2005, 00h14
  2. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 01h26
  3. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 19h02
  4. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 12h21
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 09h46

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