Gestion numérique des couleurs

I. Introduction

Pour bien comprendre les differences de vitesse et de qualité suivant les methodes de représentation des couleurs, il est nécessaire de connaitre les facons dont celles-ci sont codées.

On ne s'attachera ici qu'aux modes les plus courants, ceux utilisés par le mpeg 1/2/4 et les outils classiques : virtual dub, avisynth etc...

II. Quantisation et espace de couleur

La quantisation est l'opération de transformer une données analogique en donnée discrete.

Par exemple l'echantillonage d'un son issu d'un lecteur de disques vinyls en WAV-PCM.
Ou une acquisition vidéo avec une carte eponyme.

Cette opération  a deux facteurs dimensionnants :
Les deux sont importants. Une image en 1024x768 mais avec 4 bits par couleur sera moins belle qu'une image en 352x288 avec 16 bits par couleurs.

Il y a deux possibilités de coder la couleur (on oubliera les CMYK utilisé en imprimerie) :
Pourquoi ce codage bizarre ? Deux utilisations.

La premiere est liée à l'apparition de la couleur. Dans les diffusions hertzienne en noir et blanc, seul le canal luma etait disponible.
L'ajout d'un second canal avec les informations de chroma a permis un mode de diffusion compatible couleur et noir -blanc.

La seconde est lié a la facon dont sont percues les couleurs par l'oeil.
Celui ci est beaucoup plus sensible au informations de luma que de chroma. Ce fait est utilisé pour diminuer les informations de chroma (et donc la taille  /bande passante) sans degradation trop prononcée perceptible.

III RGB 16, RGB 24 et RGB32

Ces modes sont assez simple.
En mode RGB15 ou RGB16, 5 bits sont alloués par composantes. D'ou huit fois moins de nuances que dans les autres modes.
Cela provoque des effets d'a-plats visibles, par exemple dans le mode de previsualisation de virtual dub. A eviter.

Le RGB24 comporte 8 bits par composantes.

Le RGB32 comporte également 8 bits par composantes et 8 bits qui sont soit inutilisés, soit utilisés comme alpha channel.
L'alpha channel indique la transparence. L'interet du RGB32 (outre l'alpha channel) est que les données sont alignées en memoire
et donc les transferts sont plus rapides. Mais ce gain est plus que compensé par la taille plus importante.

Virtual dub travaille en RGB24, meme si il fait souvent des conversions en YUY2 en interne.

Les données RGB sont entrelacées. Les composantes RGB sont melangées. R0 G0 B0 R1 G1 B1 etc..

III YUV, YUY2 et YV12


3.1 YUV

Ce mode est similaire au RGB24, 8 bits par composante.
Le YUV peut etre présent sous forme planaire ( tous les Y, tous les U, tous les V) ou en mode entrelacé (packed)
Y0 U0 V0 Y1 U1 V1

3.2 YUY2

Ce mode est uniquement en mode entrelacé (packed)
Il tire partie de la moindre perception des composantes chroma de l'oeil.

Chaque pixel a sa prope composante Y (luma) mais partage sa chroma avec son voisin.
L'encodage est le suivant :

Y0 U0 Y1 V0 ce qui donne 2 pixels (Y0,U0,V0) (Y1,U0,V0)

Il faut donc lire 4 octets pour generer 2 pixels.
Il est aussi appelé 422, 4 informations de luma, et la moitié de chroma1 et chroma2.

C'est le mode natif de avisynth.

3.3 YV12

Ce mode est présent uniquement en planaire (planar).
Tous les Y, puis les U et enfin les V.

L'information de chroma est partagée en X et en Y.
4 pixels partagent donc la meme chroma.

On a
Y0 Y1 .........
Y0' Y1' ........

U0

V0

C'est pourquoi il est appelé YV12, il faut en moyenne 12 bits par pixel (8bits de luma + 8/4 de chroma1 + 8/4 de chroma2).

Il est egalement appéle 420, car pour 4 pixels on a 4 information de luma, et 2 de chroma1 ou 2 de chroma2.
On peut aussi dire 411

C'est le mode interne de compression mpeg1, 2 ou 4.

IV Conclusion

Les conversions sont possibles entre ces modes mais engendrent des perted et donc des defauts.
Il vaut mieux tant que possible travailler dans l'espace de couleurs de la source.

En terme de taille, voir le tableau suivant

Mode
Taille
Ratio
RGB16
x*y*2
66%
RGB24
x*y*3
100 %
RGB32
x*y*4
133 %
YUV
x*y*3
100 %
YUY2
x*y*2
66 %
YV12
x*y*1.5
50 %