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 :

[immultiply] Erreur à l'utilisation


Sujet :

Images

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut [immultiply] Erreur à l'utilisation
    J'ai regarde la documentation de la fonction immultiply du matlab:

    Je veux ecrire un code pour la procession des images digitales en utilisant Image Processing Toolbox.

    Je veux lire multiples images RGB (3D) et images binaires (2D) et utiliser la fonction 'immultiply' du toolbox Image Processing pour extraire les valeurs RGB (les images ont des segments circulaires blanches et j'ai besoin des valeurs RGB avec circular correctifs).

    Voila ce que j'ai fais pour l'instant:

    %Script valeurs_RGB.m

    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
     
     
    liste_des_fichiers_tif = dir('*.tif');
    liste_des_fichier_jpg = dir('*.jpg');
    nombre_fichiers_tif = numel(files1);
    nombre_fichiers_jpg = numel(files2);
    gs = cell(1,1,nombre_fichiers_tif );
    skys = cell(1,1,nombre_fichiers_jpg);
    for j = 1:nombre_fichiers_tif
        gs{j} = imread(nombre_fichiers_tif(j).name);
    end
    g_all = cell2mat(gs);
    for k = 1:num_files2
        skys{k} = imcrop(imread(nombre_fichiers_jpg(k).name),[39 3 640 480]);
    end
    sky_all = cell2mat(skys);
    n1=478;
    n2=602;
    for j= 1:nombre_fichiers_tif
        for k = nombre_fichiers_jpg
            for l = 1:n1
                for m = 1:n2
                    sky_values(l,m,j*k)=immultiply(g_all(l,m,j),sky_all(l,m,1:num_files2));
                end
            end
        end
    end
    Et l'erreur qui survient dans command window c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Error using ==> immultiply>doLogicalMultiplication at 101
    X and Y must be the same size.
     
    Error in ==> immultiply at 60
        Z = doLogicalMultiplication(X,Y);

  2. #2
    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 830
    Points
    14 830
    Par défaut
    Le message d'erreur est incomplet puisqu'il ne donne pas la ligne incriminée dans ton script.

    Sinon il te dit que X et Y (difficile sans le message complet de savoir à quoi ces variables correspondent dans ton script, surement à g_all(l,m,j) et sky_all(l,m,1:num_files2)) devraient être de la même taille ce qui n'est pas le cas.
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Voila le type de toutes mes variables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >> whos
      Name                         Size                    Bytes  Class
     
      g_all                        0x0                         0  double array
      gs                           1x1                         4  cell array
      j                            1x1                         8  double array
      liste_des_fichier_jpg       13x1                      4285  struct array
      liste_des_fichiers_tif       0x1                       256  struct array
      nombre_jpg                   1x1                         8  double array (global)
      nombre_tif                   1x1                         8  double array (global)
      skys                         1x1                         4  cell array
    Pourquoi sky_all n'est pas vue?

    J'ai corrige certains erreurs dans mon script:

    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
     
    global nombre_tif
    global nombre_jpg
    liste_des_fichiers_tif = dir('*.tif');
    liste_des_fichier_jpg = dir('*.jpg');
    nombre_tif = numel(nombre_tif);
    nombre_jpg = numel(nombre_jpg);
    gs = cell(1,1,nombre_tif );
    skys = cell(1,1,nombre_jpg);
    for j = 1:nombre_tif
        gs{j} = imread(nombre_tif(j).name);
    end
    g_all = cell2mat(gs);
    for k = 1:nombre_jpg
        skys{k} = imcrop(imread(nombre_jpg(k).name),[39 3 640 480]);
    end
    sky_all = cell2mat(skys);
    n1=478;
    n2=602;
    for j= 1:nombre_tif
        for k = nombre_jpg
            for l = 1:n1
                for m = 1:n2
                    sky_values(l,m,j*k)=immultiply(g_all(l,m,j),sky_all(l,m,1:nombre_jpg));
                end
            end
        end
    end

    Et l'erreur c'est a la ligne 10:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Improper index matrix reference.
     
    Error in ==> lister_rgb at 10
        gs{j} = imread(nombre_tif(j).name);

  4. #4
    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 830
    Points
    14 830
    Par défaut
    Au lieu de corriger tu as rajouté des erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    global nombre_tif %deja les variables globales c'est mal
    nombre_tif = numel(nombre_tif);% <= tu redefinis nombre_tif qui est maintenant un scalaire !!!
    gs{j} = imread(nombre_tif(j).name);%donc nombre_tif n'étant plus une structure mais un scalaire, ca plante, c'est normal
    Et tu vas avoir le même problème avec nombre_jpg.

    Conseils :
    - Ne pas utiliser de variables globales
    - Faire très très attention à tes noms de variables (typiquement quand tu as le même nom de variable des 2 c^potés du signe = il faut vraiment être sur de ne plus avoir besoin de la variable que tu vas écraser)
    - Relire, relire, relire...et commenter
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Je ne suis pas sur si j'ai bien compris ce que tu m'as dit

    Mais j'ai corrige comme ca :

    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
     
    %global nombre_tif
    %global nombre_jpg
    liste_des_fichiers_tif = dir('*.tif');
    liste_des_fichier_jpg = dir('*.jpg');
    im_tif= numel(nombre_tif);
    im_jpg = numel(nombre_jpg);
    gs = cell(1,1,nombre_tif );
    skys = cell(1,1,nombre_jpg);
    for j = 1:im_tif
        gs{j} = imread(im_tif(j).name);
    end
    g_all = cell2mat(gs);
    for k = 1:im_jpg
        skys{k} = imcrop(imread(im_jpg(k).name),[39 3 640 480]);
    end
    sky_all = cell2mat(skys);
    n1=478;
    n2=602;
    for j= 1:im_tif
        for k = im_jpg
            for l = 1:n1
                for m = 1:n2
                    sky_values(l,m,j*k)=immultiply(g_all(l,m,j),sky_all(l,m,1:im_jpg));
                end
            end
        end
    end
    Pourtant la meme erreur persiste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Improper index matrix reference.
     
    Error in ==> lister_rgb at 10
        gs{j} = imread(im_tif(j).name);

    Et je ne sais pas pourquoi quand je donnes whos sky_all n'est pas reconnue.

  6. #6
    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 830
    Points
    14 830
    Par défaut
    Le problème c'est qu'il manque des choses dans ton code.
    Tu ne nous donne pas toutes les variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    im_tif = numel(nombre_tif)
    Je pense que tu sais ce que cela signifie ? im_tif est un scalaire, et tu essayes encore par la suite de l'utiliser comme une structure.

    Quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gs{j} = imread(im_tif(j).name);
    C'est toi qui connait la variable qui contient le nom de l'image que tu veux lire. Et manifestement ce n'est pas im_tif (puisque im_tif est un scalaire). Je parierais que c'est nombre_tif, non ?
    Pareil pour im_jpg...

    D'ailleurs les noms de variables ne sont pas très bien choisis : c'est quoi nombre_tif et nombre_jpg ?

    sky_all n'est pas reconnu tout simplement parce que le code s'est arrêté avant sa définition, mais avant de t'intéresser à ça commence par corriger les erreurs une par une.

    Ce que je ne comprends pas c'est que ton 1er code était juste au début et que dès ton 2ème post tu as fait des modifications qui ont apportées des erreurs là où il n'y en avait pas
    Règles du Forum

    Adepte de la maïeutique

  7. #7
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Oui. Je croyais que j'ai beacoup des erreurs et voulais les corriger pour que tu as une petite tache a m'aider.

    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
     
    %global nombre_tif
    %global nombre_jpg
    liste_des_fichiers_tif = dir('*.tif');
    liste_des_fichier_jpg = dir('*.jpg');
    im_tif= numel(nombre_tif);
    im_jpg = numel(nombre_jpg);
    gs = cell(1,1,nombre_tif );
    skys = cell(1,1,nombre_jpg);
    for j = 1:im_tif
        gs{j} = imread(nombre_tif(j).name);
    end
    g_all = cell2mat(gs);
    for k = 1:im_jpg
        skys{k} = imcrop(imread(nombre_jpg(k).name),[39 3 640 480]);
    end
    sky_all = cell2mat(skys);
    n1=478;
    n2=602;
    for j= 1:im_tif
        for k = im_jpg
            for l = 1:n1
                for m = 1:n2
                    sky_values(l,m,j*k)=immultiply(g_all(l,m,j),sky_all(l,m,1:im_jpg));
                end
            end
        end
    end
    La meme erreur persiste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Improper index matrix reference.
     
    Error in ==> lister_rgb at 10
        gs{j} = imread(im_tif(j).name);
    Ok. Je te donne toutes les variables :

    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
     
    >> lister_rgb
    >> whos
      Name                         Size                           Bytes  Class
     
      g_all                        0x0                                0  double array
      gs                           1x1x0                              0  cell array
      im_jpg                       1x1                                8  double array
      im_tif                       1x1                                8  double array
      j                            0x0                                0  double array
      k                            0x0                                0  double array
      liste_des_fichier_jpg       13x1                             4285  struct array
      liste_des_fichiers_tif       0x1                              256  struct array
      n1                           1x1                                8  double array
      n2                           1x1                                8  double array
      nombre_jpg                   0x0                                0  double array (global)
      nombre_tif                   0x0                                0  double array (global)
      sky_all                      0x0                                0  double array
      skys                         1x1x0                              0  cell array
     
    Grand total is 478 elements using 4573 bytes
     
    >>
    Si je commente les 2 variables globales(premiers 2 lignes de mon code)...il me donne cette erreur c'est pour ca que j'ai fais avec global (je savais que global ecrase les variables...mais je n'avais aucune idee pour echapper de cette erreur au-dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Undefined function or variable "nombre_tif". et le meme pour nombre_jpg
     
    Error in ==> lister_rgb at 5
    im_tif= numel(nombre_tif);

  8. #8
    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 830
    Points
    14 830
    Par défaut
    Pour tes variables globales oui je suppose qu'elles sont définies ailleurs ces variables.
    Je te disais juste que ce n'est pas la meilleure façon de passer des variables d'un programme à l'autre.
    Ceci dit ton WHOS est étrange vu que ces variables sont vides (taille 0x0)

    Est-ce que tu comprends vraiment ce que tu fais ?
    Tu es parti d'un algorithme ?

    Ta boucle est étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for k = im_jpg
     
    %est pareil que de dire
    k=im_jpg
    Et je n'ai pas besoin que tu me donnes le WHOS de tes variables, c'est à toi de comprendre pourquoi g_all(l,m,j) et sky_all(l,m,1:im_jpg) ne font pas la même taille (c'est surtout un problème d'indices a priori).
    Règles du Forum

    Adepte de la maïeutique

  9. #9
    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 830
    Points
    14 830
    Par défaut
    Ce n'ets pas le fait d'utiliser GLOBAL qui écrase les variables....
    C'est de faire :
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=[1,2,3,4] %A est un vecteur
    A=A(1) %A est devenu un scalaire
    Ton 1er message d'erreur ne correspond plus à ton script

    Pour mon post précédent je t'avais répondu pendant que tu éditais je pense...
    Règles du Forum

    Adepte de la maïeutique

  10. #10
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Ok. Caro. Merci beacoup de ta reponse! Je tiendrais compte de ce que tu m'as dit.

    Amicalment,

    Michel

Discussions similaires

  1. [Mail] erreur avec utilisation fonction mail
    Par taka10 dans le forum Langage
    Réponses: 7
    Dernier message: 12/07/2006, 16h19
  2. Réponses: 6
    Dernier message: 03/07/2006, 08h26
  3. [FTP] Erreur d'utilisation de require_once
    Par dialydany dans le forum Langage
    Réponses: 14
    Dernier message: 06/11/2005, 17h46
  4. Réponses: 3
    Dernier message: 11/10/2005, 23h27
  5. Erreur en utilisation non-initialiser motif
    Par moniphal dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2005, 13h03

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