Conversion mathématique sRGB et AdobeRGB
c'est une question très claire, mais j'ai fait beaucoup de recherches et je n'ai pas trouvé de réponse. StackOverflow question as ou sont à propos de la conversion jpeg. est d'environ python construire-dans la bibliothèque.
alors, comment convertir sRGB en AdobeRGB et vice versa??? Je veux dire une fonction mathématique, qui convertit 3 bytes en 3 bytes. Pas de jpges, et ainsi de suite. mathématique fonction pour convertir les couleurs à l'aide de stylo et papier.
Oui, photoshop le fait en fait et il y a quelques étranges calculatrices en ligne, qui montrent un autre résultat.
Pourquoi ne puis-je pas trouver une formule simple dans google?
je me suis dit que je ne savais pas quelque chose et qu'il n'y avait pas de réponse directe à ma question.
je serais très reconnaissant si quelqu'un peut décrire, ce qui se passe ou donner formule.
UPDATE
Grand tableau de résultats pour entier rgb seront également de la réponse correcte.
2 réponses
voici le code Python pour implémenter les formules. Comme indiqué dans les commentaires, vous passez d'un espace de couleur À XYZ (normalisé) puis De XYZ au nouvel espace de couleur. Je ne suis pas satisfait à 100% de la précision de ces fonctions, mais ça devrait vous mettre sur la bonne voie. Comme je viens de monter avec des raffinements je vais modifier dans la réponse.
def linear_sRGB(c):
if c <= 0.04045:
return c / 12.92
else:
return pow((c + 0.055) / 1.055, 2.4)
def sRGB_to_XYZn(r, g, b):
Rlin = linear_sRGB(r / 255.0)
Glin = linear_sRGB(g / 255.0)
Blin = linear_sRGB(b / 255.0)
Xn = Rlin * 0.4124 + Glin * 0.3576 + Blin * 0.1805
Yn = Rlin * 0.2126 + Glin * 0.7152 + Blin * 0.0722
Zn = Rlin * 0.0193 + Glin * 0.1192 + Blin * 0.9505
return Xn, Yn, Zn
def gamma_sRGB(c):
if c <= 0.0031308:
return 12.92 * c
else:
return 1.055 * pow(c, 1/2.4) - 0.055
def XYZn_to_sRGB(Xn, Yn, Zn):
Rlin = Xn * 3.2406255 + Yn *-1.5372080 + Zn *-0.4986286
Glin = Xn *-0.9689307 + Yn * 1.8757561 + Zn * 0.0415175
Blin = Xn * 0.0557101 + Yn *-0.2040211 + Zn * 1.0569959
R = round(255 * gamma_sRGB(Rlin))
G = round(255 * gamma_sRGB(Glin))
B = round(255 * gamma_sRGB(Blin))
return R, G, B
def linear_AdobeRGB(c):
if c <= 0.0:
return 0.0
return pow(c, 2.19921875)
def AdobeRGB_to_XYZn(R, G, B):
Rlin = linear_AdobeRGB(R / 255.0)
Glin = linear_AdobeRGB(G / 255.0)
Blin = linear_AdobeRGB(B / 255.0)
Xn = Rlin * 0.57667 + Glin * 0.18556 + Blin * 0.18823
Yn = Rlin * 0.29734 + Glin * 0.62736 + Blin * 0.07529
Zn = Rlin * 0.02703 + Glin * 0.07069 + Blin * 0.99134
return Xn, Yn, Zn
def gamma_AdobeRGB(c):
if c <= 0.0:
return 0.0
return pow(c, 1/2.19921875)
def XYZn_to_AdobeRGB(Xn, Yn, Zn):
Rlin = Xn * 2.04159 + Yn *-0.56501 + Zn *-0.34473
Glin = Xn *-0.96924 + Yn * 1.87597 + Zn * 0.04156
Blin = Xn * 0.01344 + Yn *-0.11836 + Zn * 1.01517
R = round(255 * gamma_AdobeRGB(Rlin))
G = round(255 * gamma_AdobeRGB(Glin))
B = round(255 * gamma_AdobeRGB(Blin))
return R, G, B
c'est un peu compliqué, alors veuillez lire les fiches techniques si vous avez besoin de formules.
sRGB (PDF)
https://www.w3.org/Graphics/Color/srgb
Adobe RGB (Oct.Projet de loi 122004) (PDF)
http://www.color.org/adobergb.pdf
Adobe RGB (1998) (PDF)
https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf
Wiki est aussi bon.
sRGB
https://en.wikipedia.org/wiki/SRGB_color_space
Adobe RVB
https://en.wikipedia.org/wiki/Adobe_RGB_color_space
pour tester, vérifiez les paramètres de conversion des couleurs.
La conversion spécifique de logiciel peut se produire.
(principalement Si hors de portée, mais dans certains cas, les valeurs non hors de portée sont également affectées)
ex.
Des couleurs de Photoshop settings
http://help.adobe.com/en_US/creativesuite/cs/using/WS6A727430-9717-42df-B578-C0AC705C54F0.html#WS6078C298-CB20-4dc8-ACD4-D344110AA026
Sur les intentions de rendu
Perceptuels
Vise à préserver la relation visuelle entre les couleurs ... même si les valeurs de couleur elles-mêmes peuvent changer.
connexes readings
http://www.color-management-guide.com/conversion-mode-perceptual-relative-colorimetric-rendering-intent.html
L'utilisation de XYZ est plus flexible en ce qui concerne la conversion à d'autres espaces de couleur que la conversion directe (entre sRGB et Adobe RGB).
espace de couleurs RVB
https://en.wikipedia.org/wiki/RGB_color_space
Conversion entre sRGB et XYZ contient un fonctionnement non linéaire.
Ainsi, la conversion directe entre sRGB et Adobe RGB est difficile.
voir la spécification de la section transformation dans le wiki de sRGB. (La partie de la transformation inverse.)
à partir de la fiche technique
Si R, G, B sont inférieurs ou égaux à 0,04045
RL = R / 12.92
...
Si R, G, B sont supérieurs à 0,04045
RL = ((R + 0.055) / 1.055)^2.4
...
RL pour linéaire (XYZ(D65)), R pour sRGB dans cette formule.
Le vert et le bleu ont aussi les mêmes formules.
N'empêche pas la conversion directe entre d'autres espaces de couleur mais,
la conversion entre Adobe RGB et XYZ contient également une opération non linéaire.
(Arrondi à l'int.)
plus précisément, C'est Adobe RGB(en valeurs float) à Adobe RGB(en valeurs int) conversion.
NB: Les points blancs prévus pour eux sont différents.
(il but sont différents. sRGB pour affichage, Adobe RGB pour photos.)
Et la matrice de conversion dans les feuilles de spécifications sont pour D65 (sRGB) et D50 ou D65(Adobe RGB).
nous devrions penser à trois choses.
Valeur RVB elle-même, gamme de valeur (et exactitude de la couleur) de l'affichage, et l'environnement de visualisation.
Ex.
1.Conversion matrice (et autres formules): valeur RVB
2.Display point blanc et noir: plage de valeurs de l'affichage
3.Éclairage ambiant chromaticité: environnement de visualisation
seulement 1 (Matrice et formules) a des effets dans la conversion des valeurs,
mais 2 et 3 sont aussi importants parce qu'ils décident comment nous pouvons voir les valeurs RVB.
NB: avec le profil ICC, si 2(display settings) est stocké, il compte sur.
si la plage d'affichage est étroite par rapport à la valeur RVB peut représenter, ils seront écrêtés (lors de l'affichage).
Si la portée n'est pas appropriée, blanc ou noir peut être vu comme gris, etc.
si la chromaticité de l'éclairage ambiant est différente de celle de la matrice de conversion et que les formules sont prévues, nous verrons des couleurs différentes.
matrice de Conversion
(Ceci est important, car ayant des effets sur les valeurs converties RVB.)
à partir de sRGB (la matrice de conversion est pour D65.)
- Conversion from XYZ ( D65) à des valeurs sRGB linéaires
dans la fiche technique Adobe RGB(1998), il existe deux types de matrices (et de formules) de conversion.
4.3.1~ (sans ICC): D65
4.3.6~ (avec ICC): D50
à partir d'Adobe RGB(1998)
(pour les images avec profil ICC etc.)
4.3.6 encodage ICC PCS Version 2 les valeurs en 24 bits Adobe RGB (1998)
4.3.6.1 conversion des valeurs XYZ En tristimulus RVB
REMARQUE La matrice est dérivé de la couleur de l'espace de coordonnées de la chromaticité, et une adaptation chromatique à la Norme CIE Illuminant D50les valeurs de tristimulus XYZ 0.0000, 0.0000, 0.0000 dans l'espace de connexion de profil (XYZ PCS v2) doivent correspond à l'affichage de référence point noir. Les valeurs du tristimulus XYZ 0.9642, 1.000, 0,8249 doit correspondre au point d'affichage blanc de référence.
NB: attention blanc n'est pas (1.0, 1.0, 1.0).
à partir d'Adobe RGB(1998)
(pour les images sans profil ICC etc.)
Cela peut être bon pour calc(et point blanc pour sRGB est pré-connu (et il est D65)).
4.3.1 L'Adobe RGB(1998) la Couleur de l'Espace Et de la Couleur de Codage de l'Image
espace de Couleurs chromaticities et de luminance
Rouge x=0.6400, y = 0.3300
Vert x=0.2100, y = 0.7100
Bleu x=0,1500, y=0,0600
Blanc x=0,3127, y= 0,3290
Le point blanc de l'espace de couleur doit être égal au point blanc de l'affichage de référence.
L'espace de couleur noir point est égale à la référence d'affichage de point noir.
NB: Blanc (x=0,3127, y=0,3290) correspond à D65.
(Voir la section 4.2.1 de Référence Affichez Point Blanc.)
éclairage ambiant chromaticité
(Ne pas confondre avec le point d'affichage blanc. Cela a des effets sur l'exactitude de la couleur, nous pouvons voir.)
à partir d'Adobe RGB (projet)
3.1.4 Conditions D'Observation De Référence
4. Point blanc ambiant de référence x = 0,3457, y= 0,3585 (D50)
à partir d'Adobe RGB (1998)
Annexe B.
Éclairement Ambiant Chromaticité: ... L'éclairage ambiant la chromaticité peut être de D65 à D50 ...
Affichage de point blanc
(Ne pas confondre avec la chromaticité de l'éclairage ambiant. C'est sur la plage d'affichage peuvent apparaître.)
à partir de sRGB
affichage de référence point blanc chromaticité: x = 0,3127, y= 0,3290, z = 0,3583 (équivalent à la chromaticité de L'Illuminant CIE D65).
à partir d'Adobe RGB (1998)
4.2.1 Affichage De Référence Point Blanc
Noter que les coordonnées chromatiques correspondent à L'Illuminant normalisé D65 de la CIE.
D'Adobe RGB (1998) (pour information.)
Annexe A. Le profil ICC Adobe RGB(1998) d'Adobe Systems est une instance D'Adobe RGB(1998).
à partir de sRGB
- adaptation chromatique et conversion aux PC XYZ ICC
exemple: si D65 est sélectionné comme blanc adapté par sRGB, le chro la transformation d'adaptation matic passera de D65 à D50, les valeurs D50 résultantes seront encodées dans la balise mediaWhitePoint
...
Cependant, si D50 était choisi comme sRGB adapté blanc, adaptation chromatique ne serait pas nécessaire
...
La norme CEI 61966-2-1 ne spécifie pas la colorimétrie du point blanc adapté de l'affichage de référence sRGB.
(NB: sRGB est défini dans la norme CEI 61966-2-1)
Cela signifie qu'il n'est pas défini quel blanc(D65 etc) est utilisé pour afficher sRGB, donc le stocker dans le profil ICC.
standard illuminant (wiki) (pour information seulement. Pas partie de cette conversion.)
https://en.wikipedia.org/wiki/Standard_illuminant