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 :

remplacer les pixels d'une certaine valeur dans une image par des pixels blancs


Sujet :

Images

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut remplacer les pixels d'une certaine valeur dans une image par des pixels blancs
    Bonjour,

    J'aimerais faire apparaitre les pixels d'une image en Blanc lorsque ceux-ci dépassent une certaine valeur (ici : 5).

    Voici le code que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (result >5)
          imagesc(x1(1,:),y1(:,1),1)=255 ;
          imagesc(x1(1,:),y1(:,1),2)=255 ;
         imagesc(x1(1,:),y1(:,1),3)=255 ;
     
      else (imagesc(x1(1,:),y1(:,1),result)) ;
    Ce code fournit un résultat identique à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     imagesc(x1(1,:),y1(:,1),result)
    .

    Lorsque les valeurs de result sont supérieures à 5, les pixels de mon image ne sont pas blancs.

    Pouvez-vous me renseigner sur ce sujet ?

    Merci bien.

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

    Si j'ai bien compris, result est ton image...
    Dans ce cas, la condition if (result >5) est vraie si TOUS les éléments de résult sont strictement supérieurs à 5.

    De plus les lignes imagesc(x1(1,:),y1(:,1),1)=255 supposent que tu te sers de la fonction MATLAB comme une variable.

    Avec l'indexage logique : result( result>5 ) = 255

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Oui, en effet.

    J'essaie de mettre la composante verte de result à 255 si result >5 , et je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagesc(x1(1,:),y1(:,1),result(:,:,1)=255);
    au lieu de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ]imagesc(x1(1,:),y1(:,1),result)=255;
    mais ça ne va pas. o_O

    Pourquoi ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    imagesc est une fonction MATLAB !
    Toute syntaxe du genre imagesc(...) = ... est à proscrire : tu crées une variable du même nom, et ne changes aucunement result.

    Je t'ai présenté une ligne, tu aurais au moins pu essayer de l'adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = size(result);
    gt5 = cat(3, false([s(1:2) 1]), result(:,:,2) > 5, false([s(1:2) 1]));
    result( gt5 ) = 255

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci pour l'aide.
    Cependant avec ou sans cette ligne, les pixels blancs n'apparaissent pas lorsque le seuil est atteint.

    Je ne comprends pas bien pourquoi on utilise la fonction cat (pour concaténer) ici ? Et false aussi ?
    Novice en matlab, il me reste bien des choses à découvrir.

    Merci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par karine12 Voir le message
    Cependant avec ou sans cette ligne, les pixels blancs n'apparaissent pas lorsque le seuil est atteint.
    code ?

    Citation Envoyé par karine12 Voir le message
    Je ne comprends pas bien pourquoi on utilise la fonction cat (pour concaténer) ici ?
    Pour concaténer les trois composantes R, G et B.
    Citation Envoyé par karine12 Voir le message
    Et false aussi ?
    Pour ne pas sélectionner les composantes rouge et bleu.

    Un exemple simplifié :
    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
    >> x  = 1:9
    
    x =
    
         1     2     3     4     5     6     7     8     9
    
    >> idx = [false(1,3) x(4:6)>=5 false(1,3)] % ou : cat(2,false(1,3) , x(4:6)>=5 , false(1,3))
    
    idx =
    
         0     0     0     0     1     1     0     0     0
    
    >> x(idx) = 255
    
    x =
    
         1     2     3     4  255    255     7     8     9
    Voir aussi Gestion des matrices > Indexage logique

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Bonsoir,

    J'ai remplacé le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = size(result);
    gt5 = cat(3, false([s(1:2) 1]), result(:,:,2) > 5, false([s(1:2) 1]));
    result( gt5 ) = 255
    par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     idx = find(result>5);
    result(idx)=NaN;
    imagesc(result);
    L'image apparaît avec les valeurs de result>5 en bleu très foncé.

    Mon objectif serait de transformer ces "NaN" en pixels blancs (chose que fait naturellement pcolor).

    Avez-vous une idée ?

    Merci.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Si tu avais bien lu mon lien, tu saurais que la fonction find est inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idx = result>5;
    result(idx)=NaN;
    Là tu mets les 3 composantes de ton image > 5 à NaN, et pas seulement la composante verte.

    Enfin si tu peux aussi jouer avec la colormap.
    Voir le tutoriel Gestion des couleurs sous MATLAB.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    J'ai lu la doc' sur la gestion des couleurs par Matlab et je n'ai pas trouvé comment remplacer les NaN ou autres valeurs (hors échelle) par un pixel blanc.

    Sinon en tapant le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s = size(result);
    gt5 = cat(3, false([s(1:2) 1]), result>5, false([s(1:2) 1]));
    result(gt5) = 255;
    Le message d'erreur suivant s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    In an assignment  A(I) = B, a matrix  A cannot be resized.
    Pouvez-vous me suggérer une piste ?

    Merci bien.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    As-tu au moins compris la différence entre les couleurs vraies (RGB) et les couleurs indexées ?

    Parce que même en relisant plusieurs fois tes messages, je n'arrive pas à comprendre dans quel cas tes images se trouvent.

    Donc de quelles données disposes-tu et sous quelles formes ?
    A quoi correspondent les variables result et imagesc de ton premier message ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    En effet, tout ceci n'est pas très clair.

    Mes images sont sous la forme de couleurs indéxées : les couleurs sont définies par l'intermédiaire d'un indice (contenu dans une table), qui fait référence à une valeur du triplet RGB. Dans mon cas il ne s'agit pas de couleurs vraies, une couleur n'étant pas définie en spécifiant les 3 valeurs RGB.

    La variable result correspond à l'intensité de mon pixel en un point donné.
    Imagesc me permet d'afficher ma variable "result" avec un nombre de ligne et colonne définie.

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    C'est effectivement plus clair.

    Y a-t-il des pixels blancs dans l'image initiale (result) ?
    Si oui, à quelle valeur d'intensité (indice dans la palette de couleur RGB) correspond cette couleur ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Non, il n'y a pas de blanc dans l'image initiale result.

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Combien y a-t-il alors de couleurs distinctes dans l'image ?
    Que renvoie ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numel(unique(result(:)))
    Combien de couleurs y a-t-il dans la palette de couleurs ?
    Que renvoie ceci ?

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numel(unique(result(:)))
    m'indique qu'il y a 16316 couleurs sur mon image.

    Le code :
    Affiche comme message d'erreur : Undefined function or variable 'palette'.

  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 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Il fallait remplacer "palette" par le nom de la variable qui contient la palette de couleur dans ton code.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    En fait est implicit avec imagesc et la palette étant défini par jet.

    J'ai 64 couleurs dans ma palette couleur.
    Je l'ai vérifié en rentrant dans mon programme colorbar(jet) puis

  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 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Ben voila... on fini par y arriver.

    Ce n'est pas réellement une image en couleurs indexées => Représentation de phénomènes physiques

    Dans ce cas, le plus simple consiste à rendre les pixels transparents plutôt qu'à leur attribuer la couleur blanche.

    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    result = round(rand(5)*10);
     
    mask = result<=5;
     
    figure
    subplot(121)
    imagesc(result)
    axis image
     
    subplot(122)
    im = imagesc(result);
    set(im,'alphadata',mask);
    axis image
    Si tu veux une autre couleur que le blanc, il suffit d'attribuer la couleur à l'objet Axes sur lequel est affichée l'image :

    Par exemple pour du jaune :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    im = imagesc(result);
    set(im,'alphadata',mask);
    set(gca,'color',[1 1 0])
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Points : 11
    Points
    11
    Par défaut
    Super !
    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/01/2014, 13h06
  2. Réponses: 3
    Dernier message: 29/03/2011, 20h38
  3. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  4. numéroter les lignes ayant la même valeur dans une requête
    Par raiamanu dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 12/10/2007, 10h49
  5. Réponses: 11
    Dernier message: 26/04/2007, 10h40

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