D'après Image numérique (Wikipédia).
Il existe plusieurs modes de codage informatique des couleurs, le plus utilisé pour le maniement des images est l'espace colorimétrique rouge, vert, bleu (RVB) en français ou RGB
(Red Green Blue) en anglais. Cet espace est basé sur une synthèse additive des couleurs, c'est-à-dire que le mélange des trois composantes R, V, et B à leur valeur maximum donne
du blanc, à l'instar de la lumière. Le mélange de ces trois couleurs à des proportions diverses permet de reproduire à l'écran une part importante du spectre visible, sans avoir à spécifier
une multitude de fréquences lumineuses.
Voir applet RGB dans cette page.
Exemple de tableau numpy issu d'un fichier image avec un codage R, G, B, Alpha (bien noter le sens des axes) :
A chaque pixel de l'image correspond un tuple de valeurs (r,g,b,a).
Il existe d'autres modes de représentation des couleurs :
L'appellation « couleurs vraies » est trompeuse car le monde numérique (discrétisé) ne peut pas traduire un nombre infini de couleurs.
Le codage de la couleur est réalisé sur trois octets (24 bits), chaque octet représentant la valeur d'une composante couleur par un entier de 0 à 255.
Ces trois valeurs codent généralement la couleur dans l'espace RVB.
Le nombre de couleurs différentes pouvant être ainsi représenté est de 256 × 256 × 256 possibilités, soit environ 16,7 millions de couleurs.
Comme la différence de nuance entre deux couleurs très proches mais différentes dans ce mode de représentation est quasiment imperceptible pour l'œil humain, on considère commodément que ce système
permet une restitution exacte des couleurs, c'est pourquoi on parle de « couleurs vraies ».
Les images bitmap basées sur cette représentation peuvent rapidement occuper un espace de stockage considérable, chaque pixel nécessitant trois octets pour coder sa couleur.
Cf. applet dans cette page.
Rappel : 1 octet = 8 bits et correspond donc à 28 = 256 valeurs (de 0 à 255).
Pour réduire la place occupée par l'information de couleur, on utilise une palette de couleurs « attachée » à l'image. On parle alors de couleurs indexées : la valeur associée à
un pixel ne véhicule plus la couleur effective du pixel, mais renvoie à l'entrée correspondant à cette valeur dans une table (ou palette) de couleurs appelée look-up table ou LUT en anglais,
dans laquelle on dispose de la représentation complète de la couleur considérée.
Selon le nombre de couleurs présentes dans l'image, on peut ainsi gagner une place non négligeable : on considère en pratique que 256 couleurs parmi les 16,7 millions sont
suffisantes. Pour les coder, on aura donc une palette occupant 3 × 256 octets, et les pixels de l'image seront associés à des index codés sur un octet (puisqu'on ne conserve que 256 couleurs).
L'occupation d'une telle image est donc de 1 octet par pixel plus la LUT (au lieu de 3 octets par pixel), ce qui représente un peu plus du tiers de la place occupée par une image en couleurs 24 bits
(plus l'image contient de pixels, plus le gain de place est important, la limite étant le tiers de la place occupée par l'image en couleurs vraies).
Dans le cas des images en couleurs indexées, il est possible de spécifier que les pixels utilisant une des couleurs de la palette ne soient pas affichés lors de la lecture
des données de l'image. Cette propriété de transparence est très utilisée (et utile) pour les images des pages web, afin que la couleur de fond de l'image n'empêche pas la visualisation de
l'arrière-plan de la page.
On ne code ici plus que le niveau de l'intensité lumineuse, généralement sur un octet (256 valeurs).
Par convention, la valeur zéro représente le noir (intensité lumineuse nulle) et la valeur 255 le blanc (intensité lumineuse maximale).
Voir échelle de gris dans cette page.
On peut attribuer à une image un canal supplémentaire, appelé canal alpha, qui définit le degré de transparence de l'image.
Il s'agit d'un canal similaire aux canaux traditionnels définissant les composantes de couleur, codé sur un nombre fixe de bits par pixel (en général 8 ou 16).
On échelonne ainsi linéairement la translucidité d'un pixel, de l'opacité complète (valeur 255) à la transparence (valeur 0).
R | G | B | Couleur |
---|---|---|---|
0 | 0 | 0 | noir |
255 | 0 | 0 | rouge |
0 | 255 | 0 | vert |
0 | 0 | 255 | bleu |
128 | 128 | 128 | gris |
255 | 255 | 255 | blanc |
RED
GREEN
BLUE
Alpha
0 | 32 | 64 | 96 | 128 | 160 | 192 | 224 | 255 |
En python, les couleurs peuvent être spécifiées dans le codage RGB ou RGBA (tuple d'entiers entre 0 et 255 ou de flottants entre 0 et 1.0), en hexadécimal (chaînes de la forme '#0f0f0f80'), par des abbréviations ('b' pour 'blue, 'k' pour 'black'...), par des noms...
Exemples
Notions importantes : codage RGB, image 24 bits vs image 8 bits, niveaux de gris, canal ou couche alpha.