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

Contribuez Discussion :

[Image] Transformations des espaces de couleurs


Sujet :

Contribuez

  1. #1
    Membre actif
    Inscrit en
    Mars 2008
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 209
    Points : 227
    Points
    227
    Par défaut [Image] Transformations des espaces de couleurs
    je vais vous proposer les équations mathématiques pour passer d 'un espace de couleur ( souvent le RGB ) vers un autres espace ...
    on note (Rn, Gn ,Bn) les composantes normalisées du vecteur (R,G,B) ie
    Rn = R/(R+G+B)
    Gn = G/(R+G+B)
    Bn = B/(R+G+B)
    RGB-->CMY
    l'espace CMY ou parfois CMYK ( cyan , magenta , yellow (jaune) , Black (noir)) est utile pour l'impression ...
    C= 1- Rn
    M=1-Gn
    Y=1-Bn
    ainsi on remarque que le cyan ne contient pas de rouge et le magenta ne contient pas de vert !!!

    RGB-->NTSC
    NTSC ou YIQ (Luminance , Hue , saturation )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
               |Y|   | 0.299  0.587  0.114 | | R |
               |I |= | 0.596 -0.274 -0.322| | G |
               |Q|   | 0.211 -0.523  0.312| | B |
    pour une image au niveau de gris on aura I=Q=0

    RGB -- >YCbCr
    Y ( luminance ) Cb et Cr est l'information sur la couleur
    Y= 16 + 65.481 R + 128.553 G + 24.966 B

    Cb= 128 - 37.797 R - 74.203 G + 112 B

    Cr= 128 + 112 R - 93.786 G - 18.214 B
    HSV

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    H = tan[3(G-B)/(2R-G-B)]
    V= ( R+G+B )/3
    S = 1- (min(R,G,B)/V)
    mais pour R=G=B, H n'est pas défini d'où la conversion suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    V= max (Rn,Gn,Bn)
    si V=0 alors S=0 et H =0 
    sinon  S = V - ( min (Rn,Gn,Bn) / V)
    
    pour le calcul de H
    si S=0 alors H=0 
    si V = Rn alors H = 60 * (Gn-Bn)/SV
    si V = Gn alors H = 60 *( 2+((Bn-Rn)/SV)
    Si V = Bn alors H = 60 * (4 + ((Rn-Gn)/SV)
    Si H<0 alors H= H+360

  2. #2
    Membre actif
    Inscrit en
    Mars 2008
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 209
    Points : 227
    Points
    227
    Par défaut
    Passons à un espace bien plus compliqué : CIELAB

    la transformation RGB -->CIELAB se fait en deux étapes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      X = 0.412453R + 0.357580G + 0.180423B
      Y  =  0.212G71R + 0.715160G + 0.0721G9B
      Z  =  0.019334R + 0.119193G + 0.950227B
    puis on obtient les composantes L*a*b*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    L*  =  116*f(Y/Yn) - 16
    a*  =  500[f(X/Xn) - f(Y/Yn)]
    b*  =  200[f(Y/Yn) - f(Z/Zn)] 
    où
                           f(q)     = { q^1/3 si q > 0.008856  7.787q + 16/116 sinon 
    Xn et Yn et Zn sont obtenus par la formule précédente pour R=G=B=100
    ( D65 un standard de CIE)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Je vais déterrer un sujet mais il y a une erreur pour la conversion RGB->XYZ.
    Pour le calcul de Y, la lettre "G" a pris la place du "6" deux fois, les valeurs exactes sont donc "0.212671 0.715160 0.072169".

    De plus, je trouve que l'explication de la conversion XYZ->L*a*b* n'est pas très clair.
    Je me permets donc de vous donner ma formulation :
    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
     
    Pour L*
    	Si Y/Yn > 0.008856
    		L* = 116 * (Y/Yn)1/3 - 16
    	Sinon
    		L* = 903.3 * Y/Yn
     
    Pour a* et b*
    	Si t > 0.008856
    		f(t) = t1/3
    	Sinon
    		f(t) = 7.787 * t + 16/116
     
    	a* = 500 * ( f(X/Xn) - f(Y/Yn) )
    	b* = 200 * ( f(Y/Yn) - f(Z/Zn) )
    J'ai également mis un moment pour comprendre comment calculer Xn, Yn et Zn, j'aurai mis cette information dans le premier cadre...

Discussions similaires

  1. Transformation des couleurs d'une image
    Par Seth77 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 11/12/2009, 11h53
  2. Afficher des images avec des espaces dans le nom
    Par Space Cowboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/03/2007, 07h18
  3. Réponses: 3
    Dernier message: 29/03/2006, 16h32

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