Couleur indexée

En informatique, la couleur indexée est une technique permettant de gérer les couleurs des images numériques de manière limitée, afin d’économiser la mémoire de l’ordinateur et le stockage des fichiers, tout en accélérant le rafraîchissement de l’affichage et les transferts de fichiers. C’est une forme de compression de quantification vectorielle.

Lorsqu’une image est codée de cette manière, les informations de couleur ne sont pas directement transportées par les données de pixel de l’image, mais sont stockées dans une donnée distincte appelée palette: un tableau d’éléments de couleur. Chaque élément du tableau représente une couleur, indexée par sa position dans le tableau. Les entrées individuelles sont parfois appelées registres de couleurs. Les pixels de l’image ne contiennent pas la spécification complète de sa couleur, mais seulement son index dans la palette. Cette technique est parfois appelée pseudocolor ou couleur indirecte, car les couleurs sont traitées indirectement.

Peut-être que le premier dispositif qui supportait les couleurs de la palette était un tampon de trame à accès aléatoire, décrit en 1975 par Kajiya, Sutherland et Cheadle. Cela a pris en charge une palette de 256 couleurs RVB 36 bits.

Taille de la palette
La palette elle-même stocke un nombre limité de couleurs distinctes; 4, 16 ou 256 sont les cas les plus courants. Ces limites sont souvent imposées par le matériel de l’adaptateur d’affichage de l’architecture cible, donc ce n’est pas une coïncidence si ces nombres sont des puissances exactes de deux (le code binaire): 22 = 4, 24 = 16 et 28 = 256. s’intégrer dans un seul octet de 8 bits (puis un seul pixel de couleur indexée occupe également un seul octet), les index de pixels avec 16 (4 bits, un grignotage) ou moins de couleurs peuvent être regroupés en un seul octet (deux grignotements par octet, si 16 couleurs sont utilisées, ou quatre pixels de 2 bits par octet si vous utilisez 4 couleurs). Parfois, des valeurs de 1 bit (2 couleurs) peuvent être utilisées, et jusqu’à 8 pixels peuvent être regroupés en un seul octet; ces images sont considérées comme des images binaires (parfois appelées image bitmap ou image à deux niveaux) et non comme une image couleur indexée.

Si la superposition vidéo simple est prévue à travers une couleur transparente, une entrée de palette est spécifiquement réservée à cet effet, et elle est réduite en tant que couleur disponible. Certaines machines, telles que la série MSX, avaient la couleur transparente réservée par le matériel.

Les images couleur indexées avec des tailles de palette supérieures à 256 entrées sont rares. La limite pratique est d’environ 12 bits par pixel, 4096 indices différents. L’utilisation de 16 bpp indexés ou plus n’offre pas les avantages de la nature des images couleur indexées, car la taille de la palette de couleurs en octets est supérieure à celle des données d’image brutes proprement dites. En outre, les modes RVB Highcolor directs utiles peuvent être utilisés à partir de 15 bpp et plus.

Si une image a de nombreuses nuances de couleurs subtiles, il est nécessaire de sélectionner un répertoire limité de couleurs pour approximer l’image en utilisant la quantification des couleurs. Une telle palette est souvent insuffisante pour représenter l’image avec précision; les fonctions difficiles à reproduire, telles que les dégradés, apparaissent en blocs ou en bandes (bandes de couleur). Dans ces cas, il est habituel d’utiliser le tramage, qui mélange des pixels de couleurs différentes dans des motifs, en exploitant la tendance de la vision humaine à brouiller ensemble les pixels proches, donnant un résultat visuellement plus proche de l’original.

Couleurs et palettes
La manière dont les couleurs sont codées dans la palette de couleurs d’une image couleur indexée donnée dépend de la plate-forme cible.

Techniques de couleurs anciennes
Beaucoup de premiers ordinateurs personnels et domestiques avaient des palettes matérielles très limitées qui pouvaient produire un très petit jeu de couleurs. Dans ces cas, la valeur de chaque pixel est mappée directement sur l’une de ces couleurs. Parmi les exemples connus, citons l’Apple II, le Commodore 64 et l’IBM PC CGA, tous équipés de matériel pouvant produire un ensemble fixe de 16 couleurs. Dans ces cas, une image peut encoder chaque pixel avec 4 bits, en sélectionnant directement la couleur à utiliser. Cependant, dans la plupart des cas, le matériel d’affichage prend en charge des modes supplémentaires dans lesquels seul un sous-ensemble de ces couleurs peut être utilisé dans une seule image, une technique utile pour économiser de la mémoire. Par exemple, le mode de résolution 320 × 200 du CGA n’affiche que quatre des 16 couleurs en même temps. Comme les palettes étaient entièrement propriétaires, une image générée sur une plate-forme ne peut pas être visualisée directement sur une autre.

D’autres machines de cette époque avaient la capacité de générer un plus grand nombre de couleurs, mais généralement seulement un sous-ensemble de celles-ci pouvait être utilisé dans n’importe quelle image. Les exemples incluent la palette de 256 couleurs sur les machines Atari 8 bits ou les 4 096 couleurs du terminal VT241 en mode graphique ReGIS. Dans ces cas, il était courant que l’image ne permette d’afficher qu’un petit sous-ensemble du nombre total de couleurs en même temps, jusqu’à 16 en même temps sur l’Atari et le VT241. Généralement, ces systèmes fonctionnaient de manière identique à leurs frères moins colorés, mais une différence clé était qu’il y avait trop de couleurs dans la palette pour encoder directement dans les données de pixels étant donné la quantité limitée de mémoire vidéo. Au lieu de cela, ils ont utilisé une table de correspondance des couleurs (CLUT) où les données de chaque pixel pointaient vers une entrée dans le CLUT, et le CLUT était mis en place sous le contrôle du programme. Cela signifiait que les données CLUT de l’image devaient être stockées avec les données d’image brutes afin de pouvoir reproduire correctement l’image.

RVB
Les palettes matérielles basées sur des couleurs vidéo composantes telles que YPbPr ou similaires ont généralement été remplacées au milieu des années 1980 par le modèle de couleur RVB plus flexible, dans lequel une couleur donnée peut être obtenue en mélangeant différentes quantités des trois couleurs primaires rouge, vert et bleu. Bien que le nombre total de couleurs différentes dépend du nombre de niveaux par primaire et d’une implémentation matérielle donnée (un RGB à 9 bits fournit 512 combinaisons, un RGB à 12 bits fournit 4 096, etc.), dans ce modèle. convertisseurs to-analogiques (DAC) peuvent générer les couleurs – simplifiant la conception du matériel – tandis que le logiciel peut traiter le nombre par niveaux utilisés de manière abstraite et gérer les couleurs RVB d’une manière indépendante de l’appareil. Avec les couleurs stockées au format RVB dans les palettes des fichiers image indexés, n’importe quelle image peut être affichée (par des transformations appropriées) sur un tel système, quelle que soit la profondeur de couleur utilisée dans l’implémentation matérielle.

Aujourd’hui, le matériel d’affichage et les formats de fichiers image qui traitent les images couleur indexées gèrent presque exclusivement les couleurs au format RVB, le codage standard de facto étant ce qu’on appelle le truecolor ou RGB 24 bits, avec 16 777 216 différentes couleurs possibles. Cependant, les images couleur indexées ne sont pas réellement contraints à un codage couleur RVB 24 bits; Les palettes d’images peuvent contenir n’importe quel type d’encodage de couleur. Par exemple, le format de fichier PDF prend en charge la couleur indexée dans d’autres espaces de couleurs, notamment CMJN, et Adobe Distiller convertit par défaut les images en couleurs indexées lorsque le nombre total de couleurs dans une image est inférieur ou égal à 256. Les formats de fichier TIFF et PNG peuvent éventuellement stocker les triplets RGB avec une précision de 16 bits (65 536 niveaux par composant), ce qui donne un total de 48 bits par pixel. Une extension proposée à la norme TIFF permet des palettes de couleurs non-RVB, mais cela n’a jamais été implémenté dans le logiciel pour des raisons techniques. La table de couleurs du mode de couleur indexée au format de fichier BMP stocke ses entrées dans l’ordre BGR plutôt que RVB et possède (dans la version actuelle) un octet inutilisé supplémentaire pour le remplissage afin de respecter l’alignement des mots de 32 bits pendant le traitement. essentiellement encore un encodage couleur RVB 24 bits. (Une version antérieure du format BMP utilisait trois octets par entrée de table de mappage de couleurs 24 bits et de nombreux fichiers de ce format sont toujours en circulation, de sorte que de nombreux programmes modernes qui lisent les fichiers BMP prennent en charge les deux variantes.)

Arrangements de bits de Pixel
À l’exception des modes graphiques à très basse résolution, les premiers ordinateurs personnels et domestiques ont rarement mis en œuvre une conception «adressable à tous les pixels», c’est-à-dire la possibilité de changer un seul pixel pour l’une des couleurs disponibles indépendamment. Leurs limites proviennent de l’utilisation d’attributs de couleur séparés ou de zones RAM colorées, ce qui conduit à attribuer des effets de collision. En outre, les bits de pixel et / ou les lignes de balayage de la mémoire vidéo étaient généralement disposés de manière étrange pour le matériel du générateur vidéo (économisant ainsi des coûts matériels dans un marché compétitif), mais parfois créant des difficultés pour les personnes qui écrivent des programmes graphiques. . Les bits d’un pixel dans les images indexées en couleur et adressables par pixel ne sont pas toujours contigus dans la mémoire vidéo ou les fichiers image (par exemple, une organisation volumineuse n’est pas toujours utilisée.) Certains matériels vidéo, tels que les modes graphiques 16 couleurs de l’Enhanced L’adaptateur graphique (EGA) et la matrice graphique vidéo (VGA) pour IBM PC compatible ou le tampon vidéo Amiga sont agencés comme une série de plans de bits (dans une configuration appelée planaire), dans lesquels les bits associés d’un seul pixel sont répartis entre plusieurs bitmaps indépendants. Ainsi, les bits de pixels sont alignés conceptuellement le long de l’axe Z 3D. (Le concept de « profondeur » ici n’est pas le même que celui de la profondeur de pixel.)

Les premiers formats de fichiers d’image, tels que PIC, stocké un peu plus d’un vidage de mémoire nue du tampon vidéo d’une machine donnée.

Certains formats de fichiers d’images indexés tels que GIF (Graphics Interchange Format) permettent d’agencer les lignes de balayage de l’image de manière entrelacée (non linéaire), ce qui permet à une image basse résolution d’apparaître sur l’écran pendant le téléchargement. , afin que l’utilisateur de l’ordinateur puisse avoir une idée de son contenu pendant les secondes qui précèdent l’arrivée de l’image entière.

Comme on le voit ici, l’image a été divisée en quatre groupes de lignes: le groupe A contient toutes les quatrièmes lignes, le groupe B contient les lignes immédiatement suivantes du groupe A, le groupe C contient les lignes immédiatement après celles du groupe B et le groupe D les lignes restantes, qui sont entre les lignes du groupe C (immédiatement au-dessus) et les lignes du groupe A (immédiatement ci-dessous). Ceux-ci sont stockés dans le fichier dans l’ordre A, C, B, D, de sorte que lorsque le fichier est transmis le deuxième groupe reçu (C) de lignes est centré entre les lignes du premier groupe, donnant le plus spatialement uniforme et reconnaissable image possible, composée de seulement deux des groupes de lignes. La même technique peut être appliquée avec plus de groupes (par exemple huit), auquel cas à chaque étape, le groupe suivant à envoyer contient des lignes situées au centre ou à proximité des centres des bandes restantes qui ne sont pas encore remplies de données d’image. Cette méthode, avec quatre ou huit groupes de lignes, était couramment utilisée sur les premiers sites Web au cours de la seconde moitié des années 1990. Plutôt que de laisser l’image d’arrière-plan (noire) comme dans l’illustration ci-dessus, l’image partielle était souvent présentée à l’écran en dupliquant chaque ligne pour remplir l’espace en dessous jusqu’à la prochaine ligne d’image reçue. Le résultat final était une image continue avec une résolution verticale réduite qui augmentait jusqu’à une résolution complète pendant quelques secondes lorsque les dernières parties des données d’image arrivaient.

Avantages
La couleur indexée économise beaucoup de mémoire, d’espace de stockage et de temps de transmission: en utilisant truecolor, chaque pixel nécessite 24 bits ou 3 octets. Une image non compressée truecolor de résolution 640 × 480 VGA typique nécessite 640 × 480 × 3 = 921 600 octets (900 KiB). En limitant les couleurs de l’image à 256, chaque pixel n’a besoin que de 8 bits ou 1 octet chacun. L’image d’exemple ne nécessite plus que 640 × 480 × 1 = 307 200 octets (300 KiB), plus 256 × 3 = 768 octets supplémentaires palette en elle-même (en supposant RVB), environ un tiers de la taille d’origine. Des palettes plus petites (4 couleurs 16 bits, 2 couleurs 4 couleurs) peuvent encore plus empiler les pixels (un sixième ou un douzième), évidemment au prix de la précision des couleurs.

La couleur indexée a été largement utilisée dans les ordinateurs personnels et les adaptateurs d’affichage pour réduire les coûts (principalement en exigeant moins de puces RAM alors chères) mais aussi pour une gestion d’image pratique avec des CPU à puissance limitée (de l’ordre de 4 à 8 MHz). ), stockage de fichiers (cassettes et disquettes de faible densité). Les systèmes d’infographie remarquables (ou même exclusivement) utilisant des palettes pseudocolor dans les années 1980 incluent CGA, EGA et VGA (pour IBM PC compatibles), l’Atari ST, et l’OCS et l’AGA d’Amiga.

Les fichiers d’images échangés sur le réseau Compuserve au début des années 1990 étaient encapsulés dans le format GIF. Plus tard, les pages Web HTML ont utilisé le format GIF avec d’autres formats de fichiers indexés prenant en charge les couleurs, tels que le format PNG, pour échanger rapidement des images en couleurs limitées et les stocker dans un espace de stockage limité.

La plupart des formats de fichiers d’images prenant en charge les images couleur indexées prennent également en charge certains schémas de compression, ce qui améliore leur capacité à stocker les images dans des fichiers plus petits.

Des effets colorisés et artistiques intéressants peuvent être facilement obtenus en modifiant la palette de couleurs des images couleur indexées, par exemple pour produire des images en tons sépia colorisés. En raison de la nature distincte de l’élément de palette associé des images couleur indexées, elles sont idéales pour redéfinir les images en niveaux de gris en couleurs fausses en utilisant des palettes de couleurs fausses.

La superposition vidéo simple peut être réalisée facilement grâce à la technique de la couleur transparente.

En manipulant les registres matériels couleur (table de correspondance des couleurs ou CLUT) de l’adaptateur d’affichage dans les modes graphiques couleur indexés, des effets d’animation couleur en plein écran peuvent être obtenus sans redessiner l’image, c’est-à-dire une seule modification des valeurs de registre affecte l’ensemble de l’écran à la fois. L’animation de carte de couleur, également connue sous le nom de cycle de couleur, est intensivement employée dans la demoscene. L’écran du logo de démarrage Microsoft Windows dans Windows 95, 98, ME et 2000 Professional (qui utilise le mode d’affichage couleur VGA 320x200x256 car il s’agit du plus grand dénominateur commun sur tous les PC) utilise cette technique pour la barre de dégradé située en bas de l’écran ; l’image est une image statique sans pixels réécrits après son affichage initial. Les images d’écran de démarrage personnalisées peuvent exploiter les couleurs activées pour animer d’autres parties des images.

Désavantages
Le principal inconvénient de l’utilisation de la couleur indexée est l’ensemble limité de couleurs simultanées par image. Les petites palettes de 4 ou 16 couleurs sont toujours acceptables pour les petites images (icônes) ou les graphiques très simples, mais pour reproduire des images de la vie réelle, elles deviennent presque inutiles. Certaines techniques, telles que la quantification des couleurs, l’anti-aliasing et le dithering combinés peuvent créer des images indexées de 256 couleurs comparables à l’original jusqu’à un niveau acceptable.

Les images couleur indexées dépendent fortement de leurs propres palettes de couleurs. A l’exception de quelques palettes de couleurs fixes bien connues (telles que celle de l’adaptateur graphique couleur CGA), les données d’images brutes et / ou les tables de couleurs ne peuvent pas être échangées de manière fiable entre différents fichiers image sans un mappage intermédiaire. En outre, si la palette de couleurs d’origine pour une image indexée donnée est perdue, il peut être presque impossible de la restaurer. Voici un exemple de ce qui se passe lorsqu’une image couleur indexée (le précédent perroquet) a été associée à une palette de couleurs incorrecte:

Les modes graphiques couleur indexés pour les cartes graphiques ont la limite de 16 ou 256 couleurs imposée par le matériel. Les images couleur indexées avec des palettes riches mais incompatibles ne peuvent être affichées avec précision qu’une à la fois, comme dans un diaporama. Lorsqu’il est nécessaire de montrer plusieurs images ensemble, comme dans une mosaïque de vignettes, une palette commune ou maîtresse est souvent utilisée, qui englobe autant de teintes que possible dans un seul ensemble, limitant ainsi la disponibilité des couleurs précise globale.

L’image suivante est une mosaïque de quatre images couleur indexées différentes rendues avec une seule palette principale partagée de niveaux 6-8-5 RVB plus 16 gris supplémentaires. Notez la plage limitée de couleurs utilisée pour chaque image et le nombre d’entrées de palette non utilisées.

La mosaïque d’échantillons de couleur indexée n’atteint pas la limite de 24 bits pour la palette RGB complète. Le VGA pour IBM PC compatible, par exemple, ne fournit qu’une palette RVB 18 bits avec 262 144 couleurs différentes possibles dans les modes graphiques couleur 16 et 256 indexés.
Certains logiciels de retouche d’image permettent d’appliquer une correction gamma à une palette pour les fichiers image couleur indexés. En général, appliquer une correction gamma directement sur la carte en couleur est une mauvaise pratique, en raison de la perte des valeurs de couleur RVB d’origine. Il est préférable d’appliquer la correction gamma au matériel d’affichage (les adaptateurs d’affichage les plus modernes prennent en charge cette fonction) ou en tant qu’étape intermédiaire active du logiciel de rendu grâce à la gestion des couleurs, qui préserve les valeurs de couleur d’origine. Ce n’est que lorsque les images couleur indexées sont destinées à des systèmes dépourvus de tout calibrage de couleurs, et qu’elles ne sont pas destinées à être multiplateformes, que la correction gamma peut être appliquée à la table de couleurs elle-même.