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 :

Conversion d'une image rgb en hsl


Sujet :

Images

  1. #1
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut Conversion d'une image rgb en hsl
    Bonsoir à tous
    Voilà, je veux convertir une image sous Matlab en hsl sachant que mon image est un fichier *.jpg. J'ai essayé d'utiliser les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    imread('image.jpg');
    imshow(rgb2hsv('image.jpg'),'notruesize');
    Ca m'affiche une sorte de matrice en 3 niveau de gris, j'avoue que je ne comprends pas trop !

  2. #2
    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 : 52 882
    Points
    52 882
    Par défaut
    Bonjour,

    il y a plusieurs contributions sur le File Exchange (chercher "hsl")

    http://www.mathworks.com/matlabcentr...oadCategory.do
    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)

  3. #3
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    merci pour le lien il est vraiment interessant, a present je veux visualiser a parir d'une image jpg les trois matrice R G et B (sous matlab biensur), est ce possible?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Salut,
    Oui tu peux extraire les 3 composantes R G B de l'image bien évidemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    image=imread('image.jpg');
    size(i);%te renvoie 512 512 3
    R=image(:,:,1);%extrait la première composante
    G=image(:,:,2);%extrait la deuxième composante
    B=image(:,:,3);%extrait la troisième composante
     
    %les matrices R,G et B sont des matrices de 512*512
    %les valeurs dans ta matrice R,G et B sont nuance de gris
    Si t'as besoin d'une aide je suis là

    Cordialement Verboz

  5. #5
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    merci verboz c vraiment gentil, mais a ropos des matrice R G et B je croyais que les nuance serai du genre des niveau de rouge par exemple pour la matrice R. effectivement quand je visualise une de ces matrices sous matlab je vois qu'elle sont en niveau de gris.
    l'image rgb n'est elle pas la superposition de ces 3 couleurs? alors ou sont ces couleurs?

  6. #6
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Bonjour,
    la fonction imshow (par exemple) affiche l'image en niveau de gris si la matrice est en 2D.
    pour afficher les nuance des 3 couleurs, je te propose ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    x=imread('.....');
    r=x; g=x; b=x;
    r(:,:,[2 3])=0;
    g(:,:,[1 3])=0;
    b(:,:,[1 2])=0;
    subplot(2,2,1); imshow(r);
    subplot(2,2,2); imshow(g);
    subplot(2,2,[3 4]); imshow(b);
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Salut,
    Bein c'est comme il a dis rostomus que je remercie bcp.
    Je t'explique le principe, dans une image couleur, on représente une case dans un repère a trois axe:
    -Axe du Rouge(Représenté par la première matrice)
    -Axe du Vert(Représenté par la deuxième matrice)
    -Axe du bleu(Représenté par la troisième matrice)

    Bein comme le montre le code ci dessus, pour avoir l'image nuance du rouge, on annule les deux autres composantes(2ème et 3ème), ainsi que pour une image nuance de Vert, on annule la première et la 3ème et celle nuance du bleu, on annule les 2 premières composantes, pour que lorsqu'on fait une projection pour déterminer la couleur du pixel, on trouve qu'il y'a deux composantes qui sont nulle donc on aura la nuance de la matrice non null.
    Pour que tu comprenne mieux, je t'ai fait une petite modif du code de rostomus:
    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
    x=imread('ton_image.jpg');
    r=x; g=x; b=x;
    r(:,:,[2 3])=0;
    g(:,:,[1 3])=0;
    b(:,:,[1 2])=0;
     
    %essaye cs 3 lignes  pour les 3 matrices r,g et b
    max(max(r(:,:,2))) %=0 
    max(max(r(:,:,3))) %=0 aussi
    max(max(r(:,:,1)));%n'est pas nulle
     
     
    subplot(2,2,1); imshow(r);
    subplot(2,2,2); imshow(g);
    subplot(2,2,[3 4]); imshow(b);
    Si vous n'avez pas compris je peux encore t'expliquer.
    Cordialement Verboz

  8. #8
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    effectivement j'ai fait l'essai sous matlab est les resultats sont identique, ca m'aide bcp a comprendre ,mai revenons a mon probleme initial de decomposition de l'image en trois matrice rvb , je ve faire l'opération inverse c'est a dire les rassembler pour obtenir mon image d'origine, j'ai essayé de faire la moyenne des trois matrices mai en faite l'image n'est pa identique a l'originale. j'ai aussi trouvé une formule 0.299 * R + 0.587 * V + 0.114 * B. mai je sais pa trop si elle est adequate pour ce cas, en tout cas je l'ai essayé mais pareil y a une difference avec l'originale.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Salut,
    Bein t'as qu'à les remettre dans une matrice 512x512x3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    R=image(:,:,1);
    G=image(:,:,2);
    B=image(:,:,3);
     
    original(:,:,1)=R;
    original(:,:,2)=G;
    original(:,:,3)=B;
    imshow(originale);
    Je t'avoue que je ne connais pas cette formule 0.299 * R + 0.587 * V + 0.114 * B mais bon, mais pour convertir ton image couleur en noir et blanc tu as le choix entre la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NetB=RGB2Gray(original);
    ou tu fais la somme des trois matrices et tu dévise par 3, ça te donnera une matrice à une seule dimension (size(NetB)=512 512 1)
    et tu l'affiche par un simple imshow(..)
    Pour plus d'informations sur la fonction RGB2Gray tappe sous matlab:
    help RGB2Gray
    ou regarde tout simplement son code que je vais jetter un coup d'oeil la dessus d'ailleurs.
    J'espère que j'ai répondu à ta question.

    Cordialement Verboz

  10. #10
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    merci pour votre aide, tré gentil!!

  11. #11
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    Voila j'ai essayé ton code Verboz et ça marche parfaitement pour les matrices r v b en niveau de gris.
    J'ai voulu appliquer le même principe avec mes matrice R V B (qui présentent les trois nuances), voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    image=imread('f.jpg');
     R=image;V=image;B=image;
     R(:,:,[2 3])=0;
     V(:,:,[1 3])=0;
     B(:,:,[1 3])=0;
     original(:,:,1)=R;
    Ca m'affiche
    "??? Subscripted assignment dimension mismatch."
    J'ai aussi essayé l'instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    res=cat(3,R,V,B);
    imshow(res,'notruesize');
    Ca m'affiche
    Warning: IMSHOW(...,'notruesize') is an obsolete syntax.
    Use IMSHOW(...,'InitialMagnification','fit') instead.
    ??? Error using ==> imuitools\private\imageDisplayParseInputs>validateCData
    Unsupported dimension
    Error in ==> imuitools\private\imageDisplayParseInputs at 205
    cdata = validateCData(cdata,image_type);..
    Je pense qu'il a un prob avec la dimension de mon image mais je trouve qu'elle est ptite 150*190px

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Bon salut,
    désolé pour ce petit retard,
    Bon apparament tu n'as pas bien saisie, je te répète:
    Une image noir et blanc, elle est discrétisé en une matrice de taille 512x512x1,
    cette matrice contient les valeurs allant de 0 à 255 (ce qui te fait 256 niveaux de gris)
    Une image couleur, elle est discrétiser en une matrice de taille 512x512x3, ce ui veut dire une matrice de 3 dimensions, tu as 3 matrices de taille 512x512 qui représentent l'image couleur. Ces trois matrices contiennent des valeurs allant de 0 à 255 qui sont les nuances de gris.
    Question: Comment une images couleur est représenté par 3 matrices de nuance de gris?
    Réponse: Bein seulement, les coordonnées de chaque point de l'image est représenté par 3 valeurs (une contenu dans la première matrice, la 2ème dans la 2ème matrice et la 3ème dans la 3ème matrice), pour déterminer la couleur en chaque point, c'est comme si on a une repère à 3 axes, l'axe X, l'axe Y et l'axe Z, le point sera représenté dans le repère ayant 3 coordonnées bien évidement (ses coodonnées sont extraites des 3 matrices). Autrement dis, pour représenter un point de l'image ( ce point "i" a les coordonnées [la_case_i_dans_la_première_matrice,la_case_i_dans_la_deuxième_matrice,la_case_i_dans_la_troisième_matrice]).
    C'est pour cela, pour représenter les 3 composantes de l'image, on annule les 2 autres composantes, pour que lors de la détermination des coordonnées du point, on trouve qu'il est nulle sur les 2 autres axes.

    Bon regarde ce que tu as écris:

    R=image;%Ce qui veut dire que R est une matrice 512 512 3 si ton image est une image couleur
    fais juste un size(R) et tu verras les dimensions.
    Ton problème ce situe là: original(:,:,1)=R;
    original(:,:,1) est une matrice de taille 512 512 1 et tu veux mettre dedans une matrice de dimension 3, c'est impossible.
    Je te conseille de trouver un cours sur le net qui t'explique le traitement d'image, la discrétisation et tout.

    Cordialement Verboz

  13. #13
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    wé j'ai saisi ce que tu m'a expliqué, mai bon t'a raison j'ai un peu de mal à imaginer comment ca fonctionne ces trucs,je te remercie bcp pour ton aide ainsi que tout ceux ki m'ont repondu

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    de rien,
    n'hésite pas surtout et sache qu'on n'est pas né des savant.
    Je suis là en cas de besoin même si tu crains que c'est débile car les questions débile permet à des personnes d'évoluer.

    Cordialement Verboz

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

Discussions similaires

  1. Conversion d'une image en mode RGB en une image en niveau de gris
    Par frisou65 dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 15/02/2012, 17h20
  2. Réponses: 0
    Dernier message: 14/04/2010, 13h40
  3. Réponses: 1
    Dernier message: 30/11/2005, 17h12
  4. conversion d'une image BMP
    Par didinel dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 11/08/2005, 17h02

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