Corso di per il corso di Laurea di Ingegneria Gestionale Codifica delle immagini Università degli Studi di Udine - A.A. 2010-2011 Docente Ing. Sandro Di Giusto Ph.D. 1
Scalare vs Vettoriale Per codificare le immagini statiche ci sono due strade diverse Codifiche scalari Si riduce l'immagine ad un'insieme bidimensionale di punti ordinato, caratterizzati ciascuno oltre che dalla propria posizione relativa, anche da una o più proprietà extra (la più comune è il colore, ma non è l'unica) Tipicamente l'insieme ha la forma di un rettangolo e quindi l'insieme di punti è una matrice di pixel (Picture Element) La dimensione di tale matrice è detta risoluzione dell'immagine: il numero di righe della matrice è detta risoluzione Y ed il numero di colonne risoluzione X Risoluzione Y Risoluzione X Quando si associa un'immagine ad un dispositivo di visualizzazione (monitor, stampante, etc.) si parla di definizione intendendo la densità di pixel, ovvero il numero di pixel (in linea) per unità di lunghezza (tipica unità di misura è il dpi, ovvero Dot Per Inch) 2
Codifiche vettoriali Scalare vs Vettoriale Si riduce l'immagine ad un insieme più o meno complesso e vasto di primitive geometriche fondamentali (linee, cerchi e archi, poligoni, ) ciascuna caratterizzabile analiticamente e tali per cui prese tutte assieme nell'ordine opportuno formino l'immagine di partenza Non prevedono il concetto di risoluzione perché il formato di memorizzazione (codifica) non tiene in nessun conto le caratteristiche visive complessive dell'immagine originale Sono adatte per descrivere artefatti o immagini comunque dai contorni puliti e relativamente semplici 3
Pregi e difetti Ovviamente ciascuna di queste due famiglie di codifiche delle immagini ha svariati pregi ed altrettanti difetti Codifiche scalari Pregi Difetti Semplicissime da codificare e decodificare, richiedendo pochissimo sforzo elaborativo Sono quanto di più vicino ci sia ai metodi di visualizzazione classici (monitor, stampanti,...) Richiedono grossi quantitativi di spazio per la memorizzazione (proporzionale alle due risoluzioni X ed Y e quindi proporzionale alla superficie ) Non sono scalabili (problema dello zoom) Non sono facilmente modificabili/manipolabili 4
Pregi e difetti Codifiche vettoriali Pregi Difetti Richiedono modesti quantitativi di spazio (se paragonati alla loro qualità) Sono virtualmente scalabili all'infinito (in entrambi i versi) Sono facilmente modificabili/manipolabili Richiedono uno sforzo implementativo decisamente superiore (sia per la codifica sia per la decodifica) Non sono sempre facilmente usabili poiché per immagini scarsamente definite e con alta irregolarità è molto complessa la procedura di geometrizzazione 5
Altre informazioni Esempi di codifiche Sono esempi di codifiche scalari le immagini bitmap, jpeg, gif, png, tiff, Sono esempi di codifiche vettoriali le immagini svg, dxf, dwg, emf, wmf, Alcuni numeri sulle rappresentazioni scalari Tanto per avere un'idea dell'ordine di grandezza con cui si opera: Una risoluzione standard fino a non molti anni fa per monitor CRT (XGA) era 1024*768 (risoluzione X per risoluzione Y) ovvero 786'432 pixel Una risoluzione standard (wide) di un monitor LCD (WXGA) è oggi 1280*800 ovvero contiene 1.024*10 6 pixel Una risoluzione televisiva/cinematografica di alta qualità oggi, detta Full-HD è 1920*1080 ovvero 2.073*10 6 pixel Una risoluzione elevata (wide) per applicazione grafiche/cad è 1920*1200 ovvero 2.304*10 6 pixel Le risoluzioni più comuni sui cellulari generalmente si aggirano su ¼ o ½ di milione di pixel (gli smartphone più recenti possono arrivare a risoluzione di 800*480 e oltre) Le fotocamere possono arrivare a risoluzioni (per massima parte teoriche) che superano anche i 10Mpixel (milioni di pixel) 6
Le caratteristiche del colore In tutte le codifiche è comune il concetto di proprietà di un punto (scalari) o di un oggetto o parte di esso (vettoriali) Dovendo sempre venire a patti con i problemi della digitalizzazione delle informazioni, anche il colore deve essere discretizzato In generale il numero di colori massimo esprimibili in un'immagine (frutto della codifica scelta) è chiamato profondità di colore e si esprime generalmente non direttamente come numero complessivo, ma come numero di bit necessari per codificare tale numero Es. 1 bit codifica 2 1 colori, ovvero 2 soli (bianco e nero) Es. 4 bit codifica 2 4 colori, ovvero 16 (prime VGA); mezzo byte per memorizzare un singolo colore Es. 8 bit codifica 2 8 colori, ovvero 256 (VGA standard); un byte per memorizzare un singolo colore Es. 16 bit codifica 2 16, ovvero 65536 detto Highcolour; due byte per memorizzare un singolo colore Es. 24 bit codifica 2 24, ovvero circa 16 milioni detto Truecolour; 3 byte per memorizzare un sing. colore Es. 32 bit codifica 2 32, ovvero circa 4 miliardi detto Deepcolour (dato teorico che non tiene conto dei limiti fisici di visualizzazione dei dispositivi); 4 byte per memorizzare un singolo colore Una volta scelta la profondità, rimane comunque il problema di come codificare i colori su tale profondità (ovvero come associare in modo univoco a ciascun colore un codice binario corrispondente) 7
Sintesi sottrattiva e additiva Per risolvere il problema si può usare una delle due sintesi coloriche possibili Sintesi sottrattiva E' quella usata nelle stampe su carta (stampanti, pitture, ) o sulle pellicole fotografiche e si basa sul principio per cui ogni colore è descrivibile come la sottrazione alla luce bianca (che per definizione contiene tutti i colori) di determinati colori In particolare è possibile verificare che mediante opportuna sottrazione dei tre colori fondamentali della sintesi sottrattiva (Blu/Ciano, Giallo, Rosso/Magenta ovvero Cyan-Yellow- Magenta alias CYM) è possibile praticamente ottenere quasi ogni altro colore (a patto però di poter partire, ovvero avere a disposizione, il colore bianco) Sintesi additiva E' quella usata ad esempio dall'occhio umano, dai monitor o dalla fotocamere/telecamere digitali e si basa sul principio per cui punti di colore diverso e sufficientemente vicini e piccoli, producono come effetto complessivo quello di un nuovo colore, nato per addizione dei due In particolare è possibile verificare che mediante opportuna addizione dei tre colori fondamentali della sintesi additiva (Rosso, Verde, Blu ovvero Red-Green-Blue alias RGB) è possibile ottenere quasi ogni altro colore (a patto però di poter partire, ovvero avere a disposizione, l'assenza di colore ovvero il nero) 8
Sintesi sottrattiva e additiva Sfortunatamente nessuna delle due tecniche permette di descrivere tutti i possibili colori visibili e peraltro non vi è neppure una corrispondenza biunivoca tra le due sintesi (un colore CYM non è sempre mappabile in un RGB e viceversa) Ci sono anche sintesi quadricromiche La CYMK ovvero Cyan, Yellow, Magenta, Key (o secondo alcuni BlacK) è nata per sopperire al problema dell'impossibilità di generare il nero in CYM; infatti l'applicazione massima dei tre filtri non genera il nero puro ma una sua scarsa approssimazione (un marrone molto scuro, chiamato bistro o fuliggine stemperata) Altra sintesi famosa è l'rgba E' l'acronimo di Red-Green-Blue-Alpha ed indica un sistema a 4 canali per cui i primi tre indicano la variante del rispettivo colore fondamentale ed il quarto valore indica invece il livello di trasparenza 9
Le terne di colori Qualunque sia comunque la sintesi scelta per il nostro sistema/immagine, è comunque sempre possibile però associare al nostro colore voluto una terna di valori che descrivono la variante dei tre colori fondamentali usati (CYM o RGB) Questo vuol dire ad esempio che per descrivere un colore in sintesi CYM è sufficiente che codifichi un valore per il ciano, uno per il giallo ed uno per il magenta La codifica della singola variante di uno dei colori fondamentali si fa usando delle scale graduate secondo l'intensità del colore stesso (ad esempio si descrive ciascun colore su 8 bit, ovvero individuando 256 distinte varianti del colore) Il valore massimo (255) indica la massima intensità della variante, mentre il valore minimo (0) indica quella inferiore La terna RGB(0,0,0) corrisponde dunque al nero mentre la terna RGB(255,255,255) corrisponde al bianco Le terne equilibrate RGB(x,x,x) con x tra 0 e 255 generano varianti del grigio (più o meno scuro a seconda del valore di x) A seconda del dispositivo di visualizzazione/acquisizione è possibile che la mappatura dei colori sia spostata o riscalata rispetto a quella teorica (ad esempio alcuni monitor usano RGB(16,16,16) per il nero e RGB(235,235,235) per il bianco 10
Le palette Spesso per evitare di dover sprecare tanto spazio per descrivere i colori di punti/oggetti (fino a 4 byte per il Deepcolour ed anche oltre), si usano accorgimenti e strategie di compressione delle informazioni senza perdita L'idea è molto semplice Data un'immagine, si analizza dapprima tutti i colori ivi presenti e li si intabellano contandoli una sola volta (quindi se lo stesso colore compare 10 volte in un immagine, nella nuova tabella comparirà una sola volta) Al termine dell'analisi ho ottenuto una nuova tabella (nota col termine di palette) con tutte le terne RGB di tutti e soli i colori presenti nell'immagine, ma contati una sola volta (quindi certamente molto più piccola rispetto a quella originale) A ciascuno punto/oggetto della mia immagine ora associo non direttamente la terna del colore (che occupa molto spazio) ma semplicemente l'indice della palette associato a quel colore (trattandosi di un indice su un set sperabilmente piccolo di colori, sarà un numero esprimibile su pochi bit, magari 8 o meno) Il vantaggio è il buon tasso di compressione ottenuto Lo svantaggio è la maggior difficoltà di elaborazione ed il fatto che la palette deve viaggiare assieme all'immagine stessa per permetterne la decodifica) 11