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 :

erreur "Index exceeds matrix dimensions" [Débutant]


Sujet :

Images

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Par défaut erreur "Index exceeds matrix dimensions"
    bonjour à tous,

    j'ai une image "img" et je veux la décomposer en 2 "I1 et I2" images selon un axe vertical
    alors voilà mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    img=imread('test.jpg');
    m=size(img,1) % = 450
    n=size(img,2) % = 720
    % construction 1ere image I1
    for i=1:n/2
        for j=1:m
            I1(i,j)=img(i,j);
        end
    end
    premier essai pour la construction de I2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    % construction 2eme image I2
    for i=n/2:n
        for k=1:((n/2)+1)
            for j=1:m
                I2(k,j)=img(i,j);
            end
        end
    end
    ??? Index exceeds matrix dimensions.
    2ème essai pour la construction de I2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i=n/2:n
        for k=1:(n-n/2)
            for j=1:m
                I2(k,j)=img(i,j);
            end
        end
    end
    ??? Index exceeds matrix dimensions.
    3ème essai pour la construction de I2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i=n/2:n
        for j=1:m
            k=(i-n/2)+1;
            I2(k,j)=img(i,j);
        end 
    end
    ??? Index exceeds matrix dimensions.
    4ème essai pour la construction de I2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i=n/2:n
        for j=1:m
            k=i+1-n/2;
            I(k,j)=img(i,j);
        end
    end
    ??? Index exceeds matrix dimensions.
    mais toujours l'erreur
    ??? Index exceeds matrix dimensions.
    jen n'arrive pas à trouver l'erreur!!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Il s'agit juste d'un petit échange entre i et j:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for j=1:n/2
        for i=1:m
            I1(i,j)=img(i,j);
        end
    end
    Au passage, ceci peut être remplacé par I1 = img(1:m,1:n/2);.

    Il en est de même dans I2, mais tu ne vois pas cette erreur dans I1 car n/2 reste inférieur à m.

    PS: Je te conseille de regarder Qu'est-ce que la préallocation de mémoire ?

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Par défaut
    salut Winjerome,

    merci de m avoir répondu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %Il s'agit juste d'un petit échange entre i et j:
    for j=1:n/2
        for i=1:m
            I1(i,j)=img(i,j);
        end
    end

    je pense pas que c'est juste il m'affiche pas la moitié exacte de l'image img !!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans ce cas, il te suffit de changer tes intervalles, mais en tout cas retiens ceci:
    Tu as size(img) = [450 720] = [m n] Donc pour img(i,j), i devra varier dans [1:m] et j dans[1:n].

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Par défaut
    oui exactement comme tu l as dit je dois m'assurer de mes intervalles )
    je vais verifier mon code !!

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Par défaut
    pour éviter l'erreur de depassement d indexe j'ai changer le code comme suit pour créer I2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    k=1;
    for i=m/2:m
        for j=1:n
            I2(k,j)=img(i,j);
            k=k+1;
        end
    end
    mais l'incrémentation du 'k' ne finit pas apparemment une boucle infinie !!

    vraiment je ne vois pas pourquoi une boucle infinie ?!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Non ce n'est pas possible d'avoir une boucle infinie avec ton code.
    J'ai remarqué les caractères >> dans ton code, le fais-tu en ligne de commande?
    Si c'est le cas, il se peut que Matlab ne détecte pas la fin de ton instruction et t'écrive "Continue entering statement" dans ta barre de status, et qu'ainsi tu penses à une boucle infinie alors qu'il ne fait qu'attendre la fin.
    Une autre remarque: Pense à faire une pré-allocation de I1 et I2.

  8. #8
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Par défaut
    j'ai ajouter cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    >> I2 = zeros(360,450);
    mais le problème percicte !!

    bon je vais t expliquer exactement ce qui se passe !!
    j'ai une image 'img'

    img 450x720x3 972000 uint8 array

    et je veux la diviser en 2 image égales
    donc
    I1 360 * 450
    I2 360 * 450

    pour avoir I1 je parcours 'img' en prenant tous les lignes et uniquement la première moitié des colonnes

    et de même
    pour avoir I2 je parcours 'img' en prenant tous les lignes et uniquement la deuxième moitié des colonnes

    n= size(img, 2)
    m= size(img, 1)


    voilà !! euuh peut être il y a une faute dans mon raisonnement que pense tu ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Alors déjà dans ce cas, tu oublies la 3ème dimension rbg, et l'incrémentation de k est mal placée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    k=1;
    I2 = zeros(m/2,n,3);
    for i=m/2:m
        for j=1:n
            I2(k,j,:)=img(i,j,:);
        end
        k=k+1;
    end
    Ou en une ligne sans pre-allocation nécessaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    I1 = img(1:m/2,:,:);
    I2 = img(m/2:end,:,:);
    Etant débutant, je te conseille de regarder le tutoriel Gestion des matrices

  10. #10
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    I1 = img(1:m/2,:,:);
    I2 = img(m/2:end,:,:);
    c'est super et simple j'ai la moitié des 2 images mais c'est une coupe horizontale !!

    alors pour avoir une découpe verticale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >> I1 = img(:,1:n/2,:);
    I2 = img(:,n/2:end,:);
    vraiment meeeerciii bcp Winjerome

    je commence à aimer Matlab

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

Discussions similaires

  1. Erreur : Index exceeds matrix dimensions.
    Par b_l_o_b_b_y dans le forum MATLAB
    Réponses: 5
    Dernier message: 31/07/2013, 18h58
  2. [input] Erreur "Index exceeds matrix dimensions"
    Par ED2912 dans le forum MATLAB
    Réponses: 10
    Dernier message: 18/01/2012, 13h09
  3. "Index exceeds matrix dimensions. " erreur
    Par M.Chaabane dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/11/2008, 17h54
  4. Message d'erreur "Index exceeds matrix dimensions."
    Par bela1280 dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/04/2007, 14h27
  5. Erreur "Index exceeds matrix dimensions"
    Par usama2 dans le forum MATLAB
    Réponses: 2
    Dernier message: 06/03/2007, 01h34

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