Question

Lors de la conversion de RVB en niveaux de gris, il est dit que les poids spécifiques à des canaux R, G et B doivent être appliquées. Ces poids sont:. 0,2989, 0,5870, 0,1140

On dit que la raison de ce qui est différent de la perception humaine / sensibilité envers ces trois couleurs. Parfois, il est également dit que ce sont les valeurs utilisées pour calculer le signal NTSC.

Cependant, je n'ai pas trouvé une bonne référence pour cela sur le web. Quelle est la source de ces valeurs?

Voir aussi ces questions précédentes: et here.

Était-ce utile?

La solution

Les chiffres spécifiques à la question sont de 601 CCRRA (voir le lien Wikipédia ci-dessous).

Si vous convertissez RVB -> Niveaux de gris avec des chiffres légèrement différents / méthodes différentes, vous ne verrez pas beaucoup de différence du tout sur un écran d'ordinateur normal dans des conditions d'éclairage normales - essayer

.

Voici quelques liens sur la couleur en général:

Luma

site exceptionnel de Bruce Lindbloom

chapitre 4 sur la couleur dans le livre de Colin Ware, "Visualisation de l'information", isbn 1-55860-819-2; ce long lien vers Ware books.google. com peut ou peut ne pas

cambridgeincolor : excellent, bien écrit « Tutoriels sur la façon d'acquérir, interpréter et traiter des photos numériques en utilisant une approche visuelle orientée qui met l'accent sur la procédure concept de "

Si vous rencontriez en RGB « linéaire » vs « non linéaire », voici une partie d'une vieille note à moi-même à ce sujet. Répéter, en pratique, vous ne verrez pas beaucoup de différence.


RGB -> ^ gamma -> Y -> L *

Dans la science de la couleur, les valeurs RVB commun, comme en html rgb (10%, 20%, 30%), sont appelés « non linéaire » ou gamma corrigé . Les valeurs « linéaire » sont définis comme étant

Rlin = R^gamma,  Glin = G^gamma,  Blin = B^gamma

où gamma est de 2,2 pour de nombreux PC. L'habitude R G B sont parfois écrit sous la forme R 'G' B '(R' = rlin ^ (1 / gamma)) (Puristes langue clic) mais ici je vais tomber le ».

luminosité sur un écran à tube cathodique est proportionnelle à RGBlin = RGB ^ gamma, si 50% de gris sur un écran cathodique est assez sombre: 0,5 ^ 2,2 = 22% de la luminosité maximale. (Écrans LCD sont plus complexes; En outre, certaines cartes graphiques compenser gamma).

Pour la mesure de légèreté appelée L* de RGB, première fracture R G B par 255, et calculer

Y = .2126 * R^gamma + .7152 * G^gamma + .0722 * B^gamma

Ceci est Y dans l'espace couleur XYZ; il est une mesure de la couleur « luminance ». (Les formules réelles ne sont pas exactement x ^ gamma, mais proche; coller avec x ^ gamma pour une première passe.)

Enfin,

L* = 116 * Y ^ 1/3 - 16
     

« ... aspire à l'uniformité de perception [et] correspond étroitement la perception humaine de légèreté. » -   

Autres conseils

Je trouve que cette publication référencée dans une réponse à une précédente question similaire. Il est très utile:

http://cadik.posvete.cz/color_to_gray_evaluation/

Il montre « tonnes » de différentes méthodes pour générer des images en niveaux de gris avec des résultats différents!

Heres code dans c pour convertir rgb en niveaux de gris. La vraie pondération utilisée pour rgb à la conversion en niveaux de gris est 0,3r + 0,6G + 0.11B. ces poids ne coûtent pas tout à fait critique afin que vous puissiez jouer avec eux. Je les ai fait 0.25R + 0.5G + 0.25b. Elle produit une image légèrement plus foncée.

NOTE: Le code suivant suppose format de pixel xRGB 32bit

unsigned int *pntrBWImage=(unsigned int*)..data pointer..;  //assumes 4*width*height bytes with 32 bits i.e. 4 bytes per pixel
unsigned int fourBytes;
        unsigned char r,g,b;
        for (int index=0;index<width*height;index++)
        {
            fourBytes=pntrBWImage[index];//caches 4 bytes at a time
            r=(fourBytes>>16);
            g=(fourBytes>>8);
            b=fourBytes;

            I_Out[index] = (r >>2)+ (g>>1) + (b>>2); //This runs in 0.00065s on my pc and produces slightly darker results
            //I_Out[index]=((unsigned int)(r+g+b))/3;     //This runs in 0.0011s on my pc and produces a pure average
        }

Consultez la couleur FAQ informations à ce sujet. Ces valeurs proviennent de la normalisation des valeurs RVB que nous utilisons dans nos écrans. En fait, selon la FAQ couleur, les valeurs que vous utilisez sont obsolètes, car ils sont les valeurs utilisées pour la norme NTSC d'origine et non moniteurs modernes.

Voici un document sur la façon dont ces chiffres (ou similaires) ont été dérivées:

https://web.archive.org/web/20160303201512/http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf

  

Quelle est la source de ces valeurs?

La « source » des coefficients affichés sont les spécifications NTSC qui peuvent être vus dans REC601 et Caractéristiques de télévision .

La « source ultime » sont la CIE vers 1931 des expériences sur la perception humaine des couleurs. La réponse spectrale de la vision humaine n'est pas uniforme. Des expériences ont conduit à la pondération des valeurs de tristimulus basées sur la perception. Notre L, M, et des cônes S 1 sont sensibles aux longueurs d'onde de la lumière nous identifions comme « rouge », « vert » et « Blue » (respectivement), ce qui est l'endroit où les couleurs primaires tristimulus sont dérivées . 2

La lumière linéaire 3 coefficients spectraux pour sRGB (et Rec709) sont les suivants:

R lin * 0,2126 + G lin * 0,7152 + B lin * 0,0722 = Y

sont spécifiques aux sRGB et REC709, qui sont colorimétriques destinés à représenter les écrans d'ordinateur (sRVB) ou moniteurs HDTV (REC709) et sont détaillés dans les documents de l'UIT pour Rec709 et aussi < a href = "https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2380-2-2018-PDF-E.pdf" rel = "nofollow noreferrer"> BT 0,2380 à 2 (10/2018)

FOOTNOTES (1) Cônes sont les cellules détection couleur de la rétine de l'œil.
(2) Cependant, les longueurs d'onde des composantes trichromatiques choisies ne sont pas à la « crête » de chaque type de cône - valeurs tristimulus à la place sont choisis de telle sorte qu'ils stimulent le cône particulier de type sensiblement plus que l'autre, à savoir la séparation de stimulus
. (3) Vous devez linéariser vos valeurs sRVB avant d'appliquer les coefficients. Je discuterai cela dans une autre réponse ici.

Ces valeurs varient d'une personne à personne, en particulier pour les personnes qui sont daltoniens.

est tout cette perception, humaine vraiment nécessaire et CRT vs LCD varie, mais l'intensité de la R G B n'a pas, pourquoi pas L = (R + G + B)/3 et définir le nouveau RVB à L, L, L?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top