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 :

Integers can only be combined with integers of the same class


Sujet :

Images

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut Integers can only be combined with integers of the same class
    Salut,
    J'ai un problème au niveau de mon code matlab que j'ai pas pu le comprendre:
    Voici la partie du code que je l'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    c = [Xe1 Xe2 Xe4 Xe3];
    r = [Ye1 Ye2 Ye4 Ye3];
    ImageReel=imread('1.jpg');
    RI = roipoly(ImageReel,c,r);
    im2=ImageReel.*RI;


    Il me donne cette erreur la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ??? Error using ==> times
    Integers can only be combined with integers of the same class, or scalar doubles.
     
    Error in ==> ProcessusTotal at 559
    im2=ImageReel.*RI;

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    J'ai essayé de convertir ImageReel en type double et RI aussi en type double.
    Sachant que le type original de ImageReel est uint8 et le type original de RI est logical

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ImageReel=double(ImageReel);
    RI = roipoly(ImageReel,c,r);% création d'un masque binaire sur la RI 
    RI = double(RI);
    im2=ImageReel.*RI;
    mais il me lance cette fois cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ??? Error using ==> times
    Matrix dimensions must agree.
     
    Error in ==> ProcessusTotal at 560
    im2=ImageReel.*RI;
    j'ai pas compris cet erreur surtout que cela veut dire times et comment je peut le résoudre.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Que renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    size(ImageReel)
    size(RI)

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    il me renvoie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    size(ImageReel)
    size(RI)
     
    ans =
     
       384   512     3
     
     
    ans =
     
       384   512

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Il faut donc appliquer le masque composante par composante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ImageReel(:,:,1) = ImageReel(:,:,1).*RI;
    ImageReel(:,:,2) = ImageReel(:,:,2).*RI;
    ImageReel(:,:,3) = ImageReel(:,:,3).*RI;

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    merci Dut de me répondre,

    avec ce que tu m'a codé je trouve un problème: L'orsque je visualise ImageReel après la multiplication de chaque composante, il me donne la même image que celle du masque RI pourtant l'orsque j'affiche les valeurs des pixels de ImageReel il a les valeurs 0 de celle de RI et les autre de celle de ImageReel!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ImageReel=double(ImageReel);
    RI = roipoly(ImageReel,c,r);% création d'un masque binaire sur la RI 
    RI = double(RI);
    ImageReel(:,:,1) = ImageReel(:,:,1).*RI;
    ImageReel(:,:,2) = ImageReel(:,:,2).*RI;
    ImageReel(:,:,3) = ImageReel(:,:,3).*RI;
     
    figure,imshow(ImageReel),title('Région d Intérêt Extraite');

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par slaima15 Voir le message
    L'orsque je visualise ImageReel après la multiplication de chaque composante, il me donne la même image que celle du masque RI pourtant l'orsque j'affiche les valeurs des pixels de ImageReel il a les valeurs 0 de celle de RI et les autre de celle de ImageReel!!!!
    Oui c'est bien le but de ce code: extraire la partie sélectionnée par le masque.
    Que voulais-tu obtenir?

    PS: ce code peut aussi s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RI = roipoly(ImageReel,c,r);% création d'un masque binaire sur la RI 
    ImageReel(~cat(3,RI,RI,RI)) = 0;

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    Merci Winjerome pour me répondre, mais ton code aussi fournis le même résultat que celle de Dut, donc mon problème n'est pas résolu.

    Pour vous expliquer encore voici le résultat désiré obtenir pour le masque RI et la région réelle masquer:
    Nom : 1.JPG
Affichages : 236
Taille : 27,9 Ko
    par contre le résultat que j'obtient avec ce code est celle :
    Nom : 2.JPG
Affichages : 202
Taille : 28,1 Ko

    l'image réel masquer c'est celle de RI !!! ce qui m'étonne énormément!!!!

    par contre en affichant les valeurs de la matrice de l'image réel ce n'est pas une image binaire!!!! la valeur 0 c'est la place du noir et d'autre valeur pour la valeur réel!!!

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oui c'est normal que cela ait le même résultat, c'est comme je l'ai précisé une autre écriture du même code.
    En ce qui concerne ton problème, je suis au regret de te dire qu'il marche très bien chez moi.
    Pour preuve cet exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    I = imread('gantrycrane.png');
    c = [12 377 377 209 180 12];
    r = [29 29 40 247 247 40];
    RI = roipoly(I,c,r);
    subplot(211),imshow(I)
    I(~cat(3,RI,RI,RI)) = 0;
    subplot(212),imshow(I)
    [EDIT] Ton erreur provient de ta conversion en double:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ImageReel = double(ImageReel)/255;
    ImageReel = im2double(ImageReel); % Avec l'Image Processing Toolbox
    Pour un affichage correct, les valeurs (en double) doivent être entre 0 et 1.

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    Merci Winjerome comme vous m'avez dit l'erreur provient du conversion en double et je trouve ce que je veux.

    maintenant j'ai un autre problème: j'essaye de redimensionner l'image pour quelle garde seulement la région d'intérêt en utilisant ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    idx = any(im2,1);
    im2 = im2(:,idx);
    idx = any(im2,2);
    im2 = im2(idx,:);
    figure,imshow(im2),title('Région d Intérêt Extraite1');
    mais voici ce que j'obtient comme résultat:
    Nom : 3.JPG
Affichages : 200
Taille : 20,9 Ko
    pouvez vous m'aider à corriger mon code pour que je puisse redimensionner l'image pour quelle garde seulement la région d'intérêt ??

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    J'arrive à résoudre un petit peu le problème en codant ceci :
    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
     
    imK=im2;
    A=im2(:,:,1);
    idx = any(A,1);
    imZ = imK(:,idx,1);
     
    B=im2(:,:,2);
    idx = any(B,1);
    imZ = imK(:,idx,2);
     
    C=im2(:,:,3);
    idx = any(C,1)
    imZ = imK(:,idx,3);
     
    idx = any(A,2);
    imZ = imK(idx,:,1);
     
    idx = any(B,2);
    imZ = imK(idx,:,2);
     
    idx = any(C,2);
    imZ = imK(idx,:,3);
     
     
    figure,imshow(imZ),title('Région d Intérêt Extraite1');
    mais voici le résultat qu'il m'affiche ce code
    Nom : 1.JPG
Affichages : 212
Taille : 15,3 Ko

    Donc d'une part il ne me redimentionne pas l'image pour quelle garde seulement la région d'intérêt et d'autre part il m'affiche une région en niveau de gris pourtant mon région d'intérêt c'est en couleur!!!
    Pouvez-vous m'aidez à résoudre ce problème??

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Tu peux t'inspirer de cette discussion : Délimiter un objet à l'aide d'un rectangle

    Ce qui donne avec une image en couleurs vraies :
    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
    X = zeros(50,50,3);
    X(35:40,25:35,1) = rand(6,11);
    X(35:40,25:35,2) = rand(6,11);
    X(35:40,25:35,3) = rand(6,11);
     
    figure
    colormap gray
    imagesc(X)
    axis image off
     
    x = find(any(sum(X,3)));
    y = find(any(sum(X,3),2));
     
    w = ;
    h = y(end)-y(1);
     
    r = [x(1) y(1) w h] + .5*[-1 -1 2 2];
     
    rectangle('position',r,'edgecolor','g','linewidth',3)
    Pour ne conserver qu la partie utile de l'image, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = X(x(1):x(end),y(1):y(end),:)

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Une alternative, étant donné que tu connais les coordonnées du polygone de ta roi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imZ = im2(min(r):max(r),min(c):max(c),:);
    en supposant que les valeurs de r et c soient entières.

  15. #15
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    Merci infiniment megalan et c'est exactement ce que je cherche

    maintenant, j'ai un autre problème:
    Tout d'abord, j'essaye de calculer l'angle d'inclinaison pour faire la rotation de imZ et j'arrive à faire ceci en utilisant le code ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Xc=[Xe1,Xe2];
    Yc=[Ye1,Ye2];
    DistX=abs(Xe1-Xe2);
    DistY=abs(Ye1-Ye2);
    alpha=atan(DistY/DistX)
    alpha2=180*alpha/pi      %Angle en degré = 180 * (angle en radian) / pi 
    %------test sur le sens d'inclinaison pour faire la rotation
    if Ye1-Ye2>0
    im3 = imrotate(imZ,-alpha2);
    else
    im3 = imrotate(imZ,alpha2);
    end  
    figure,imshow(im3),title('Région d Intérêt Extraite2');
    Voici le résultat donné après ce code:
    Nom : 2.JPG
Affichages : 218
Taille : 15,5 Ko
    Mon problème maintenant comment j'arrive à prendre la partie ROI sans les bordure noir ??

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Citation Envoyé par slaima15 Voir le message
    Mon problème maintenant comment j'arrive à prendre la partie ROI sans les bordure noir ??
    Et si tu commençais par essayer de comprendre les codes que je t'ai fourni...

  17. #17
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    J'ai essayé d'appliquer ce code la d'après ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    x = find(any(sum(im3,3)));
    y = find(any(sum(im3,3),2));
    X = im3(x(1):x(end),y(1):y(end),:);
    figure,imshow(X),title('Région d Intérêt Extraite3');
    il me fournit ce que je veux faire mais j'arrive pas à comprendre le code: ce que represente x et y??? pouvez vous m'expliquez ???

  18. #18
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    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 313
    Points : 52 939
    Points
    52 939
    Par défaut
    [Edit Dut] Il faut inverser les correspondances (ligne, colonne) <=> (y,x) dans les phrases ci-dessous

    La variable x contient les indices des lignes sur lesquels la valeur d'au moins un pixel est différente de 0. Les lignes que tu souhaites supprimées sont composées de pixels dont la valeur vaut 0. La première valeur de x te donne donc la première ligne à conserver, la dernière valeur de x te donne la dernière ligne à conserver.

    La variable y est utilisée de la même façon mais pour les colonnes.

  19. #19
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 343
    Points : 44
    Points
    44
    Par défaut
    Ok Dut mais que représente exactement

  20. #20
    Invité
    Invité(e)
    Par défaut
    Depuis le temps, tu devrais connaître la commande DOC

Discussions similaires

  1. [PHP 5.4] array_count_values : Can only count STRING and INTEGER values
    Par akkyshan dans le forum Langage
    Réponses: 1
    Dernier message: 31/10/2012, 12h05
  2. Réponses: 0
    Dernier message: 27/10/2010, 01h45
  3. Réponses: 1
    Dernier message: 11/05/2009, 15h36
  4. Réponses: 1
    Dernier message: 22/04/2009, 16h06
  5. Can only iterate over an array or an instance of java.lang.Iterable
    Par hardokin dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 28/08/2008, 14h05

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