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 :

Boucle for if et opérateurs logiques


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Par défaut Boucle for if et opérateurs logiques
    Bonjour,

    Voici à quoi ressemble la boucle dont j'ai besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for k=1:N1
        for i=1:N2
            if "k=N1 et i=N2" EXPRESSION1
    que j'écris ainsi (k==N1) && (i==N2)

    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif A(i,k)<t1 et B(i,k)<t2 et x<t3 et x>t4 EXPRESSION2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else EXPRESSION3 et 3 end (pour les 2 for et la structure en if
    Je rencontre un problème puisque
    ??? Index exceeds matrix dimensions.
    A savoir que A est une matrice de dimension N2*N1-1
    B une matrice de dimension N2-1*N1
    x une matrice de dimension N2*N1


    Merci d'avance de vos avis et conseils

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    pour k = N1 et i = 1

    ta condition "k=N1 et i=N2" n'est pas verifiée.

    et dans ce cas Matlab evalue A(i,k) = A(1,N1) qui n'existe pas puisque size(A) = [N2,N1-1]

  3. #3
    Membre chevronné
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Par défaut
    Oui, il faut que tu rajoutes des conditions dans le cas K==N1 ou i==N2, à cause des dimensions de tes matrices A et B.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Par défaut
    Si je change comme suit, il ne me calcule rien pour l'expression3! Je n'ai plus de message d'erreur par contre!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for k=1:N1
        for i=1:N2
            if k==N1
                disp('');  
            elseif i==N2
                disp('');  
            elseif A(i,k)<t1 et B(i,k)<t2 et x<t3 et x>t4 EXPRESSION2
                Expression3
            else
                disp('');
            end
        end
    Merci encore pour votre aide

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    elseif A(i,k)<t1 et B(i,k)<t2 et x<t3 et x>t4 EXPRESSION2
                Expression3
    Tu pourrais mettre des expressions légales, ce serait plus simple pour comprendre exactement ce qui se passe

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Par défaut oui...
    Je mets mon code complet:

    le début :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    N=input('quel est le nombre total d''images? ');
    tail_disq=10; seuil=800; petite_aire=200;
     
    for k=1:N
        fname=sprintf('levures + 50mS par m + 3Vpp +44MHz_t00%d(c1).jpg',k);
        I{k}=imread(fname);
    end
     
    se=strel('disk',tail_disq);
    for k=1:N
        background{k}=imclose(I{k},se);  I2{k}=imsubtract(background{k},I{k}); 
        level=graythresh(I2{k});     bw{k}=im2bw(I2{k},level); 
        bw{k}=bwareaopen(bw{k},petite_aire);   bw{k}=imclearborder(bw{k}); 
        fill{k}=imfill(bw{k},'holes'); 
        [etiquette{k},NbObjets{k}]=bwlabel(fill{k},8);
        b{k}=bwboundaries(fill{k});    L{k}=bwlabel(fill{k}); 
        rego{k}=regionprops(L{k},'Orientation');
    end
     
    affiche=zeros(NbObjets{1},4); affiche(:,1)=1:NbObjets{1}; affiche(:,2)=1; 
    for k=1:N
        regc=regionprops(L{k},'Centroid'); 
        affiche(:,2*k+1:2*k+2)=cat(1, regc.Centroid); 
    end
     
    x=affiche(:,3:2:end); y=affiche(:,4:2:end);
     
    % déplacement des objets entre images 
    xs=diff(x,[],2);   ys=diff(y,[],2); 
    for k=1:N-1
        for i=1:NbObjets{1}
            deplacement(i,k)=sqrt(xs(i,k)^2+ys(i,k)^2);
        end 
    end
     
    % distance entre objets balayage en x croissant
    xs1=diff(x',[],2);   ys1=diff(y',[],2); xs2=xs1';  ys2=ys1';
    for k=1:N
        for i=1:NbObjets{1}-1
            distancex(i,k)=sqrt(xs2(i,k)^2+ys2(i,k)^2); 
        end
    end
     
    % distance entre objets balayage en y croissant
    yx=[]; 
    for i=3:2:2*N+2
        xy=affiche(:,i:i+1);
        yx=[yx sortrows(xy,2)];
    end
    x1=yx(:,1:2:end); y1=yx(:,2:2:end);
    xs3=diff(x1',[],2);   ys3=diff(y1',[],2); xs4=xs3';  ys4=ys3';
    for k=1:N
        for i=1:NbObjets{1}-1
            distancey(i,k)=sqrt(xs4(i,k)^2+ys4(i,k)^2); 
        end
    end
     
    s=size(I{1}); diam=32;  t1=1.5*diam; t2=2*diam; a=[];
    et la suite où se situe le souci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for k=1:N
        for i=1:NbObjets{1}
            if k==N 
                disp('');  
            elseif i==NbObjets{1}
                disp('');  
            elseif (deplacement(i,k)<t1) && (distancex(i,k)<t2) && (distancey(i,k)<t2) && (x(i,k)<s(2)-t1) && (x(i,k)>t1) && (y(i,k)<s(1)-t1) && (y(i,k)>t1)
                a(i,k)=[rego{k}(i).Orientation]
            else
                disp('');
            end
        end                    
    end
    Merci d'avance de votre aide!

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 17h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 11h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 20h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 23h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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