Colore indicizzato

Nell’informatica, il colore indicizzato è una tecnica per gestire i colori delle immagini digitali in modo limitato, al fine di risparmiare memoria del computer e archiviazione dei file, velocizzando al contempo l’aggiornamento della visualizzazione e il trasferimento dei file. È una forma di compressione di quantizzazione vettoriale.

Quando un’immagine viene codificata in questo modo, le informazioni sul colore non sono direttamente trasportate dai dati del pixel dell’immagine, ma vengono memorizzate in un dato separato chiamato tavolozza: una serie di elementi di colore. Ogni elemento dell’array rappresenta un colore, indicizzato dalla sua posizione all’interno dell’array. Le singole voci sono talvolta note come registri dei colori. I pixel dell’immagine non contengono le specifiche complete del suo colore, ma solo il suo indice nella tavolozza. Questa tecnica viene talvolta definita come pseudocolore o colore indiretto, in quanto i colori vengono indirizzati indirettamente.

Forse il primo dispositivo che supportava i colori della tavolozza era un buffer di frame ad accesso casuale, descritto nel 1975 da Kajiya, Sutherland e Cheadle. Questo supportava una tavolozza di 256 colori RGB a 36 bit.

Dimensione della tavolozza
La palette stessa memorizza un numero limitato di colori distinti; 4, 16 o 256 sono i casi più comuni. Questi limiti sono spesso imposti dall’hardware dell’adattatore di visualizzazione dell’architettura di destinazione, quindi non è una coincidenza che quei numeri siano potenze esatte di due (il codice binario): 22 = 4, 24 = 16 e 28 = 256. Mentre 256 valori possono essere inserirsi in un singolo byte da 8 bit (e quindi un singolo pixel di colore indicizzato occupa anche un singolo byte), gli indici di pixel con 16 (4 bit, un nibble) o meno colori possono essere riuniti in un singolo byte (due nibbles per byte, se vengono utilizzati 16 colori o quattro pixel a 2 bit per byte se si utilizzano 4 colori). A volte è possibile utilizzare valori a 1 bit (2 colori) e quindi è possibile includere fino a otto pixel in un singolo byte; tali immagini sono considerate immagini binarie (a volte indicate come un’immagine bitmap o bilevel) e non un’immagine a colori indicizzata.

Se l’overlay video semplice è destinato a un colore trasparente, una voce di tavolozza è specificatamente riservata a questo scopo e viene scontata come colore disponibile. Alcune macchine, come la serie MSX, avevano il colore trasparente riservato dall’hardware.

Le immagini a colori indicizzate con dimensioni delle palette oltre 256 voci sono rare. Il limite pratico è di circa 12 bit per pixel, 4.096 diversi indici. L’uso di 16 bpp indicizzati o più non offre i vantaggi della natura delle immagini a colori indicizzati, poiché le dimensioni della tavolozza dei colori in byte sono maggiori dei dati delle immagini originali. Inoltre, è possibile utilizzare utili modalità RGB Highcolor dirette da 15 bpp in su.

Se un’immagine ha molte sfumature di colore, è necessario selezionare un repertorio di colori limitato per approssimare l’immagine usando la quantizzazione del colore. Tale tavolozza è spesso insufficiente a rappresentare l’immagine in modo accurato; caratteristiche difficili da riprodurre come le sfumature appariranno a blocchi o come strisce (strisce colorate). In questi casi, è consuetudine impiegare il dithering, che mescola pixel di diversi colori nei pattern, sfruttando la tendenza della visione umana a sfocare insieme i pixel vicini, dando un risultato visivamente più vicino all’originale.

Colori e tavolozze
Il modo in cui i colori sono codificati all’interno della mappa della tavolozza dei colori di una determinata immagine a colori indicizzata dipende dalla piattaforma di destinazione.

Tecniche precoci di colore
Molti dei primi computer personali e domestici avevano tavolozze hardware molto limitate che potevano produrre un set di colori molto piccolo. In questi casi, il valore di ciascun pixel è mappato direttamente su uno di questi colori. Esempi noti includono Apple II, Commodore 64 e IBM PC CGA, tutti inclusi hardware in grado di produrre un set fisso di 16 colori. In questi casi, un’immagine può codificare ogni pixel con 4 bit, selezionando direttamente il colore da utilizzare. Nella maggior parte dei casi, tuttavia, l’hardware del display supporta modalità aggiuntive in cui solo un sottoinsieme di quei colori può essere utilizzato in una singola immagine, una tecnica utile per risparmiare memoria. Ad esempio, la modalità di risoluzione 320 × 200 della CGA potrebbe mostrare solo quattro dei 16 colori contemporaneamente. Poiché le palette erano interamente proprietarie, un’immagine generata su una piattaforma non può essere vista direttamente correttamente su un’altra.

Altre macchine di questa era avevano la capacità di generare un più ampio set di colori, ma in genere consentivano solo un sottoinsieme di quelli da utilizzare in ogni immagine. Gli esempi includono la tavolozza a 256 colori sulle macchine Atari a 8 bit o i 4.096 colori del terminale VT241 in modalità grafica ReGIS. In questi casi era normale che l’immagine consentisse di visualizzare solo un piccolo sottoinsieme del numero totale di colori contemporaneamente, fino a 16 contemporaneamente su Atari e VT241. In generale, questi sistemi funzionavano in modo identico ai loro fratelli meno colorati, ma una differenza fondamentale era che c’erano troppi colori nella tavolozza per codificare direttamente nei dati dei pixel data la quantità limitata di memoria video. Invece, hanno usato una tabella di ricerca colore (CLUT) in cui i dati di ciascun pixel puntavano a una voce nel CLUT e il CLUT era impostato sotto il controllo del programma. Ciò significava che i dati dell’immagine CLUT dovevano essere archiviati insieme ai dati grezzi dell’immagine per poter riprodurre correttamente l’immagine.

RGB
Le tavolozze hardware basate su colori video component come YPbPr o simili sono state generalmente sostituite a metà degli anni ’80 dal più flessibile modello di colore RGB, in cui è possibile ottenere un determinato colore mescolando diverse quantità dei tre colori primari rosso, verde e blu. Sebbene il numero totale di colori diversi dipenda dal numero di livelli per primario e da una determinata implementazione hardware (un RGB a 9 bit fornisce 512 combinazioni, un RGB a 12 bit fornisce 4.096 e così via), in questo modello Digital- to-Analog Converters (DAC) può generare i colori – semplificando la progettazione dell’hardware – mentre il software può trattare il numero per livelli utilizzati in modo astratto e gestire i colori RGB in modo indipendente dal dispositivo. Con i colori memorizzati in formato RGB all’interno delle palette di file di immagini indicizzate, è possibile visualizzare qualsiasi immagine (tramite opportune trasformazioni) su qualsiasi sistema di questo tipo, indipendentemente dalla profondità del colore utilizzata nell’implementazione hardware.

Oggi, i formati hardware e di file di immagine che trattano le immagini a colori indicizzati gestiscono quasi esclusivamente i colori in formato RGB, la codifica standard di fatto è il cosiddetto truecolor o RGB a 24 bit, con 16.777.216 diversi colori possibili. Tuttavia, le immagini a colori indicizzate non sono realmente vincolate a una codifica cromatica RGB a 24 bit; le tavolozze di immagini possono contenere qualsiasi tipo di codifica a colori. Ad esempio, il formato file PDF supporta il colore indicizzato in altri spazi colore, in particolare CMYK e Adobe Distiller per impostazione predefinita converte le immagini in colori indicizzati ogni volta che il numero totale di colori in un’immagine è uguale o inferiore a 256. Quando si utilizza RGB, i formati di file TIFF e PNG possono facoltativamente memorizzare le triplette RGB con una precisione di 16 bit (65.536 livelli per componente) ottenendo un totale di 48 bit per pixel. Un’estensione proposta per lo standard TIFF consente tavolozze di colori non RGB, ma questo non è mai stato implementato nel software a causa di motivi tecnici. La tabella della mappa dei colori della modalità colore indicizzata in formato file BMP memorizza le voci in ordine BGR piuttosto che RGB e ha (nella versione corrente) un ulteriore byte inutilizzato per il riempimento per conformarsi all’allineamento delle parole a 32 bit durante l’elaborazione, ma è essenzialmente ancora una codifica cromatica RGB a 24 bit. (Una versione precedente del formato BMP utilizzava tre byte per la voce della tabella di colori a 24 bit e molti file in quel formato sono ancora in circolazione, quindi molti programmi moderni che leggono i file BMP supportano entrambe le varianti.)

Arrangiamenti di pixel bit
Ad eccezione delle modalità grafiche a bassissima risoluzione, i primi personal computer domestici e di casa raramente implementavano un design “all-pixel-indirizzabile”, ovvero la possibilità di cambiare un singolo pixel in uno qualsiasi dei colori disponibili indipendentemente. I loro limiti derivavano dall’impiego di attributi colore separati o aree RAM di colore, che portavano ad attribuire effetti di scontro. Inoltre, i pixel bit e / o le linee di scansione della memoria video erano comunemente disposti in modi strani convenienti per l’hardware del generatore video (risparmiando così i costi dell’hardware in un mercato competitivo), ma a volte creando difficoltà per le persone che scrivono programmi grafici . I bit di un pixel in immagini a colori indicizzati e all-pixel-indirizzabili non sono sempre contigui nella memoria video o nei file di immagine (ad esempio, l’organizzazione complessa non è sempre utilizzata). Alcuni hardware video, come le modalità grafiche a 16 colori di Enhanced. La scheda grafica (EGA) e la matrice grafica video (VGA) per PC compatibili IBM o il buffer video Amiga sono disposte come una serie di piani bit (in una configurazione denominata planare), in cui i bit correlati di un singolo pixel sono suddivisi tra più bitmap indipendenti. Pertanto, i pixel bit sono concettualmente allineati lungo l’asse Z 3D. (Il concetto di “profondità” qui non è lo stesso di quello della profondità dei pixel).

I primi formati di file di immagine, come PIC, memorizzavano poco più di un dump di memoria nuda del buffer video di una data macchina.

Alcuni formati di file di immagine a colori indicizzati come Graphics Interchange Format (GIF) consentono di disporre le linee di scansione dell’immagine in modo interlacciato (non in ordine lineare), che consente di visualizzare sullo schermo una versione a bassa risoluzione dell’immagine mentre è ancora in fase di download , in modo che l’utente del computer possa avere un’idea del suo contenuto durante i secondi prima che l’intera immagine arrivi.

Come visto qui, l’immagine è stata divisa in quattro gruppi di linee: il gruppo A contiene ogni quarta linea, il gruppo B contiene le linee che seguono immediatamente quelle del gruppo A, il gruppo C contiene anche le linee immediatamente successive a quelle del gruppo B e il gruppo D contiene le righe rimanenti, che si trovano tra le linee del gruppo C (immediatamente sopra) e del gruppo A (immediatamente sotto). Questi sono memorizzati nel file nell’ordine A, C, B, D, in modo che quando il file viene trasmesso, il secondo gruppo (C) ricevuto di linee si trovi centrato tra le linee del primo gruppo, ottenendo il più spazialmente uniforme e riconoscibile immagine possibile, composta da solo due dei gruppi di linee. La stessa tecnica può essere applicata con più gruppi (ad esempio otto), nel qual caso in ogni fase il gruppo successivo da inviare contiene linee che si trovano in corrispondenza o in prossimità dei centri di bande rimanenti che non sono ancora piene di dati di immagine. Questo metodo, con quattro o otto gruppi di linee, era comunemente usato nel primo World Wide Web durante la seconda metà degli anni ’90. Anziché lasciare lo sfondo (nero) come mostrato nell’illustrazione sopra, l’immagine parziale veniva spesso presentata sullo schermo duplicando ogni riga per riempire lo spazio sottostante fino alla successiva linea dell’immagine ricevuta. Il risultato finale era un’immagine continua con una risoluzione verticale ridotta che aumentava fino alla piena risoluzione in pochi secondi mentre le parti successive dei dati dell’immagine arrivavano.

vantaggi
Il colore indicizzato consente di risparmiare molta memoria, spazio di archiviazione e tempo di trasmissione: utilizzando truecolor, ogni pixel ha bisogno di 24 bit o 3 byte. Una tipica risoluzione non compresso con risoluzione VGA 640 × 480 richiede 640 × 480 × 3 = 921.600 byte (900 KiB). Limitando i colori dell’immagine a 256, ogni pixel richiede solo 8 bit o 1 byte ciascuno, quindi l’immagine di esempio ora ha solo 640 × 480 × 1 = 307.200 byte (300 KiB), più 256 × 3 = 768 byte aggiuntivi per memorizzare tavolozza mappa in sé (supponendo RGB), circa un terzo della dimensione originale. Tavolozze più piccole (colori a 16 bit a 4 bit, colori a 2 bit a 4 bit) possono impacchettare i pixel ancora di più (fino a un sesto o un dodicesimo), ovviamente a costo della precisione del colore.

Il colore indicizzato era ampiamente utilizzato nei primi personal computer e l’hardware degli adattatori di visualizzazione per ridurre i costi (principalmente richiedendo meno dei costosi chip RAM) ma anche per una comoda gestione delle immagini con CPU a potenza limitata (dell’ordine da 4 a 8 MHz ), archiviazione di file (cassette e dischetti a bassa densità). Negli anni ’80 notevoli sistemi di computer grafica (o anche esclusivamente) con palette di pseudocolori comprendevano CGA, EGA e VGA (per PC compatibili IBM), Atari ST e Amiga OCS e AGA.

I file di immagine scambiati sulla rete di Compuserve nei primi anni ’90 sono stati incapsulati nel formato GIF. Successivamente, le pagine Web HTML hanno utilizzato la GIF insieme ad altri formati di file con supporto del colore indicizzati, ad esempio PNG, per scambiare rapidamente immagini a colori limitati e archiviarle in uno spazio di archiviazione limitato.

La maggior parte dei formati di file di immagini che supportano immagini a colori indicizzati supportano anche comunemente alcuni schemi di compressione, migliorando la loro capacità di memorizzare le immagini in file più piccoli.

È possibile ottenere facilmente effetti coloristici e artistici interessanti modificando la tavolozza dei colori delle immagini a colori indicizzati, ad esempio per produrre immagini a toni seppia colorizzati. A causa della natura separata dell’elemento tavolozza associato delle immagini a colori indicizzati, sono ideali per rimappare le immagini in scala di grigi in quelle a falsi colori mediante l’uso di palette di colori falsi.

Semplice sovrapposizione di video può essere ottenuto facilmente attraverso la tecnica del colore trasparente.

Manipolando i registri hardware del colore (tabella di ricerca del colore o CLUT) dell’adattatore di visualizzazione nelle modalità grafiche a colori indicizzati, è possibile ottenere effetti di animazione a colori a schermo intero senza ridisegnare l’immagine, ovvero con un basso costo della CPU; un singolo cambiamento dei valori del registro ha effetto su tutto lo schermo contemporaneamente. L’animazione della mappa dei colori, nota anche come Ciclo del colore, è ampiamente utilizzata nella demoscena. La schermata del logo di avvio di Microsoft Windows in Windows 95, 98, ME e 2000 Professional (che utilizza la modalità di visualizzazione a colori VGA 320x200x256 perché è il massimo comune denominatore su tutti i PC) impiega questa tecnica per la barra del gradiente di scorrimento sul fondo dello schermo ; l’immagine è un’immagine statica senza pixel riscritta dopo la visualizzazione iniziale. Le immagini personalizzate della schermata di avvio potrebbero toccare i colori ciclati per animare altre parti delle immagini.

svantaggi
Lo svantaggio principale dell’uso del colore indicizzato è l’insieme limitato di colori simultanei per immagine. Piccole palette a 4 o 16 colori sono ancora accettabili per piccole immagini (icone) o grafica molto semplice, ma per riprodurre le immagini della vita reale diventano quasi inutili. Alcune tecniche, come la quantizzazione del colore, l’anti-aliasing e il dithering combinati insieme, possono creare immagini indicizzate a 256 colori paragonabili all’originale fino a un livello accettabile.

Le immagini a colori indicizzate dipendono fortemente dalle proprie tavolozze di colori. Ad eccezione di alcune ben note palette a colori fissi (come quella di Color Graphics Adapter-CGA), i dati di immagine grezzi e / o le tabelle delle mappe dei colori non possono essere scambiati in modo affidabile tra file di immagine diversi senza una sorta di mappatura intermedia. Inoltre, se si perde la tavolozza dei colori originale per una determinata immagine indicizzata, è quasi impossibile ripristinarla. Ecco un esempio di cosa succede quando un’immagine a colori indicizzata (il pappagallo precedente) è stata associata a una tavolozza di colori errata:

Le modalità grafiche a colori indicizzate per gli adattatori di visualizzazione hanno il limite di 16 o 256 colori imposto dall’hardware. Le immagini a colori indicizzate con palette ricche ma incompatibili possono essere visualizzate solo una alla volta, come in una presentazione. Quando è necessario mostrare più immagini insieme, come in un mosaico di miniature, viene spesso utilizzata una tavolozza comune o principale, che racchiude il maggior numero di tonalità possibili in un singolo set, limitando in tal modo la disponibilità di colori accurata complessiva.

L’immagine seguente è un mosaico di quattro diverse immagini a colori indicizzate rese con una singola tavolozza principale condivisa di 6-8-5 livelli RGB più 16 grigi aggiuntivi. Si noti la gamma limitata di colori usati per ogni immagine e quante voci della palette non vengono utilizzate.

Il campione campione di colore indicizzato non raggiunge il limite di 24 bit per la tavolozza RGB completa. La VGA per PC compatibili IBM, ad esempio, fornisce solo una tavolozza RGB a 18 bit con 262.144 diversi colori possibili in entrambe le modalità grafiche a colori con 16 e 256 indici.
Alcuni software di modifica delle immagini consentono di applicare la correzione gamma a una tavolozza per i file di immagini a colori indicizzati. In generale, applicare una correzione gamma direttamente alla mappa dei colori è una cattiva pratica, a causa della perdita dei valori dei colori RGB originali. È meglio applicare la correzione della gamma con l’hardware del display (la maggior parte degli adattatori di display moderni supportano questa funzione) o come una fase intermedia attiva del software di rendering tramite la gestione del colore, che conserva i valori dei colori originali. Solo quando le immagini a colori indicizzate sono destinate a sistemi privi di qualsiasi tipo di calibrazione del colore e non sono pensati per essere multipiattaforma, la correzione gamma può essere applicata alla tabella dei colori stessa.