Bac à sable Chaînes et listes Fonctions Numpy Piles Récursivité Tris

Représentation des couleurs

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) :

matrice

A chaque pixel de l'image correspond un tuple de valeurs (r,g,b,a).

Autres modes : CMYK, HSL

Il existe d'autres modes de représentation des couleurs :

  • cyan, magenta, jaune, noir (CMJN ou CMYK) utilisé principalement pour l'impression, et basé sur une synthèse soustractive des couleurs ;
  • teinte, saturation, luminance ou valeur (TSL ou HSV), en anglais, Hue, Saturation, Lightness (/HSL ou HSV), où la couleur est codée suivant le cercle des couleurs.

Exemples : cf. « Color Values » sur le site w3schools.com

Image 24 bits (« couleurs vraies »)

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).

Image 8 bits (256 couleurs)

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.

Image en niveaux de gris

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.

Image avec gestion de la transparence (canal alpha)

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).

Codage des couleurs

Codage 24 bits

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

128

GREEN

128

BLUE

128

Alpha

255

 

 

Codage en niveaux de gris

0 32 64 96 128 160 192 224 255

 

Commentaires

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...

Couleurs matplotlib

Exemples


Fichiers image

Notions importantes : codage RGB, image 24 bits vs image 8 bits, niveaux de gris, canal ou couche alpha.

❮ ❯