UNIVERSITÀ DEGLI STUDI DI TRENTO
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica
Tesi di Laurea
Algoritmi parametrici per la
segmentazione di immagini digitali
basati sull’analisi congiunta delle
caratteristiche di colore e tessitura.
Relatore:
Prof. Francesco De Natale
Responsabile esterno:
Dott. Stefano Messelodi
Laureando:
Lorenzo Dematté
Anno accademico 2001–2002
2
Ringraziamenti
Il primo gruppo di persone che desidero ringraziare sono i ricercatori
del gruppo TeV-SSI dell’ Istituto di Ricerca Scientifica e Tecnologica
(ITC-IRST). Ringrazio principalmente due persone, Carla Maria Modena
e Stefano Messelodi, per avermi introdotto con pazienza i concetti dell’Image
Processing, per avermi spiegato e fatto capire un sacco di cose e per aver
fatto veramente un ottimo lavoro per render leggibile e corretta questa tesi.
Grazie a loro adesso non sono più cosı̀ ignorante in questo campo.
Voglio anche ringraziare Roberto Brunelli per le piacevoli discussioni sulla
Computer Graphics, sul C++ e Java e sul Lego Mindstorm, Michele
Zanin, Filippo Bertamini, Claudio Andreatta, Dimitri Giordani, Alessandro
Giacomini e Oswald Lanz per l’amicizia e la pazienza dimostratami e i miei
“compagni d’avventura” Alessandro Roat e Alessandro Santuari.
Desidero ringraziare tutti i miei amici per il loro supporto e per la loro
pazienza, per avermi sopportato quando sono stato assente e scontroso in
questo periodo.
Infine, il ringraziamento più grande ai miei genitori, a mio padre Maurizio
e mia madre Licia, che hanno sempre creduto in me, e a mia sorella Chiara,
che ha letto questa tesi correggendo tutti gli accenti e gli apostrofi anche se
non ha la minima idea di ciò di cui si parla.
Indice
1 Introduzione
7
2 Il colore
2.1 Rappresentazione del colore . . . . . . . . . . . . . . .
2.1.1 Il modello Fisico del colore . . . . . . . . . . . .
2.1.2 Il modello Percettivo del colore . . . . . . . . .
2.1.3 La teoria tricromatica . . . . . . . . . . . . . .
2.1.4 Conciliare le tre teorie . . . . . . . . . . . . . .
2.2 Spazi di colore in computer graphics e image processing
2.2.1 RGB . . . . . . . . . . . . . . . . . . . . . . . .
2.2.2 RGBN (o r0 g 0 b0 ) . . . . . . . . . . . . . . . . . .
2.2.3 YUV . . . . . . . . . . . . . . . . . . . . . . . .
2.2.4 XYZ . . . . . . . . . . . . . . . . . . . . . . . .
2.2.5 CIE L*a*b* . . . . . . . . . . . . . . . . . . . .
2.2.6 HSV (HSI, HSL, HSB) . . . . . . . . . . . . . .
2.3 Misure di similarità e differenza tra colori . . . . . . . .
2.3.1 Norma L1 e L2 . . . . . . . . . . . . . . . . . .
2.3.2 Vector Angle . . . . . . . . . . . . . . . . . . .
2.3.3 Combinazione . . . . . . . . . . . . . . . . . . .
2.4 Misure di similarità tra zone di immagini a colori . . .
2.4.1 Istogrammi e Signature . . . . . . . . . . . . . .
2.4.2 La Earth Mover’s Distance . . . . . . . . . . . .
3 La tessitura
3.1 Trasformata Wavelet . . . . . . . . . . . . .
3.1.1 Filtri per la trasformata . . . . . . .
3.1.2 Tipo di decomposizione . . . . . . . .
3.1.3 Estrazione caratteristiche e metriche
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
10
10
11
13
13
17
17
18
19
19
20
21
23
24
26
26
28
28
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
32
34
36
37
38
.
.
.
.
.
4
INDICE
4 Tecniche di segmentazione
4.1 Approcci basati su misure di discontinuità . . . .
4.2 Approcci basati su misure di omogeneità . . . . .
4.2.1 Histogram thresholding . . . . . . . . . . .
4.2.2 Clustering . . . . . . . . . . . . . . . . . .
4.2.3 Region splitting & merge e Region growing
5 L’algoritmo proposto
5.1 Scelta iniziale dei semi
5.2 Strategia di growing .
5.3 Metriche di distanza .
5.4 Implementazione . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
46
47
47
47
48
.
.
.
.
50
53
58
60
62
6 Risultati sperimentali
7 Conclusioni
7.1 Conclusioni . . . . . . . . . . . . .
7.1.1 Il framework . . . . . . . . .
7.1.2 Il colore . . . . . . . . . . .
7.1.3 La tessitura . . . . . . . . .
7.1.4 Selezione dei candidati . . .
7.1.5 Selezione dei semi . . . . . .
7.2 Lavori futuri . . . . . . . . . . . . .
7.2.1 Miglioramenti dell’algoritmo
7.2.2 Utilizzi dell’algoritmo . . . .
67
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
81
81
81
81
82
82
82
83
83
83
A Edge detection
84
A.1 Difference Vector . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.2 Entropy Thresholding . . . . . . . . . . . . . . . . . . . . . . . 85
B Polimorfismo statico vs. polimorfismo dinamico
87
C L’algoritmo del trasporto
90
D Utilizzo di istruzioni SIMD
96
Elenco delle figure
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
3.1
3.2
3.3
3.4
3.5
5.1
Una sfera ombreggiata . . . . . . . . . . . . . . . . . . . . .
Risposta dei tre tipi di coni al variare della lunghezza d’onda
Test percettivo per il color-matching . . . . . . . . . . . . .
Funzioni di color matching per i primari RGB . . . . . . . .
Funzioni di color matching per i primari XYZ . . . . . . . .
Lo spazio di colore RGB visto lungo la diagonale principale
dal bianco (0,0,0) al nero (1,1,1) e dal nero (1,1,1) al bianco
(0,0,0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Una fetta dello spazio di colore CIE XYZ . . . . . . . . . . .
Lo spazio di colore CIE Lab . . . . . . . . . . . . . . . . . .
Lo spazio di colore HSV . . . . . . . . . . . . . . . . . . . .
Piani di RGB a luminosità differente . . . . . . . . . . . . .
La signature dell’immagine Lena e i rispettivi pesi . . . . . .
.
.
.
.
.
12
14
14
15
16
.
.
.
.
.
.
18
19
21
22
25
30
La trasformata wavelet discreta (DWT, sopra) e la trasformata
wavelet a pacchetti (PKWT, sotto) . . . . . . . . . . . . . . .
L’immagine flower garden . . . . . . . . . . . . . . . . . . . .
La trasformata wavelet a pacchetti (PKWT) dell’immagine
flower garden . . . . . . . . . . . . . . . . . . . . . . . . . . .
La mappa delle classi di texture ottenuta dall’applicazione
dell’algoritmo proposto sull’immagine flower garden . . . . . .
Recenti ricerche psicofisiche hanno dimostrato che la percezione
del colore nel sistema visivo umano dipende dalle frequenze
spaziali fra i colori. Questo, tuttavia, era già stato intuito dai
pittori impressionisti cento anni prima. . . . . . . . . . . . . .
36
37
38
40
42
Lo schema dell’algoritmo di region growing proposto ed
implementato. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6
ELENCO DELLE FIGURE
5.2
5.3
5.4
5.5
5.6
5.7
5.8
Il metodo adottato per estrarre regioni dalla signature uniforme (regioni con texture) . . . . . . . . . . . . . . . . . . . .
Metodo per la selezione dei semi provenienti da criteri diversi.
Algoritmo per il growing basato sulla strategia proposta . . . .
Calcolo della distanza tra pixel e regione . . . . . . . . . . . .
Il digramma delle classi UML relativo alle classi che implementano le metriche . . . . . . . . . . . . . . . . . . . . . . .
Il digramma delle classi UML; per questo digramma, piuttosto
complesso, è stata adottata l’estensione basata sul colore
proposta per UML 2.0. L’utilizzo del colore aggiunge una
dimensione al digramma, rendendone più facile la comprensione. I colori adottati sono quelli proposti: giallo per le classi
centrali, quelle che rivestono un ruolo centrale nel digramma;
blu per le classi che rappresentano dati; arancione per i punti
di estensibilità; verde per le classi che nel digramma rivestono
un ruolo secondari; grigio per le classi provenienti da librerie .
Il digramma di sequenza UML relativo alle fasi di scelta iniziale
dei semi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1 L’immagine di test baboon . . . . . . . . . . . . .
6.2 Le prestazioni dell’algoritmo proposto a confronto
di JSEG . . . . . . . . . . . . . . . . . . . . . . .
6.3 L’immagine di test flower garden . . . . . . . . .
6.4 L’immagine di test parrots . . . . . . . . . . . . .
6.5 L’immagine di test house . . . . . . . . . . . . . .
6.6 L’immagine di test hand . . . . . . . . . . . . . .
6.7 L’immagine di test houses . . . . . . . . . . . . .
6.8 L’immagine di test newspaper . . . . . . . . . . .
6.9 L’immagine di test newspaper (continua) . . . . .
6.10 L’immagine di test flowers2 . . . . . . . . . . . .
6.11 L’immagine di test house2 . . . . . . . . . . . . .
6.12 L’immagine di test geneva1 . . . . . . . . . . . .
. . . . . .
con quelle
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
56
57
59
61
63
64
66
. 69
.
.
.
.
.
.
.
.
.
.
.
70
71
72
73
73
75
76
77
78
79
80
A.1 Gli indici dei pixel in un intorno 3x3 . . . . . . . . . . . . . . 84
C.1 I primi passi della prima fase . . . . . . . . . . . . . . . . . . . 92
C.2 Due esempi di ciclo . . . . . . . . . . . . . . . . . . . . . . . . 93
C.3 Uno scambio variabile uscente-entrante . . . . . . . . . . . . . 94
Capitolo 1
Introduzione
“E’ giunto il momento -disse il Tricheco- di parlare di molte cose”
L.Carrol, Alice nel paese delle meraviglie
La segmentazione delle immagini è un problema chiave nella computer
vision. La segmentazione è un processo che permette di suddividere
l’immagine in regioni significative che corrispondono a oggetti, o parti
di oggetti, in essa rappresentati, un primo passo verso l’estrazione di
informazioni semantiche da una scena. In principio (fino ai primi anni ’80) la
ricerca si è concentrata su tecniche volte ad estrarre il contorno degli oggetti,
come l’edge detection, o a separare porzioni di oggetti, come il thresholding.
Queste tecniche, dette bottom–up, realizzano la segmentazione partendo da
caratteristiche di basso livello dell’immagine, a prescindere dal contenuto
semantico.
Una segmentazione “perfetta” in oggetti significativi non è ottenibile senza
una conoscenza di alto livello dell’immagine. La ricerca di oggetti nella scena
ha portato allo sviluppo di tecniche basate su modelli, come gli active contour
snakes o il template matching. Queste tecniche, dette top–down, permettono
di ottenere dei buoni risultati se applicate a problemi specifici.
Spesso la conoscenza a priori della scena non è sufficiente, o non è disponibile,
e quindi c’è bisogno di un metodo per estrarre delle regioni primitive che
forniscano la base di partenza per i modelli utilizzati dalle tecniche top–down.
8
Introduzione
Nell’estrazione delle regioni primitive, che costituiscono una segmentazione
di primo livello, i metodi bottom–up giocano un ruolo fondamentale. L’accuratezza della segmentazione iniziale influenza in maniera pesante le fasi
successive.
Per questi motivi il metodo di segmentazione iniziale deve essere flessibile,
cioè deve fornire risultati soddisfacenti quando applicato a tipi di immagini
differenti, e deve fornire una segmentazione il più accurata possibile,
cercando di evitare la sotto-segmentazione (fusione nella stessa zona di oggetti
semanticamente diversi) e di limitare la sovra-segmentazione (divisione in
zone diverse di un oggetto unico dal punto di vista semantico).
La segmentazione primaria di un’immagine, non presuppone nessuna
conoscenza semantica della scena, e quindi non è possibile garantire che
questi vincoli siano soddisfatti. Tuttavia si può garantire la suddividivisione
di un’immagine in regioni differenti in modo che ogni regione sia omogenea o
uniforme rispetto a un dato criterio e che l’unione di due regioni non lo sia.
In [9] è data la seguente definizione formale del problema: Detto P ()
un predicato di omogeneità definito su un gruppo di pixel connessi, la
segmentazione è la partizione dell’insieme F in sottoinisiemi connessi -o
regioni- (S1 , S2 , ..., Sn ) non vuoti tali che:
n
[
Si = F
Si ∩ Sj = ® (i 6= j)
i=1
Con il predicato P (Si ) = true per ogni regione Si e P (Si ∪ Sj ) = f alse con
(i 6= j) e Si , Sj regioni confinanti.
Facendo cosı̀ si sposta il concetto di segmentazione dalla identificazione degli
oggetti semantici ad un requisito di omogeneità sulle regioni (insiemi di pixel
connessi).
Per ottenere una segmentazione primaria il più vicina possibile a quella
desiderata è fondamentale la scelta, spesso dettata dall’ambito applicativo,
del predicato di omogeneità. Infatti la partizione di un’immagine in regioni
omogenee non garantisce la suddivisione in oggetti semantici: citando [12],
“The image segmentation problem is basically one of psycophysical perception,
and therefore not susceptible to a purely analytical solution” (il problema della
segmentazione di immagini è un problema di percezione psico-fisica e quindi
non è risolubile in maniera completamente analitica). Il problema della
segmentazione automatica (non supervisionata) di immagini è mal definito,
9
proprio a causa del fatto che gli oggetti semantici spesso non corrispondono
a zone omogenee rispetto a caratteristiche di basso livello (colore, tessitura,
...). Tuttavia, se misuriamo la similarità tra zone in maniera simile a quella
dell’occhio umano, cioè usiamo misure di similarità e di omogeneità di regioni
corrette da un punto di vista percettivo, possiamo avvicinarci al risultato. E’
stato dimostrato che la percezione del colore e della tessitura è fondamentale
nella visione umana [2].
L’approccio migliore quindi sembra quello di seguire e cercare di imitare nel
modo più fedele possibile il sistema visivo umano, utilizzando le informazioni
congiunte di colore e tessitura per ottenere delle misure di similarità e
omogenità corrette da un punto di vista percettivo.
Negli ultimi anni sono state introdotte nuove metriche per la misura
della distanza tra colori [31] e della distanza colorimetrica tra immagini
o tra regioni all’interno di un’immagine [23], nuovi approcci a tecniche di
segmentazione esistenti [18, 33, 30] e nuovi metodi per l’analisi, la descrizione
e la classificazione di tessiture [1, 25, 19].
Ai progressi nei singoli campi, non ha fatto riscontro un uguale progresso
nell’utilizzo combinato di questi strumenti applicati alla segmentazione di
immagini.
Questo lavoro di tesi si propone di fare un passo in avanti in questa direzione,
introducendo un nuovo algoritmo per la segmentazione, basato sulla tecnica
del region growing e sull’utilizzo congiunto di caratteristiche di colore e
tessitura. Il capitolo 2 introduce gli aspetti più importanti legati all’analisi
del colore, con un breve accenno alla teoria del colore, la descrizione dai vari
spazi di colore esistenti, la presentazione delle metriche usate per misurare
la distanza colorimetrica tra colori e tra zone di un’immagine. Nel capitolo 3
viene dato un ragguaglio sulle varie tecniche di estrazione di caratteristiche
da una tessitura, con particolare attenzione ai metodi di analisi nello spazio
delle frequenze usando le Wavelet.
Nel capitolo 4 viene fornita un’introduzione al problema della segmentazione
con i vari approcci utilizzati in letteratura. L’algoritmo proposto per la
segmentazione basata su colore e tessitura viene illustrato in dettaglio nel
capitolo 5. Il capitolo 6 è dedicato ai risultati sperimentali, e le conclusioni
sono presentate nel capitolo 7.
Capitolo 2
Il colore
“Le ombre non sono nere; nessun ombra è nera. La natura conosce solo i
colori. Bianco e nero non sono colori”
A. Renoir
2.1
Rappresentazione del colore
Il primo aspetto da prendere in esame è quello di come rappresentare i colori
in modo corretto sia da un punto di vista fisico che percettivo.
A questo scopo vengono introdotte le tre maggiori teorie sulla rappresentazione dei colori e dello spazio in cui s ono inseriti: il modello Fisico del
colore, il modello Percettivo del colore e la teoria tristimolare.
2.1.1
Il modello Fisico del colore
La branca della fisica che si occupa di descrivere le proprietà della luce e del
colore si chiama colorimetria.
La colorimetria specifica il colore usando tre coefficienti: la lunghezza d’onda
dominante, la purezza e la luminanza.
Come è noto, la luce è energia elettromagnetica nella regione dello spettro che
ha lunghezza d’onda compresa tra 400 e 700 nm, che è percepita dall’occhio
2.1 Rappresentazione del colore
11
umano come colore dal viola al rosso.
Un colore è quindi rappresentabile tramite una distribuzione spettrale di
energia nella zone del visibile.
Volendo campionare uno spettro di energia senza perdita di informazione
si dovrebbe utilizzare un numero praticamente infinito di livelli, tuttavia
possiamo descrivere l’effetto visivo di ogni distribuzione con una tripla
(lunghezza d’onda dominante, purezza e luminanza).
E’ importante notare che una tripletta non rappresenta univocamente
un’unica distribuzione: molte distribuzioni di energia differenti producono
lo stesso colore, “sembrano” uguali, e sono descritte dalla stessa tripletta.
La relazione tra distribuzioni e triplette è dunque di molti-a-uno.
2.1.2
Il modello Percettivo del colore
Una volta introdotto lo spazio di colore fisico, è necessario fare un’osservazione importante: il colore non è una proprietà fisica degli oggetti, come il
loro peso o il loro volume. Il colore è una rappresentazione percettiva della
distribuzione di energia elettromagnetica emessa o riflessa da un oggetto, un
prodotto del sistema visivo umano [3].
Lo spazio di colore percettivo è la rappresentazione che la nostra mente dà
alla percezione del colore, a come i colori sono in relazione l’uno con l’altro
e che posizione occupano relativamente agli altri colori.
La percezione intuitiva e umana del colore solitamente si poggia su tre
quantità, chiamate hue, saturazione e luminosità (hue si può tradurre
approssimativamente con “tinta”, ma per evitare confusioni in questa tesi
si fa riferimanto ad essa con il termine originale).
Questi tre termini corrispondono grossomodo alle nozioni fisiche di lunghezza
d’onda dominante, purezza e luminanza.
Infatti la hue indica il colore puro a cui si fa riferimento, come rosso,
giallo, verde, viola. La saturazione indica quanto il colore è distante da
un grigio della stessa intensità. Per esempio, il rosso è molto saturo, il rosa
poco, e in generale i colori pastello sono poco saturi. La luminosità indica
(indipendentemente dalla lunghezza d’onda), l’intensità della luce riflessa o
emessa da un oggetto; per fare un esempio, un oggetto illuminato in modo
non uniforme, come la sfera in figura 2.1, ha hue e saturazione costanti ma
intensità variabile.
Per poter avere un’utilità pratica nell’analisi di immagini, i colori devono
12
Il colore
Figura 2.1: Una sfera ombreggiata
essere messi in relazione tra di loro all’interno di uno spazio e misurati. Per
fare ciò possiamo confrontare visivamente un campione di colori “sconosciuti”
(cioè non ancora classificati) con un insieme di campioni standard. I campioni
e i colori sconosciuti vanno osservati sotto una luce standard, visto che il
colore riflesso da un oggetto dipende sia dal colore della superficie che da
quello della luce. Uno spazio di colore costruito usando questa tecnica è
lo spazio di colore di Munsell, uno spazio 3D che ha come dimensioni la
hue, la saturazione e la luminosità. In questo spazio i colori sono ordinati
in modo da avere un’uguale distanza percettiva dai vicini. Uno spazio di
colore che rispetta questa proprietà è detto color-order system. Da questo
modello si può anche notare come il colore aggiunga una notevole quantità
di informazione rispetto alla scala di grigio: la sola luminosità veicola la
stessa quantità di informazione di un valore in scala di grigio, e in più si ha
a disposizione l’informazione di altre due componenti che rappresentano la
crominanza.
Infine è necessario fare un appunto: si è già detto che la rappresentazione
dello spazio di colore di Munsell è soggettiva.
Questo significa che, se da un lato questa rappresentazione è percettivamente
corretta, dall’altro il posizionamento e la distinzione tra colori dipendono dal
giudizio di un osservatore, dall’illuminazione, dalla grandezza dei campioni
da confrontare e dagli altri colori presenti nella scena, come lo sfondo.
Potrebbe quindi essere problematico definire in modo univoco e quantitativo
lo spazio di colore di Munsell.
2.1 Rappresentazione del colore
2.1.3
13
La teoria tricromatica
La teoria tricromatica si basa sulla constatazione che all’interno della retina
nell’occhio umano ci sono tre tipi di recettori sensibili al colore.
Questi recettori, detti coni, hanno sensibilità massima a radiazione di
lunghezza d’onda diversa, corrispondenti circa a quelle della luce rossa, verde
e blu.
Questa teoria è molto attraente, in quanto porta a un modello di rappresentazione del colore, il modello tricromatico, che è molto semplice e conosciuto.
Questo modello è basato sull’idea che la somma in parti diverse di rosso, verde
e blu (i tre colori fondamentali, detti primari) possa generare l’intero spazio
dei colori.
Questa assunzione è quasi vera: con questo modello è possibile generare una
numero notevole di colori differenti (altrimenti i monitor CRT, basati su
questa tecnica, non funzionerebbero), ma non tutti. Alcuni colori nella zona
del viola non possono essere riprodotti con una mistura additiva di rosso,
verde e blu.
Tuttavia lo spazio di colore più noto e usato in computer graphics è lo
spazio basato su questo modello, lo spazio RGB. Questo spazio è molto noto e
usato perchè la maggior parte dei sensori fisici alla luce colorata (come i coni
nell’occhio umano o i sensori CCD nelle telecamere) usano questo modello,
cosı̀ come i monitor CRT. Si può dire che lo spazio RGB sia quello “nativo”
per la computer graphics.
2.1.4
Conciliare le tre teorie
Fino a questo punto sono state introdotte tre teorie della rappresentazione
dello spazio di colore in apparente contrasto tra di loro, ognuna con i suoi
punti di forza e le sue debolezze: il modello fisico dà una descrizione oggettiva
e quantitativa dei colori; il modello percettivo segue il modo umano di
rappresentare il colore come composizione di hue, saturazione e luminosità
ed è quindi percettivamente corretto; il modello tricromatico si basa sulla
natura tristimolare della retina, dei sensori CCD e dei monitor CRT ed è
quindi molto semplice da descrivere e usare con un computer.
Vediamo come i tre modelli delineati da queste terorie possano essere concliati
14
Il colore
tra loro.
Il modello fisico e la teoria tristimolare: lo spazio XYZ
L’anello di giunzione tra il modello fisico e la teoria tristimolare è dato da
due funzioni chiamate spectral-response (risposta spettrale) e color-matching
(corrispondenza di colore).
Figura 2.2: Risposta dei tre tipi di coni al variare della lunghezza d’onda
La prima funzione (figura 2.2) indica la risposta (in percentuale di luce
assorbita) dei tre tipi di coni presenti nella retina umana al variare della
lunghezza d’onda della radiazione elettromagnetica all’interno dello spettro
del visibile.
Questa funzione ci permette di costruire la seconda, la funzione di color-
Figura 2.3: Test percettivo per il color-matching
matching, che indica la quantità di luce rossa, verde e blu necessaria per un
2.1 Rappresentazione del colore
15
osservatore medio per avere un colore che corrisponda esattamente a un colore
C di luminanza costante, per ogni valore di lunghezza d’onda dominante nello
spettro del visibile.
In pratica, per ogni colore di riferimento se ne crea un altro miscelando luce
rossa, verde e blu nelle quantità necessarie per avere un colore uguale sia da
un punto di vista percettivo che fisico. (figura 2.3).
Purtoppo osservando la figura 2.4 si nota che ci sono dei valori negativi: per
Figura 2.4: Funzioni di color matching per i primari RGB
ottenere certi colori si dovrebbe “sottrarre” luce di uno dei tre colori primari.
Questo non fisicamente possibile: per definire il digramma si aggiunge la
quantità di luce necessaria al campione.
Questo risultato conferma l’affermazione fatta in precedenza: ci sono colori
non ottenibili come combinazione lineare additiva di rosso, verde e blu.
Per risolvere questo problema la commissione CIE (Commission International
de l’Eclairage creò nel 1931 un nuovo spazio di colore, lo spazio XYZ. Questo
è uno spazio colore tridimansionale come RGB, ma i suoi tre colori primari
(X, Y e Z) sono definiti in tale che tutti i colori percepiti dall’occhio umano
siano rappresentabili tramite una combinazione lineare di essi: ogni colore
visibile C avente distribuzione spettrale d’energia P (λ), è definito come
C = XX + Y Y + ZZ
dove:
Z
X=k
P (λ)x̄λ dλ
Z
Y =k
P (λ)ȳλ dλ
16
Il colore
Z
Z=k
P (λ)z̄λ dλ
Le funzioni di color-matching x̄λ , ȳλ e z̄λ sono state ricavate da osservazioni
sperimentali e tabulate a intevalli di 1nm. Inolter il primario Y ha associata
una funzione di matching che corrisponde alla risposta percettiva alla
luminosità dell’occhio umano.
Ricordo che una funzione di color-matching è una funzione che indica la
quantità di ogni primario (X, Y , Z o R, G, B) neccessaria a un osservatore
medio per avere un colore che corrisponda esattamente a un colore C di
luminanza costante, per ogni valore di lunghezza d’onda dominante nello
spettro del visibile.
E’ interessante notare che le tre funzioni color-matching dello spazio CIE sono
combinazioni lineari delle funzioni color-matching per i tre primari di RGB.
Ma, mentre le funzioni color-matching dello spazio RGB hanno valori negativi
(cioè non tutti i colori sono rappresentabili tramite addizione di rosso, verde
e blu), le funzioni color-matching dello spazio XYZ sono positive (cioè tutti
i colori visibili sono ottenibili tramite addizione di X, Y e Z).
Figura 2.5: Funzioni di color matching per i primari XYZ
Il modello percettivo e lo spazio colore XYZ: L*a*b* e L*u*v*
Lo spazio XYZ riesce a combinare il modello fisico e la teoria tristimolare.
Tuttavia rimane un problema nel sistema della CIE.
Consideriamo la distanza tra il colore C1 (X1 , Y1 , Z1 ) e il colore C1 + ∆C, e
la distanza tra il colore C2 (X2 , Y2 , Z2 ) e il colore C2 + ∆C.
La distanza misurabile è la stessa, ma la distanza percepita è spesso
2.2 Spazi di colore in computer graphics e image processing
17
differente.
Da qui sorge la necessità di avere uno spazio percettivamente uniforme,
uno spazio in cui colori che sono ugualmente distanti siano percepiti come
ugualmente distanti da un osservatore umano.
Nel 1976 e negli anni seguenti sono stati sviluppati dal CIE due spazi che
possiedono questa caratteristica, ottenibili come trasformazione non lineare
dello spazio XYZ. Questi spazi sono lo spazio CIE L*a*b* e lo spazio CIE
L*u*v*.
Per dettagli sullo spazio Lab e su come sia stato dimostrato che questo spazio
è percettivamente uniforme, si veda le sezione successiva.
2.2
Spazi di colore in computer graphics e
image processing
Dopo questa introduzione sulle rappresentazioni fisica, percettiva e tristimolare del colore, vediamo in dettaglio gli spazi di colore più significativi e usati
in computer graphics e nell’ image processing.
2.2.1
RGB
Lo spazio di colore RGB è considerato lo spazio nativo della computer
graphics (la codifica su file, i monitor CRT, i sensori CCD di telecamere
e scanner e la parte di rasterizzazione delle schede grafiche solitamente usano
questo modello), ed è quindi il più diffuso.
RGB impiega un sistema di coordinate cartesiane, e può essere rappresentato
come un cubo unitario, con bianco e nero sui vertici della diagonale principale
e i livelli di grigio sulla diagonale principale (figura 2.6).
RGB è un buon spazio per la computer graphics, ma non per l’image
processing and analysis.
I suoi difetti maggiori sono l’alta correlazione tra i tre canali (variando
l’intensità, tutte e tre le componenti cambiano) e il fatto che non è
percettivamente uniforme.
Tuttavia, questi difetti possono essere mitigati o resi nulli da una scelta
accurata della metrica, come viene spiegato in seguito.
18
Il colore
Figura 2.6: Lo spazio di colore RGB visto lungo la diagonale principale dal
bianco (0,0,0) al nero (1,1,1) e dal nero (1,1,1) al bianco (0,0,0)
Il vantaggio principale di questo spazio è che è subito disponibile e non
necessita di nessuna trasformazione.
2.2.2
RGBN (o r0 g 0 b0 )
Questo spazio di colore deriva direttamente da RGB, togliendo uno dei suoi
difetti: la forte dipendenza ai cambiamenti di intensità.
Questo risultato è ottenuto normalizzando i colori, rendendo cosı̀ uniformi
le variazioni di intensità attraverso la distribuzione spettrale. Lo spazio di
colore normalizzato è definito come:
r=
R
R+G+B
g=
G
R+G+B
b=
B
R+G+B
Tuttavia RGBN ha un altro problema: se l’intensità è molto bassa, i colori
normalizzati sono molto rumorosi: piccole variazioni producono oscillazioni
notevoli.
2.2 Spazi di colore in computer graphics e image processing
2.2.3
19
YUV
Questo è il secondo spazio, dopo RGB, che può essere definito “hardwareoriented”. La sua realizzazione e la sua diffusione, infatti, sono legati
a dispositivi hardware, in questo caso televisori, telecamere e schede di
acquisizione video.
Lo spazio YUV è infatti quello preferito per la trasmissione di video, sia
analogico che digitale. Anche gli algoritmi di compressione JPEG e MPEG
si appoggiano su questo spazio di colore per compiere le loro elaborazioni
[28].
Esistono diverse formule per ricavare YUV da RGB; tutte sono trasformazioni
lineari, ma differiscono per i coefficienti usati. In questo lavoro sono state
adottate le seguenti formule:
y = 0.299r + 0.587g + 0.114b
u = (b − y) ∗ 0.565
v = (r − y) ∗ 0.713
2.2.4
XYZ
Di XYZ si è già parlato nei paragrafi precedenti. I suoi tre primari sono
X, Y , Z e, come si è visto in precedenza, le funzioni di color-matching di
XYZ sono combinazioni lineari di quelle di RGB; i colori di XYZ sono quindi
ottenibili con una trasformazione lineare da RGB.
Figura 2.7: Una fetta dello spazio di colore CIE XYZ
20
Il colore
E’ interessante notare che Y ha una funzione di color-matching che corrisponde esattamente alla funzione di risposta alla luminosità dell’occhio
umano.
La luminosità è quindi ottenibile direttamente da Y, applicando una
trasformazione che tenga conto della risposta non lineare dell’occhio umano:
L∗ = 116
³ Y ´1
3
− 16
Y0
´
Y
+ 0.13793 − 16
L∗ = 116 7.787 ·
Y0
³
Y
> 0.008856
Y0
Y
≤ 0.008856
Y0
(2.1)
E’ importante notare che la trasformazione da RGB a XYZ, e anche da XYZ
agli altri spazi CIE, dipende dalla scelta del “punto di bianco”, cioè delle
coordinate (X0 , Y0 , Z0 ) del colore definito come bianco.
CIE definisce diversi punti di bianco, a seconda della temperatura e della
natura della sorgente luminosa: ci sono punti di bianco per la luce naturale,
per lampade fluorescenti, a filamento e anche per sorgenti a emissione come
monitor o televisori.
In questo lavoro è stato usato il punto di bianco D65, che corrisponde al
punto di bianco per i monitor CRT con temperatura di colore di 6500k e che
viene comunemente usato come simulazione della luce solare.
2.2.5
CIE L*a*b*
Il principale vantaggio per l’uso di Lab nell’image processing sta nel fatto che
Lab è uno spazio percettivamente uniforme.
Questa proprietà di Lab è stata provata anche in maniera sperimentale
usando il metodo delle JND (Just noticeable difference, differenze appena
notabili).
A un osservatore vengono proposte una serie di coppie di tavole, e questi
deve dire quali gli sembrano indistinguibili. I colori indistinguibili vengono
raggruppati in blocchi e la posizione di questi blocchi viene individuata
all’interno dello spazio colore.
Se questi blocchi sono piccoli, di forma ellissoidale, e con misure simili tra
di loro, lo spazio è percettivamente uniforme [3].
I risultati dell’esperimento dimostrano che Lab è percettivamente uniforme
quando come misura di distanza tra i colori viene usata la distanza euclidea
(vedi il prossimo paragrafo), ma solo se le distanze sono piccole, altrimenti
2.2 Spazi di colore in computer graphics e image processing
21
Figura 2.8: Lo spazio di colore CIE Lab
tutto quello che si può dire del confronto tra due colori è che sono diversi.
Lab è ottenibile a partire dallo spazio CIE XYZ tramite delle trasformazioni
non lineari.
L∗ = 116
³
L∗ = 116 7.787 ·
∗
³ Y ´1
3
Y0
Y
> 0.008856
Y0
Y
≤ 0.008856
Y0
− 16
´
Y
+ 0.13793 − 16
Y0
a = 500
µ³
X ´ 13
b∗ = 200
−
X0
µ³ ´ 1
Y
3
Y0
−
(2.2)
³ Y ´1 ¶
3
Y0
³ Z ´1 ¶
3
Z0
Si noti che L* è la luminosità come definita in (2.1).
2.2.6
HSV (HSI, HSL, HSB)
Questi quattro spazi di colore sono molto simili tra di loro: cambia solo la
definizione della luminosità.
V , I, L e B infatti indicano rispettivamente Value, Intensity, Luminance e
Brightness.
Questo spazio è derivato direttamente dallo spazio di colore di Munsell (vedi
paragrafo “Il modello percettivo”) ed è quindi intuitivo e orientato all’utente,
piuttosto che all’hardware [11].
22
Il colore
Lo spazio HSV è rappresentato geometricamente attraverso un sistema di
coordinate cilindriche, e il sottoinsieme dello spazio all’interno del quale il
modello è definito è una piramide a base esagonale o un cono.
Delle tre coordinate cilindriche, la hue è l’angolo, la luminosità (value) è
l’altezza e la saturazione è il raggio.
Figura 2.9: Lo spazio di colore HSV
H = arctan
³
√
´
3(G − B)
(R − G) + (R − B)
V = max{R, G, B}
V − min{R, G, B}
V
Osservando la figura 2.9 si nota che il rosso si trova a 0 gradi, il verde a
120 e cosı̀ via; colori complementari sono scostati di 180 gradi.
Lo spazio HSV è diffuso e usato in image processing, e presenta notevoli
vantaggi pratici.
Per segmentare oggetti in base al colore, senza preoccuparci di ombreggiature
o lucentezze, possiamo applicare algoritmi noti per le immagini a scala di
grigio solo alla hue.
Possiamo anche applicare efficacemente soglie separate ai tre componenti,
per formare regioni di partenza per un algoritmo di region growing.
La Hue è particolarmente utile in presenza di effetti dovuti alla geometria
e all’illuminazione. E’ stato dimostrato che se l’illuminazione proviene da
luce bianca, la hue è invariante rispetto a ombre, ombraggiature e lucentezze
(shadows, shading and highlights).
S=
2.3 Misure di similarità e differenza tra colori
23
Purtroppo questo spazio presenta anche alcuni seri svantaggi che ne pregiudicano o ne rendono problematico l’utilizzo.
Infatti, per valori di V prossimi o uguali a 0, la hue e la saturazione non sono
definiti e per valori di S (saturazione) prossimi o uguali a 0, la hue non è
definita.
Questa ultima singolarità della Hue vicino all’asse del cilindro/piramide non
è eliminabile, e una piccola variazione nei valori di input R, G o B può
portare a un grande salto nei valori trasformati.
Infine valori della hue vicino alle singolarità sono numericamente instabili,
e le singolarità possono portare a discontinuità nella rappresentazione dei
colori.
2.3
Misure di similarità e differenza tra colori
Un passo importante che va affrontato quando si passa da immagini a scala
di grigio a quelle a colori è la definizione di una metrica (o misura) per la
distanza. In un’immagine a scala di grigio, la distanza tra due valori si può
esprimere con una semplice differenza, visto che i valori sono scalari.
Lo stesso non vale per immagini a colori, i cui valori sono vettori composti
dalle tre componenti cromatiche. L’operazione di differenza è sı̀ definita
anche su vettori, ma il risultato non ci da una misura della distanza. Occorre
quindi usare metriche differenti.
In letteratura sono state adottate diverse misure: la più usata è la distanza
euclidea, ma è molto diffuso anche il metodo di effettuare misure basate sulla
differenza di intensità sui singoli piani per poi combinare il risultato.
In questo lavoro sono state studiate e implementate tre misure di distanza:
norma L1 , norma L2 (la distanza euclidea) e Vector Angle (angolo vettore o
distanza angolare).
L’obiettivo è sempre quello di copiare la percezione umana, il concetto
umano di distanza e similarità tra colori. Quindi la bontà di una metrica
va misurata in termini di fedeltà alla percezione umana del colore. Colori
vicini per un osservatore devono dar luogo a misure piccole (distanza ridotta),
mentre colori dissimili devono produrre distanze grandi.
E’ evidente che la bontà di una metrica dipende dallo spazio di colore su cui
è applicata. Se i colori sono disposti nello spazio in modo che colori simili
siano vicini, la distanza euclidea è una buona misura di similarità.
24
Il colore
Spazi che godono di questa proprietà si dicono percettivamente uniformi.
Lab, per esempio, è uno spazio percettivamente uniforme (si veda il paragrafo
precedente).
2.3.1
Norma L1 e L2
La norma L1 è una misura molto semplice, definita come la somma del valore
assoluto delle differenze tra i componenti.
E’ una misura piuttosto diffusa perché è semplice e veloce da calcolare,
tuttavia in questo lavoro non sarà esaminata approfonditamante perché molte
delle considerazioni che saranno fatte a proposito della norma L2 valgono
anche per la norma L1 . Si è quindi preferito concentrarsi sulla distanza
euclidea, che è più complessa e dovrebbe garantire risultati leggermente
migliori rispetto alla norma L1 .
Questa misura è usata di solito per calcolare la distanza in uno spazio a N
dimensioni. E’ definita come:
DE (v~1 , v~2 ) = kv~1 − v~2 k
(2.3)
dove kxk è la norma L2 . Per uno spazio di colore tricromatico (a tre
componenti) la formula diventa:
q
DE (v~1 , v~2 ) =
(v1,1 − v2,1 )2 + (v1,2 − v2,2 )2 + (v1,3 − v2,3 )2
(2.4)
Il problema della distanza euclidea è che in spazi come RGB (ma anche in
HSV e, in misura minore, anche in Lab), è molto sensibile alle variazioni
di luminosità. Infatti la distanza euclidea rappresenta nello stesso momento
differenze in luminosità, saturazione e tinta.
Lo spazio di colore RGB può essere rappresentato con un cubo unitario,
la cui altezza, larghezza e profondità sono le tre componenti RGB. Un singolo
colore quindi può esser visto come un punto in questo spazio tridimenzionale,
o come un vettore che congiunge l’origine (0, 0, 0) a questo punto.
Moltiplicando questo vettore per una costante α si aumenta la luminosità
lasciando inalterata la tinta (figura 2.10).
v~2 = α · v~2
La distanza euclidea tra i due vettori cambia in modo notevole, visto che
tutte e tre le componenti sono cambiate.
2.3 Misure di similarità e differenza tra colori
25
Figura 2.10: Piani di RGB a luminosità differente
Questa caratteristica può essere desiderabile o meno, a seconda che si
vogliano cogliere le differenze tra due colori con la stessa tinta ma luminosità
differente.
In generale questo non è molto desiderabile dato che la percezione umana del
colore è molto più sensibile alle differenze di tinta che a quelle di luminosità.
Inoltre, essendo molto legata alla luminosità, la distanza euclidea su RGB è
molto sensibile a ombreggiature, ombre e lucentezze degli oggetti. Questo è
un problema particolarmente rilevante quando si progettano algoritmi edge
detection o segmentazione, com’è spiegato in seguito.
In altri spazi di colore la distanza euclidea si comporta in modo differente.
Come già detto in precedenza, in Lab per piccole differenze la distanza
euclidea è significativa e rispecchia le differenze percettive.
Anche in spazi come RGBN, dove l’intensità è stata in qualche modo rimossa,
sembra che le differenze tra colori siano caratterizzate piuttosto bene.
26
2.3.2
Il colore
Vector Angle
Questa misura, la distanza angolare tra vettori, è definita e illustata da
Wesolkowski [30].
Wesolkowski definisce questa metrica come:
Ã
DV A
Ã
v~1 T v~2
= sin θ = 1 −
kv~1 k · kv~2 k
!2 ! 1
2
Nel suo lavoro, è mostrato come la distanza angolare sia insensibile
alle variazioni di illuminazione (intensità) nello spazio RGB, ma sensibile
a differenze in tinta e saturazione. Il suo uso come metrica nello spazio di
colore RGB porta a notevoli risultati.
Tuttavia, come già visto per lo spazio HSV, spazi o misure basate su angoli
mostrano un comportamento instabile vicino agli estremi dello spazio RGB
(0, 0, 0) e (1, 1, 1) e portano a valori casuali se la saturazione o la luminosità
sono basse.
Inoltre, il comportamento in altri spazi di colore come Lab e HSV non è
sensibilmente migliore a quello della distanza euclidea. Anzi, il vector angle
quando è applicato a immagini RGB sembra comportarsi meglio di quando
è applicato a immagini Lab.
2.3.3
Combinazione
Per risolvere il problema dell’instabilità del Vector Angle a bassi valori di
intensità e della sua indefinitezza a bassi valori di saturazione sono state
implementate e usate in questo lavoro di tesi delle metriche che combinano
la misura ottenuta con la norma L2 con la misura ottenuta con il Vector
Angle.
Infatti le due combinazioni sono ottenute calcolando sia il Vector Angle che la
distanza euclidea e usando come discriminante la luminosità o la saturazione.
Combinare le due metriche è vantaggioso: insieme tengono conto sia della
variazioni in intensità (o luminanza) che di quelle in crominanza.
Inoltre la combinazione ha il vantaggio di evitare l’uso del Vector Angle
quando uno dei due colori che devono essere confrontati ha una bassa
intensità o saturazione; infatti questa metrica non funziona bene per valori
bassi di intensità o saturazione, poiché con tali valori nello spazio RGB piccole
variazioni in una delle tre componenti producono grandi differenze nell’angolo
2.3 Misure di similarità e differenza tra colori
27
tra i due colori.
Carron e Lambert [4] hanno dimostrato che per valori di saturazione bassi,
l’intensità è più rilevante della tinta, mentre per valori di saturazione più
elevati è la tinta ad avere il peso maggiore. Visto che il Vector Angle è
una metrica studiata per cogliere le differenze di tinta e la distanza euclidea
attribuisce maggior peso all’intensità, combinare le due metriche usando la
prima per valori di saturazione elevati e la seconda per valori bassi dovrebbe
garantire buoni risultati.
La rilevanza data ad una misura piuttosto che all’altra può esser calcolata
come segue: dati due colori, su ognuno di essi si calcola separatamente il
valore di intensità o saturazione e si sfrutta questo valore per stabilire il peso
di una metrica rispetto all’altra mediante la seguente formula:
1
α(value) =
slope(value−of
f set)
1+e
dove value è il valore di intensità o saturazione del colore, offset il punto
centrale della transizione (quello in cui le due misure hanno lo stesso peso) e
slope descrive l’inclinazione in quel punto.
Man mano che value cresce, l’output della funzione α cambia da 0 (influenza
massima della distanza Euclidea) a 1 (influenza massima del Vector Angle).
Comunque, visto che per ogni operazione di misura sono presi in
considerazione due colori e noi desideriamo evitare l’uso del Vector Angle
quando uno dei due colori ha intensità o saturazione bassi, dobbiamo definire
una funzione di influenza che sia la combinazione dell’ α dei due colori.
q
ρ(value1 , value2 ) =
α(value1 ) · α(value1 )
La misura di distanza tra due colori combinata basata sulla luminosità risulta
essere quindi:
µ
´¶
³
DCombLuma (C1 , C2 ) = 1 − ρ L(C1 ), L(C2 )
³
· DE (C1 , C2 ) +
´
ρ L(C1 ), L(C2 ) · DV A (C1 , C2 )
(2.5)
Similmente, quella basata sulla saturazione è definita come:
µ
³
´
DCombSaturation (C1 , C2 ) = 1 − ρ S(C1 ), S(C2 )
³
!
· DE (C1 , C2 ) +
´
ρ S(C1 ), S(C2 ) · DV A (C1 , C2 )
(2.6)
28
2.4
Il colore
Misure di similarità tra zone di immagini
a colori
Il problema appena affrontato -dare una misura dell’omogeneità di una
regione di un’immagine a colori- apre le porte a un problema più ampio:
dare una metrica di similarità o differenza tra due zone di immagini a colori.
In che misura due zone sono simili rispetto al colore? Oppure in che misura
due intere immagini sono simili rispetto al colore?
Il problema, che può essere esteso ad altre caratteristiche di un’immagine
oltre al colore, è quello di introdurre una metrica tra due distribuzioni.
Tipicamente le distribuzioni su cui si va ad operare sono istogrammi;
in seguito, saranno introdotte forme più versatili di distribuzione dette
“signature” (firme).
Per semplicità di notazione, parlando della posizione i − esima all’interno di
un istogramma userò il termine inglese bin i (cesto i).
Sono state proposte molte misure di similarità tra due istogrammi, che
possiamo dividere in due categorie.
Le misure di similarità bin-by-bin confrontano solo la quantità delle caratteristiche che occupano la stessa posizione all’interno dei due istogrammi.
Le misure di similarità cross-bin invece confrontano anche termini che
appartengono a posizioni differenti; per questo, le misure cross-bin fanno
uso di una distanza dij tra le caratteristiche del bin i e del bin j.
In [23] sono presentate varie misure bin-by-bin e cross-bin e viene spiegato
come le misure di entrambe le classi siano spesso insoddisfacenti; queste
metriche, sebbene siano state usate con successo in altri campi, in questo
caso non rappresentano bene la somiglianza percettiva.
2.4.1
Istogrammi e Signature
Prima di introdurre una nuova metrica che si comporti in modo soddisfacente,
conviene fermarsi un attimo sui concetti di distribuzione, istogramma e
“signature”.
Uso di istogrammi
Le distribuzioni multidimensionali, e in particolare gli istogrammi, sono usati
spesso nell’image processing per descrivere e riassumere le caratteristiche di
2.4 Misure di similarità tra zone di immagini a colori
29
un’immagine. Nelle immagini a scala di grigio, l’istogramma monodimensionale delle intensità descrive il contenuto totale di luminosità di un’immagine,
e viene usato in molti algoritmi, specie quando si tratta di stimare dei valori
di soglia.
Nelle immagini a colori, lo stesso compito può essere assolto con una distribuzione tridimensionale; comunque, in questo caso, conviene approssimare
la distribuzione originale con una descrizione più compatta: nello spazio
RGB, per esempio, se si considerano 256 livelli per ciascuna banda si hanno
più di sedici milioni di colori differenti.
Usare una distribuzione che tenga conto di ogni colore è sia inefficiente da
un punto di vista dell’uso delle risorse (memoria e potenza di calcolo) che
inefficace per quanto riguarda la corrispondenza percettiva (nessuno può
distinguere il verde RGB(5, 165, 97) dal verde RGB(6, 165, 97)).
Per questo motivo le distribuzioni multidimensionali vengono compresse
partizionando lo spazio sottostante in un numero fisso di partizioni, chiamate
bin, che di solito hanno dimensione prefissata. La struttura dati risultante è
quantizzata e può essere rappresentata da un istogramma, come si fa con le
immagini a scala di grigio.
Resta comunque il fatto che solo una piccola percentuale dei bin di un
istogramma contiene informazione significativa. Per esempio, se abbiamo una
foto di una pianura verde sovrastata dal cielo azzurro, bastano pochi colori
per descriverla efficacemente. In questo caso un istogramma quantizzato
finemente è piuttosto inefficiente, e avrà molti bin vuoti.
D’altra parte, nel caso di una foto di una composizione floreale con una
moltitudine di colori differenti, un istogramma quantizzato grossolanamente
sarebbe inadeguato.
In breve, gli istogrammi sono stutture dati a dimensione fissa, che difficilmante si possono adattare bene per la descrizione di immagini dal contenuto
differente.
Uso di signature
In [23] è proposta una soluzione a questo problema: viene introdotta una
nuova descrizione della distribuzione tridimensionale del colore detta signature (firma). Queste signature sono formate prendendo dalla distribuzione
originale i cluster (cioè i gruppi di colore) più significativi.
Una signature è quindi un insieme di cluster, ognuno dei quali rappresentato
dal colore dominante e da un peso che dà un’indicazione sulla grandezza
30
Il colore
relativa o assoluta del cluster.
Immagini semplici hanno signature corte, immagini complesse le hanno più
lunghe.
Nell’implementazione fatta durante questo lavoro, i cluster vengono ricercati
tra i bin non nulli della distribuzione tridimensionale del colore.
Viene lasciata grande flessibilità, in quanto è possibile:
- usare come base di partenza una distribuzione quantizzata oppure no,
specificando il livello della quantizzazione;
- specificare il numero massimo di cluster che si vuole includere nella
signature: in questo caso, se i cluster superano il numero specificato,
vengono scartati i meno significativi;
- specificare una soglia al di sotto della quale il peso del cluster viene
considerato nullo (per esempio, per non includere nella signature tutti
i cluster con peso minore dello 0.1% );
57846
50778
40600
21432
17406
13068
12420
8954
8580
8046
6201
3870
1794
1548
1304
1120
1118
987
950
918
786
777
768
744
695
580
486
346
287
282
266
Figura 2.11: La signature dell’immagine Lena e i rispettivi pesi
2.4.2
La Earth Mover’s Distance
Il problema di trovare una metrica che rispecchi il concetto umano di distanza
e similarità tra colori è stato illustrato e discusso in precedenza (paragrafo
2.4 Misure di similarità tra zone di immagini a colori
31
2.4).
Questo problema diventa più evidente quando si presenta la necessità di
confrontare insiemi di caratteristiche piuttosto che singoli colori.
In [23] è dimostrato come una metrica che voglia essere fedele alla distanza
percettiva tra insiemi di caratteristiche debba gestire le corrispondenze che ci
possono essere tra posizioni diverse dell’istogramma (da qui in poi, indicate
con bin).
Sempre in [23], è proposta una metrica basata sul matching di grafi bipartiti
che è definita come il costo minimo necessario per far corrispondere i bin
di un istogramma con quelli di un altro. Questa metrica è chiamata Earth
Mover’s Distance (EMD).
Intuitivamente, date due distribuzioni, una può essere vista come una serie
di mucchi di terra sparsi nello spazio, e l’altra come una serie di buche da
riempire. La distanza tra i mucchi di terra e le buche è la distanza percettiva
tra i colori che rappresentano i vari bin delle distribuzioni. La EMD misura
la quantità di lavoro minimo necessaria per riempire le buche con la terra.
Per calcolare l’EMD è sufficiente risolvere il problema del trasporto, per la
cui soluzione sono noti algoritmi efficienti. Il problema del trasporto è cosı̀
formulato: si supponga di avere un insieme di fornitori, ognuno dei quali
ha un dato ammontare di beni, che deve fornire un insieme di consumatori,
ognuno dei quali ha una data necessità. Il costo di trasporto di un bene per
ogni coppia fornitore-consumatore è considerato noto.
Il problema è quello di trovare il più economico flusso di beni tra fornitori e
consumatori che soddisfi la domanda dei consumatori.
Come si può intuire, il problema della Earth Mover’s Distance e quello del
trasporto sono analoghi.
In Appendice B è descritto l’algoritmo implementato per risolvere entrambi
i problemi.
Prima di concludere il discorso sugli spazi di colore e sulle metriche,
è necessaria un’ultima considerazione. La necessità di una buona metrica
e di uno spazio di colore appropriato deriva anche dal fatto che i metodi
tradizionali per l’edge detection e la segmentazione di immagini a colori
rilavano troppi edge “fantasma” o regioni errate a causa degli effetti ottici
dovuti all’iterazione tra la luce e il materiale dell’oggetto. L’uso di spazi come
HSV o di metriche come il Vector Angle, che riducono il peso della luminosità,
permettono di ridurre il numero di edge o regioni spurie. Infatti, è possibile
dimostrare [30] come alcuni spazi di colore e metriche siano invarianti rispetto
a shadows (ombre), shading (ombreggiatura), e highlights (lucentezze).
Capitolo 3
La tessitura
“...quando guarda tutto l’insieme non si sogna di contare quante sono le
scaglie del salmone, le vede come piccole perle argentate contro il grigio e il
rosa [...]. E l’uva! Vuol contare gli acini? Certamente no. Quello che
colpisce è il tono d’ambra chiara e la polvere che ne modella le forme”
E. Manet
La texture (traducibile in italiano, anche se in modo approssimativo, con
tessitura) è legata alle proprietà intrinseche delle superfici ma, al pari del
colore, non è essa stessa una proprietà delle superfici, bensı̀ un prodotto del
sistema visivo umano, che la associa a superfici che hanno caratteristiche di
colore, intensità e ruvidezza variabili.
Avendo già a disposizione l’informazione sul colore, ci si potrebbe chiedere
perchè ci sia bisogno anche di informazioni sulla tessitura per fornire misure
di distanza e omogeneità che ci consentano di raggruppare i pixel in regioni
dalle caratteristiche uniformi.
Innanzitutto, come già asserito nel capitolo 1, le caratteristiche di tessitura
sono fondamentali nel sistema visivo umano, che le utilizza durante il processo
di image analysis compiuto di continuo dalla corteccia.
La cosa più importante, però, è che la percezione del colore nel sistema visivo
umano dipende dalle frequenze spaziali fra i colori. Colori che compaiono
33
in un pattern multicolore sono percepiti come differenti dagli stessi colori
presenti in un’area uniforme. Questo fatto è stato dimostrato da recenti
ricerche psicofisiche [34], anche se bisogna dire che questa assunzione era
ormai assodata da tempo. A tal proposito si veda la figura 3.5: il pittore
(Claude Monet, Le piramidi di Port-Coton, 1886) accosta sulla tela colori
diversi (verde smeraldo, ocra, giallo, blu), che singolarmente non percepiamo
come il colore del mare, ma che accostati ci danno l’impressione di essere un
colore diverso, quello del mare appunto.
E’ difficile dare una definizione di texture, probabilmente a causa del fatto
che quello ci texture è un concetto fortemente intuitivo, legato a propietà
anch’esse intuitive e pertanto non facilmente misurabili come la ruvidezza,
la regolarità e la granularità.
Partendo da questi concetti, si può comunque azzardare una definizione di
texture come zona di un’immagine che presenta caratteristiche di ruvidezza,
regolarità e granularità simili.
Una definizione simile è data in [13], mentre in [24] ne viene data una più
rigorosa:
Una regione all’interno di un’immagine possiede una tessitura
costante se un’insieme di statistiche locali o di altre proprietà
locali alla regione sono costanti, poco variabili o approssimativamente periodiche.
Per una raccolta di ulteriori definizioni, si veda [29].
In letteratura è stata proposta una gran varietà di metodi per l’analisi
delle tessiture, che possono essere raggruppati in quattro categorie [29]:
1. Statistici: i primi lavori si basavano su statistiche del secondo ordine
per le tessiture. I metodi statistici (che si basano di solito su matrici di
co-occorrenza) ricercano correlazioni locali tra i pixel di un’immagine
su scala fissa.
2. Geometrici: i metodi strutturali o geometrici generano una descrizione della tessitura estraendone delle primitive (dette texton) e
applicando delle regole sintattiche a quest’ultime.
3. Basati su Modelli: negli anni ’80 sono stati sviluppati dei modelli
di texture basati su Gaussian Markov Random Fields (GMRF) e
distribuzioni di Gibbs.
34
La tessitura
4. Basati su analisi del segnale: negli ultimi anni, i modelli basati sullanalisi del segnale visivo con metodi multicanale e multifrequenza hanno ricevuto molta attenzione, in quanto hanno mostrato un’affidabilità
e un’efficienza di gran lunga superiori a quelle dei metodi precedenti.
I buoni risultati nel campo della teoria dei segnali applicata all’analisi
di tessitura -che è ancora campo di ricerca- suggeriscono che le principali
difficoltà nell’ottenere buoni risultati sia dovute alla mancanza di uno
strumento di anali adeguato, che sembra esser stato finalmente trovato nei
metodi di analisi nello spazio delle frequenze, come i filtri di Gabor o le
trasformate Wavelet.
In questo lavoro di tesi si è scelto di concentrarsi sullo studio e
l’implementazione di metodi basati sulla trasformata Wavelet.
3.1
Trasformata Wavelet
La trasformata Wavelet opera la decomposizione atomica multi-livello di un
segnale, rappresentando il segnale di input come la sovrapposizione di una
famiglia di funzioni di base dette appunto Wavelet. Traslare o dilatare la
mother Wavelet (Wavelet madre, la funzione scelta come punto di partenza
per costruire l’insieme delle funzioni base) porta a generare un’insieme di
funzioni base. Il segnale è fatto passare attraverso un filtro passa-basso
seguito da un filtro passa-alto. Gli output dei filtri sono sottocampionati
per il prossimo livello di decomposizione, permettendo cosı̀ all’informazione
portata dal segnale di essere rappresentata a diverse scale. Una descrizione
più precisa dal punto di vista matematico esula dagli scopi di questa tesi;
per avere un ragguaglio più preciso si consigliano [14], [29] e [25]. In questa
sede, basti sapere che, analogamente alla trasformata di Fourier e alla FFT,
esistono metodi efficienti di calcolare la trasformata Wavelet di un’immagine
a partire dalla coppia di filtri di cui sopra. Questi algoritmi prendono il nome
di DWT per la trasformata Wavelet piramidale e di PKWT per trasformata
Packet Wavelet (vedi sotto).
Le ragioni che hanno portato alla scelta della trasformata Wavelet come
strumanto per l’analisi delle tessiture sono molteplici:
- Il metodo di segmentazione ideale richiede sia l’identificazione precisa
3.1 Trasformata Wavelet
35
delle caratteristiche di una texture che un’alta risoluzione spaziale per
una localizzazione precisa.
Le trasformate Wavelet, a differenza di altri metodi per l’analisi del
segnale come le trasformate di Fourier, sono localizzate sia nello
spazio che in frequenza. Inoltre il compromesso tra la risoluzione
nello spazio e quella in frequenza è buono, e quindi la segmentazione
basata su caratteristiche calcolate a partire dai coefficienti Wavelet
dovrebbe garantire buoni risultati, anche se piuttosto grossolani per
quanto riguarda la localizzasione spaziale; questo è uno dei motivi per
cui non è possibile offrire una segmentazione basata esclusivamente
sui coefficienti della trasformata Wavelet, ma è necessario sempre
combinare questa tecnica con altre.
- Studi psicofisici [34] hanno dimostrato che il sistema visivo umano
analizza le immagini in modo multiscalare; la prima elaborazione
effettuata dal cervello è un’analisi di frequenza spaziale, che attiva
neuroni diversi nella parte della corteccia adibita alla visione a seconda
della frequenza e dell’orientamento.
Inoltre, quando è necessario il riconoscimento di forme e oggetti,
l’occhio umano analizza il segnale visivo in modo approssimato, e poi
guarda i dettagli per avere una corrispondenza più precisa [2].
La trasformata wavelet permette di procedere all’analisi di un’immagine in maniera simile, dividendo le immagini in sottobande diverse a
seconda della frequenza, dando ad ognuna diverse caratteristiche di
frequenza e orientazione.
- Anche i filtri di Gabor permettono di ottenere il medesimo risulatato,
e sono stati applicati per anni all’analisi di texture. Tuttavia le
Wavelet si comportano altrettanto bene (specie su consideriamo le
packet wavelet, vedi sotto) e sono molto meno costose dal punto di
vista computazionale.
Durante la preparazione di questa tesi sono state presi in considerazione
e studiati diversi modi di utilizzare il potenziale delle trasformate Wavelet
per ottenere una segmentazione dell’immagine.
Infatti, una volta deciso di usare le Wavelet come strumento per l’analisi
delle texture, è necessario scegliere:
36
La tessitura
LL
HL
LLL LHL
HL
LLH LHH
Regione
primaria
LH
HH
C
H1
V1
D
Regione
primaria
LH
C
HH
H1 H2 H3
V1
V2
V3
Figura 3.1: La trasformata wavelet discreta (DWT, sopra) e la trasformata
wavelet a pacchetti (PKWT, sotto)
1. Quale tipo di filtro usare per la trasformata Wavelet. In questo caso,
visto che la trasformata viene effettuata al solo scopo di effettuare
l’analisi dell’immagine, non è neccesario che la ricostruzione sia perfetta
-cioè non è richiesto che l’applicazione della trasformata inversa
riproduca l’esatta immagine di partenza-, quindi possiamo usare anche
filtri non ortogonali (vedi [14]).
2. Quale tipo di decomposizione usare, se una decomposizione piramidale
(vedi figura 3.1 sopra) o una decomposizione ad albero (detta anche
packet wavelet, figura 3.1 sotto).
3. Una volta ottenuti i coefficienti, come utilizzare l’informazione ad
essi associata -cioè a quali delle diverse caratteristiche estraibili dai
coefficienti affidarsi per la descrizione della tessitura- e come misurare
la distanza tra queste caratteristiche in modo percettivamente corretto.
3.1.1
Filtri per la trasformata
Per quanto riguarda il primo punto, sono stati analizzati vari filtri da
impiegare con la trasformata Wavelet: un filtro biortogonale 9/7, un filtro di
Daubechies (daub4, si veda [22]), entrambi dal supporto compatto, nonchè
3.1 Trasformata Wavelet
37
ortogonali e separabli, e un filtro SPLINE, i cui filtri passa-basso e passaalto h0 = [1/4 3/4 3/4 1/4] e h1 = [-1/4 -3/4 3/4 1/4] sono separabili e dal
supporto compatto e quindi utilizzabili con la DWT e la PKWT, anche se
non sono ortogonali.
Quest’ultimo in particolare estrae le caratteristiche di tessitura molto
efficacemente [1] ed è quindi stato scelto per esser utilizzato nell’algoritmo
proposto.
Figura 3.2: L’immagine flower garden
3.1.2
Tipo di decomposizione
Per quanto riguarda il secondo punto, quale tipo di decomposizione usare, è
ormai stato provato in numerosi lavori - [25], [19], [1] - che la decomposizione
packet wavelet offre performance superiori grazie a una analisi più approfondita di tutte le bande. In particolare, usando la trasformata Wavelet
a pacchetti, si produce un’immagine composta da diverse sottobande,
ognuna con le sue caratteristiche di frequenza e orientamento. Si osservi
la figura 3.3: in rosso sono evidenziate le sottobande che rappresentano
alte frequenze verticali, cioè carateeristiche orizzontali, in blu le sottobande
che rappresentano alte frequenze orizzontali, cioè caratteristiche verticali,
mentre le altre sottobande -evidenziate in bianco- rappresentano un misto di
informazione verticale e orizzontale, orientate a diversi gradi (per esempio,
le sottobande sulla diagonale sono orientate a 45o di direzione).
Visto che il sistema visivo umano è più sensibile lungo le direzioni orizzontale
38
La tessitura
e verticale, e che gran parte dell’informazione è convogliata nelle sottobande
orizzontale e verticali (indicate rispettivamente come bande Hi e V i, i =
1, .., n − 1) è possibile utilizzare le sole bande Hi e V i per l’analisi.
Figura 3.3: La trasformata wavelet a pacchetti (PKWT) dell’immagine flower
garden
3.1.3
Estrazione caratteristiche e metriche
Il terzo punto, che riguarda quali caratteristiche estrarre dai coefficienti per
la descrizione della tessitura e come fornire una misura di distanza tra le
regioni che sia percettivamente corretta, è un problema molto complesso e
ancora aperto. In questa tesi sono stati presi in considerazione le seguenti
caratteristiche e misure di similarità.
Direzionalità, regolarità e granularità
Inizialmente si è pensato di poter sfruttare delle misure di direzionalità, regolarità e granularità definite in [1], che si basano sull’analisi dell’istogramma
della matrice di co-correlazione tra righe e colonne delle bande orizzontali
e verticali. Queste dimensioni sono le più importanti da un punto di vista
percettivo; usando una metrica basata su di esse, la classificazione delle zone
si sarebbe basata su caratteristiche simili a quelle percepite dal sistema visivo
3.1 Trasformata Wavelet
39
umano. Esperimenti condotti in questo senso hanno dimostrato che in effetti
queste misure caratterizzano molto bene le texture, ma che non sono adatte
allo scopo di segmentare l’immagine.
In primo luogo il metodo basato su matrice di co-correlazione fornisce buoni
risultati solo se applicato a regioni relativamente grandi. In secondo luogo,
il metodo presuppone di avere come base di partenza una singola immagine,
e per di più quadrata, di una sigola texture.
In pratica quindi questo metodo è molto buono per lo scopo per cui è
stato ideato, la classificazione di texture, e potrebbe anche essere esteso
all’estrazione di features da regioni con texture per l’image retrieval, ma
in questo caso si richiede una previa segmentazione dell’immagine. Proprio
ciò che si sta cercando di ottenere.
Energia locale
La soluzione più frequente in letteratura è quella di usare come caratteristica
per la descrizione della tessitura l’energia locale di ogni coefficiente.
L’energia locale EiV dei coefficienti wavelet {cV i } alla posizione (x, y) è
definita come
EjV (x, y) =
X
(cV j (r, s))2 K(x − r, y − r)
r,s∈Z
dove Z è un’intorno di (x, y) e K(x, y) è un kernel, positivo e dalla forma a
campana, di solito un kernel Gaussiano. L’energia locale EiH è definita nello
stesso modo.
L’energia locale caratterizza bene la tessitura ([26], [29]), e quindi come
caratteristica della tessitura nell’intorno del pixel (x, y) il si può utilizzare il
vettore:
[ log E1V (x, y), log E1H (x, y), log E2V (x, y), log E2H (x, y), ...,
log EnV (x, y), log EnH (x, y)]
(3.1)
Come metrica di distanza è utilizzabile una semplice distanza bin-by-bin
tra i due vettori: la distanza tra due vettori di caratteristiche è la somma
delle distanze (calcolate tramite norma L1 o L2 ) tra elementi del vettore in
40
La tessitura
posizioni corrispondenti. Se f 1 e f 2 sono due vettori delle caratteristiche
definiti come sopra la distanza d tra di loro è pari a:
dW =
n
X
kf 1i − f 2i k
i=1
Analogamente, utilizzando vettori composti dalla media delle energie dei
pixel dalla regione, è possibile ottenere una metrica di distanza tra regioni.
Texture map
Figura 3.4: La mappa delle classi di texture ottenuta dall’applicazione
dell’algoritmo proposto sull’immagine flower garden
In [5] viene descritto un nuovo modo per utilizzare l’informazione
associata ai coefficienti Wavelet ed estrarne caratteristiche misurabili, accreditato di buoni risultati. Questo metodo consiste nel realizzare una
segmentazione grossolana dell’immagine basandosi sull’energia locale dei
n
pixel, classificandoli in 2(2 −1)·2 classi, dove n è il numero di decomposizioni
effettuate dalla trasformata (per esempio, l’immagine in figura 3.3 è stata
relizzata con due decomposizioni, quindi i sui pixel saranno classificati in 64
classi).
Questo modo di calcolare il numero di classi è fondato.
Infatti la classificazione avviene prendendo in considerazione le sottobande
Hi (che sono 2n − 1) e V i, (che sono 2n − 1, in totale numero di classi
m = (2n − 1) · 2) e classificando il pixel in due categorie (sarebbe a dire,
come rilevante o non rilevante per quel dato orientamento e frequenza), per
3.1 Trasformata Wavelet
41
ognuna delle m bande. Questa partizione in due categorie per ognuna delle
bande considerate porta appunto a 2m classi totali (si veda la figura 3.4).
Il risultato di questa segmentazione “grossolana” viene combinato con
l’informazione sul colore in un modo molto semplice ma sorprendentemente
efficace: la metriche sui colori vengono “influenzate” dalla classificazione
delle texture, che viene usata come un peso: se due pixel appartengono
alla stessa classe di texture, il peso (Klow ) è minore di 1.0 e quindi la
loro distanza diminuisce, mentre se i due pixel appartengono a classi di
texture diverse la distanza viene leggermente aumentata moltiplicandola per
un fattore maggiore di 1.0 (Khigh ) .
(
dtexture (p, R) =
Klow se classe(p) = classe(R)
Khigh altrimenti
42
La tessitura
Figura 3.5: Recenti ricerche psicofisiche hanno dimostrato che la percezione
del colore nel sistema visivo umano dipende dalle frequenze spaziali fra i
colori. Questo, tuttavia, era già stato intuito dai pittori impressionisti cento
anni prima.
Capitolo 4
Tecniche di segmentazione
“Quicquid est in intellectu praesse debere in sensu.”
(Bisogna avere esperienza di tutto ciò che è nell’intelletto)
Gassendi
“Nec scire fas est omnia.”
(Non è concesso sapere tutto)
Orazio, Odi
La segmentazione è il processo di suddivisione di un’immagine in regioni
distinte in modo tale che ogni regione sia omogenea rispetto ad una data
caratteristica, e che l’unione di due regioni adiacenti non lo sia. La loro unione
deve essere l’intera immagine di partenza. Il processo di segmentazione
è un passo fondamentale nell’ambito dell’image analysis e della pattern
recognition, il cui scopo è di scomporre un’immagine in parti che sono
significative rispetto a una particolare applicazione.
La segmentazione è una fase critica nell’analisi dell’immagine: la precisione e la qualità del risultato della segmentazione possono influenzare molto
pesantemente le fasi successive.
La segmentazione può trarre molti vantaggi dall’uso del colore, perché spesso
un oggetto è formato da parti colorate identificabili dalla segmentazione. La
segmentazione nelle immagini a scala di grigio si basa su criteri legati al
44
Tecniche di segmentazione
valore di luminosità nell’immagine, che può corrispondere sia a variazioni di
tinta che a cambiamenti di illuminazione. In scala di grigio è impossibile
distinguere tra i due, mentre con le immagini a colori questo è possibile. Per
esempio, utilizzando spazi di colori appropriati (come HSV, paragrafo 2.2.6)
o metriche studiate appositamente (come il Vector Angle sugli spazi RGB o
RGBN, vedi paragrafo 2.3.2 a pagina 26) si possono distinguere zone in cui il
colore varia a causa di un cambiamento di tinta da zone in cui il colore varia
a causa di un cambiamento di luminosità dovuto alla geometria dell’oggetto
e all’illuminazione.
Inoltre, come già sottolineato in precedenza, il colore è predominante nel
sistema di visione umano: l’occhio distingue migliaia di colori, ma solo poche
tonalità di grigio. Un sistema che simuli da vicino il modello umano non può
che portare a risulatati che corrispondono maggiormente alle aspettative di
un osservatore umano.
Un buon metodo di segmentazione dovrebbe soddisfare i seguenti criteri:
- Le regioni devono essere il più possibile omogenee
- I confini delle regioni devono essere compatibili con le variazioni della
misura di similarità adottata.
- Aree percettivamente uniformi non dovrebbero essere divise in più
parti. In particolare questo si applica a regioni con ombreggiatura
graduale e a regioni con tessitura.
- Piccoli dettagli, se ben definiti in forma e contrasto, non dovrebbero
essere fusi con le regioni confinanti.
Sono note molte tecniche di segmentazione, sia per quanto riguarda le
immagini a scala di grigio che per quanto riguarda le immagini a colori.
Queste tecniche si differenziano per la definizione del criterio di omogeneità
tra regioni e per l’algoritmo usato per costruire queste regioni.
Le prime tecniche di segmentazione studiate sono state sviluppate per
trattare immagini a scala di grigio, e solo in tempi relativamente recenti il
lavoro si è esteso anche alle immagini a colori.
La scelta di usare immagini a scala di grigio presenta non solo il vantaggio
di trattare con un volume di dati molto minore, ma anche di considerare le
immagini come funzioni scalari a due dimensioni su cui sviluppare algoritmi
45
computazionalmente più semplici.
Gli approcci per la segmentazione di immagini monocromatiche sono
basati su misure di discontinuità o omogeneità nei livelli di grigio dell’immagine. I metodi basati sulla rilevazione di discontinuità partizionano
l’immagine rilevando punti isolati, edge, linee e contorni, mentre gli approcci
basati sull’omogeneità includono l’histogram thresholding, clustering, region
splitting and merging e region growing.
Questi ultimi possono essere ulteriormente suddivisi in tecniche di raggruppamento rispetto alle sole caratteristiche dei pixel (che tengono cioè in
considerazione solo i valori dei singoli pixel) e tecniche basate sul rilevamento
di regioni (e che quindi combinano informazioni sui valori dei pixel con
informazioni spaziali).
La maggior parte degli algoritmi studiati per le immagini monocromatiche
possono essere estesi all’utilizzo con immagini a colori applicando il metodo
separatamente ad ogni componente dello spazio di colore scelto, combinando
i risultati ottenuti tramite un criterio ad hoc per ottenere la segmentazione
finale.
Tuttavia è necessario notare che nel caso di immagini a colori, è importante
sfruttare per ogni pixel l’informazione sul colore nella sua interezza. Quando
il valore del pixel è proiettato sulle tre componenti, l’informazione sul colore
viene frantumata e l’informazione sul colore cosı̀ come viene percepita dagli
esseri umani è persa. Il sistema visivo umano, infatti, non percepisce
un’immagine separata per ogni componente di colore, ma usa l’informazione
sul colore nella sua interezza.
Un approccio migliore è quello di definire delle metriche opportune nello
spazio di colore che giocano il ruolo dell’operazione di differenza usata negli
algoritmi grayscale, nei criteri di omogeneità basati sulla distanza (come il
MAD) e nelle misure di discontinuità.
Prima di passare alla descrizione del metodo oggetto di studio in questa
tesi, è utile una breve rassegna dei principali metodi di segmentazione
bottom–up. Questi metodi sono stati inizialmente studiati e realizzati per
il trattamento di immagini in scala di grigio, ma sono stati in seguito estesi
anche all’utilizzo con immagini a colori. In [6] sono analizzate le varie tecniche
che sono illustrate brevemente nei paragrafi sequenti.
46
Tecniche di segmentazione
4.1
Approcci basati su misure di discontinuità
L’approccio basato sul rilevamento delle discontinuità è meglio noto con il
nome di edge detection (letteralmente“rilevamento dei bordi”).
Questo approccio consente di trovare i contorni delle regioni costituenti la
segmentazione dell’immagine. In un’immagine monocromatica, un edge è
definito come una discontinuità nel livello di grigio, e quindi è rilevato dove
sono presenti differenze significative nella luminosità.
Nelle immagini a colori le informazioni sui bordi sono molto più ricche: per
esempio, si può rilevare un edge tra due zone con stessa luminosità ma tinta
differente. In un’immagine a colori un edge è definito come una discontinuità
locale calcolata nello spazio colore tridimensionale. Tenendo presente questa
affermazione, è possibile seguire almeno tre approcci per l’edge detection [6]:
1. trattare l’immagine a colori come se fosse composta da tre immagini
monocromatiche, applicare su ognuno dei tre piani separatamente un
algoritmo specifico per l’edge detection su immagini a livelli di grigio,
quindi combinare i risultati.
Lo svantaggio è che cosı̀ facendo si perde l’informazione sulla correlazione tra le tre componenti e, in alcuni casi, si può arrivare a risultati
difficili da combinare (per esempio quando i tre gradienti per un pixel
hanno lo stesso valore ma direzioni differenti, o quando un edge si
presenta su uno solo dei tre piani);
2. per mezzo di una misura di similarità e definita valida nello spazio di
colore, rilevare le discontinuità tra le distanze per determinare gli edge.
Anche questo metodo tiene poco conto del fatto che siamo in uno spazio
vettoriale, ma riesce comunque a catturare edge dovuti a differenze di
luminosità, tinta e saturazione;
3. considerare l’immagine come un campo vettoriale bidimensionale; con
questo approccio il valore dell’immagine in una locazione data è un
vettore in R3 . Quindi si definisce una misura del gradiente che sia
significativa nel campo vettoriale, e si calcola la derivata seconda. I
punti in cui la derivata seconda è nulla (zero-crossing) sono gli edge.
Questo approccio è stato introdotto in [7] da Cumani sulla base di un
lavoro di DiZenzo [8].
4.2 Approcci basati su misure di omogeneità
47
Va sottolineato il fatto che l’edge detection in generale non genera una
segmentazione dell’immagine ma fornisce informazioni utili sui confini tra
le regioni a moduli di più alto livello, o può essere usato in combinazione con
altri approcci, come quelli basati su regioni.
4.2
4.2.1
Approcci basati su misure di omogeneità
Histogram thresholding
Histogram thresholding significa letteralmente “sogliatura dell’istogramma”.
Qesto approccio assume che l’immagine sia composta da regioni che differiscono tra loro per l’intervallo di valori dei pixel che le compongono, cosı̀
che l’istogramma di un immagine presenti dei picchi in corrispondenza di
questi valori. I valori che corrispondono a valli nell’istogramma sono utilizzati
come soglie per distinguere le regioni tra di loro.
4.2.2
Clustering
Clustering: raggruppamento in sottoinsiemi di oggetti con caratteristiche
simili, può essere usato come tecnica di segmentazione considerando il livello
di grigio come caratteristica rispetto alla quale raggruppare i pixel. La
segmentazione ottenuta con il clustering trascura la relazione spaziale tra i
pixel. E’ necessaria una fase successiva in cui si tiene conto delle informazioni
spaziali per formare le regioni: pixel adiacenti appartenenti alla stessa classe
costituiscono una regione omogenea.
L’algoritmo più diffuso per il clustering di dati è l’algoritmo K-means, che si
compone dei seguenti passi:
1. si sceglie il numero delle classi, k
2. si scelgono i rappresentanti iniziali dei clusters
3. si classifica ogni dato
4. si calcolano i nuovi centri dei clusters usando i risultati ottenuti al
punto 3
48
Tecniche di segmentazione
5. se i centri sono stabili (non sono cambiati dopo il passo 4 o si sono
sposatati di poco) ci si ferma, altrimenti si torna al punto 3.
Al terzo passo la classificazione è realizzata mediante un algoritmo 1–NN
(1–nearest neighbor, il dato appartiene alla classe a cui è più vicino) usando
la distanza euclidea come unità di misura.
4.2.3
Region splitting & merge e Region growing
Gli approcci basati su regioni sono fra i più diffusi e usati, poichè permettono
di considerare allo stesso tempo informazioni sui valori (livello di grigio o
colore) e dettagli spaziali. Essi comprendono region splitting & merge e
region growing.
Nell’approccio originale del region splitting, la regione di partenza (il
seme) è costituita dall’intera immagine. Se il seme non rispetta il criterio di
omogeneità viene suddiviso in quattro semi. Questa procedura viene iterata
fino a quando tutte le regioni sono omogenee. Solitamente al processo di
splitting viene fatto seguire un processo di merging per fondere le regioni
uniformi che a causa del processo di splitting erano state erroneamente divise.
Lo svantaggio principale di questa tecnica è che tende a produrre regioni
troppo quadrate, spigolose. 1
In generale, in un algoritmo di region growing, viene scelto un insieme di
piccole regioni di partenza dette seeds (semi), che sono espanse per includere
tutti i pixel confinanti che rispettano un criterio di omogeneità; il processo è
ripetuto finchè ogni pixel dell’immagine è assegnato ad una regione.
1
questo è l’algoritmo originale. Più in generale, un algoritmo di split & merge si
compone di due fasi:
1. La fase di split si applica all’intera immagine. Se essa è omogenea rispetto
al predicato la segmentazione termina, essendo costituita dall’intera immagine.
Altrimenti essa viene suddivisa ricorsivamente in parti fino ad ottenere un insieme
di regioni che soddisfano il predicato.
2. Nella fase di merge vengono analizzate tutte le coppie di regioni adiacenti,
verificando il predicato di omogeneità sull’unione, in modo da garantire la
massimalità delle regioni.
4.2 Approcci basati su misure di omogeneità
49
Lo svantaggio principale di questa tecnica sta nella difficoltà di scegliere le
regioni iniziali. L’algoritmo infatti non aumenta nè diminuisce il numero
di regioni, che quindi devono essere una buona base di partenza per i passi
successivi.
Capitolo 5
L’algoritmo proposto
“Nec minor est virus quam quaerere parta tueri.”
(Né minore abilità del trovare le cose nuove è nel saper conservare le già
acquisite.)
Ovidio
Tutte le tecniche presentate nel capitolo precedente sono state studiate a
lungo. In questo lavoro di tesi si è deciso di implementare una variante del
region growing, poiché si è dimostarata una delle tecniche con il più grande
potenziale per poter raggiungere i requisiti delineati nel capitolo 1.
Il fuzionamento di base del region growing è piuttosto semplice da
descrivere: dato un insieme di punti o regioni iniziali, queste regioni vengono
espanse inglobando in esse i pixel limitrofi che superano un test di similarità
con la regione. Se un pixel è candidato per entrare a far parte di due regioni,
cioè confina con più di una regione, viene inglobato nella regione a cui è più
vicino per somiglianza.
Recentemente sono stati introdotti alcuni algoritmi basati sul paradigma
del region growing nell’ambito della segmentazione di immagini a colori:
- In [32] si presenta un algoritmo di region growing classico, in cui si
usa il Vector Angle (si veda 2.3.2) come misura di similarità tra i
51
colori, e la componente principale (PC) della matrice di covarianza
come colore “caratteristico” della regione, con l’obiettivo di fornire una
segmentazione in regioni percettivamente corretta.
- In [10] si utilizza un algoritmo di region growing abbinato a un
algoritmo di edge detection. Dopo aver ottenuto la mappa degli edge, i
centroidi delle regioni delineate dagli edge sono presi come semi per
l’algoritmo di region growing che utilizza una misura di similarità
tra colori. Infine, il risultato dell’algoritmo di region growing viene
integrato con il risultato dell’edge detection per avere dei confini chiusi
e più accurati.
- In [33] viene proposto un metodo per la segmentazione automatica di
regioni caratterizzate da colore e tessitura, chiamato JSEG. Il metodo
si articola in due passi: quantizzazione dei colori e segmentazione
spaziale. Nel primo passo i pixel vengono suddivisi in varie classi
basandosi esclusivamente sull’informazione di colore. Nel secondo passo
si utilizzano la mappa delle classi prodotta al passo precedente e un
criterio per valutare l’omogeneità di un pattern di colore-tessitura
(detto J): applicando il criterio a una finestra locale per ogni elemento
della mappa delle classi si produce una “J-image” i cui valori di minimo
e massimo corrispondono a possibili confini delle regioni. Si procede
quindi con un algoritmo di region growing, che si basa sulle informazioni
delle “J-image” per produrre la segmentazione finale.
Di questi tre approcci, solo JSEG utilizza anche informazioni sulla
tessitura: questo lo rende uno degli algoritmi più interessanti ed utilizzati
(per esempio in sistemi di image retrieval, o in algoritmi di compressione che
richiedono l’identficazione di zone e oggetti come MPEG-7); per le prestazioni
di quest’algoritmo si veda [33].
Esistono tuttavia numerose altre varianti della tecnica di region growing,
che differiscono tra loro in uno o più dei seguenti passi:
Scelta iniziale dei semi: la scelta iniziale dei semi può esser vista come
una procedura di segmentazione incompleta in cui pixel sono assegnati
a delle regioni se questo può esser fatto con alta confidenza. I semi
possono esser selezionati con differenti criteri, ognuno dei quali mostra
buone capacità nel rilevare regioni dalle caratteristiche differenti;
52
L’algoritmo proposto
per esempio un criterio per trovare regioni omogenee rispetto alla
luminosità o ad un colore è quello di specificare una soglia sulla mappa
del gradiente di un’immagine: le componenti connesse formate dai pixel
che stanno al di sotto di questa soglia costituiscono i semi.
Strategia di growing: ad ogni iterazione dell’algoritmo i pixel confinanti
con le regioni presenti formano un insieme, detto insieme dei candidati,
all’interno del quale vengono selezionati alcuni pixel per l’accrescimento
delle regioni. I candidati sono un sottoinsieme dei pixel non assegnati
che meritano di essere analizzati per accrescere le regioni. La modalità
di selezione dei pixel dall’insieme dei candidati e il numero di pixel
selezionati per l’accrescimento dipendono dalla strategia di growing
adottata.
In letteratura si trovano principalmente due strategie:
1. Selezionare per l’accrescimento e inserire nelle rispettive regioni di
appartenenza tutti i pixel dell’insieme dei candidati che superano
un test basato sulle metriche di distanza (vedi sotto). Questa
strategia presenta due debolezze: dipendenza dall’ordine in cui
vengono considerate le regioni e scarso controllo sulla direzione
della crescita delle regioni. Questi difetti portano all’assegnazione
di pixel alle regioni sbagliate.
2. Selezionare per l’accrescimento e inserire nella regione di appartenenza esattamente un pixel per regione, il pixel tra i
candidati per quella regione che si rivela più vicino alla regione in
accordo alla metrica di distanza usata. Questo metodo garantisce
un miglior controllo sulla direzione di crescita delle regioni,
tuttavia l’assegnazione di pixel a regioni errate è ancora possibile.
Seguendo questa strategia, infatti, le regioni tendono espandersi
tutte in ugual misura, un pixel alla volta, cosı̀ è molto probabile
che le regioni più piccole si espandano più del dovuto a spese delle
regioni confinanti.
I problemi propri di queste due strategie possono esser risolti usando
una diversa strategia di growing, che è stata implementata come
parte dell’algoritmo proposto, e quindi verrà illustarata nella prossima
sezione.
Metrica di distanza: le strategie appena descritte si appoggiano su delle
5.1 Scelta iniziale dei semi
53
metriche di distanza per stabilire quali tra i pixel candidati vanno
fusi con le regioni confinanti. Le metriche di distanza forniscono una
misura della distanza tra il pixel canditato e la regione, cioè danno
un’indicazione di quanto il pixel candidato sia adatto a far parte di
quella regione.
In letteratura sono state proposte varie metriche, basate su misure di
discontinuità, similiratà o omogeneità.
Le metriche basate su misure di discontinuità prendono in considerazione il pixel candidato e uno dei pixel appartenenti alla regione
designata, quello adiacente al candidato. Per questi due pixel vengono
calcolate certe caratteristiche dell’immagine, come per esempio il
contrasto [15] o il gradiente. Se la caratteristica è continua tra i due
pixel, allora la metrica fornisce un valore di distanza basso, in modo
che il candidato abbia un’idoneità elevato e un’alta probabilita di esser
selezionato per l’accrescimento dalla strategia di growing. Nel caso in
cui invece ci sia una discontinuità nella caratteristica, a metrica fornisce
un valore di distanza elevato, in modo che sia probabile che il pixel
candidato non venga accorpato alla regione.
Le metriche basate su misure di similarità misurano la distanza tra il
pixel e la regione secondo metriche definite su caratteristiche estraibili
da un pixel o da una regione. Le metriche basate su misure di
omogeneità, infine, misurano l’omogeneità della regione prima e dopo
che il pixel candidato è stato assegnato alla stessa. La variazione di
omogeneità della regione è usata come criterio per stabilire l’idoneità
del pixel alla fusione con la regione.
Per l’algoritmo proposto in questa tesi sono stati considerati questi tre
punti e per ognuno di essi si è studiata e implementata la soluzione che si
é rivelata migliore o più promettente. Lo schema dell’algoritmo di growing
proposto ed implementato è raffigurato in figura 5.1.
5.1
Scelta iniziale dei semi
I risultati ottenuti con un algoritmo di region growing dipendono pesantemente dal numero e dalla posizione delle regioni iniziali, dette seeds (semi).
Questo perchè la fase di growing dell’algoritmo non aumenta nè diminuisce
il numero di zone in cui viene segmentata un’immagine: se una regione non
viene rappresentata da un seed fin dall’inizio questa è persa, in quanto i pixel
54
L’algoritmo proposto
Immagine
Preprocessing
Flat seed selection
Seed selection
Small seed selection
Texture seed selection
Region growing
Merging
Segmentazione
Figura 5.1: Lo schema dell’algoritmo di region growing proposto ed
implementato.
che la compongono vengono assegnati alle regioni limitrofe, producendo cosı̀
una sotto–segmentazione.
Al contrario, se i semi sono troppo numerosi, l’algoritmo dividerà zone
percettivamente uniformi in più regioni, creando un problema si sovra–
segmentazione.
Anche la collocazione spaziale e la dimensione dei semi influenzano molto le
buone prestazioni dell’algoritmo.
In particolare, un numero scarso di semi dall’area ridotta porta a una perdita
di efficienza dell’algoritmo, in quanto il maggior numero di pixel da assegnare
rende più lunga la fase di growing.
Per la selezione dei semi di partenza [18] propone i seguenti criteri:
- Soglia sulla mappa del gradiente di un’immagine:
specificando una soglia sulla mappa di gradiente dell’immagine, si
prendono come regioni iniziali i pixel connessi che stanno al di sotto
di questa soglia. Le regioni ottenute sono prive di forti discontinuità
nell’illuminazione o, in generale, nel colore e quindi possono essere
considerate uniformi. Questo criterio è affidabile se le regioni trovate
sono piuttosto grandi, altrimenti potrebbero essere state generate da
minimi locali dovuti al rumore. Usando questo criterio quindi regioni
5.1 Scelta iniziale dei semi
55
piccole (come caratteri di un testo, particolari di un vestito) potrebbero
esser trascurate e quindi produrre una sotto–segmentazione.
- Negativo della mappa degli edge:
come già detto in precedenza (capitolo 4) gli edge detectors da soli non
bastano per fornire una segmentazione dell’immagine. Questo perchè
spesso tendono a tralasciare bordi importanti, a generare bordi non
chiusi e quindi a creare poche grandi componenti connesse. Tuttavia,
possiamo utilizzare la mappa degli edge per cercare piccole regioni
che hanno un perimetro chiuso. Gli esperimenti condotti provano che
questo metodo è efficace nel trovare regioni piccole molto contrastate
ai bordi.
Questi criteri si prestano bene a generare i semi per un algoritmo di region
growing su immagini a colori, però presentano entrambi degli svantaggi:
il primo criterio non cattura le regioni piccole, il secondo criterio fallisce
nell’estarazione di regioni grandi e poco contrastate ai bordi; entrambi non
sono adatti a trovare regioni caratterizzate da una tessitura.
Durante il lavoro di studio di questa tesi è stato sviluppato e realizzato
il seguente criterio per l’estrazione di semi che si comporta bene sia nel caso
di regioni caratterizzate da una tessitura che di regioni uniformi:
- L’immagine viene suddivisa in quadratini piuttosto piccoli (6 × 6, 8 × 8
o 10 × 10) pixel a seconda della dimensione dell’immagine) e su tali
quadratini viene calcolata la signature utilizzando l’algoritmo descritto
in [23] e riassunto in 2.4.1.
- I quadratini vengono ulteriormente suddivisi in 4 zone, e per ognuna di
esse viene calcolata la signature. Quindi, usando la EMD, vengono
calcolate le distanze tra le signature di due zone adiacenti, come
illustrato in Figura 5.2, e tra la zona e l’intera piastrella.
- Se la distanza massima è inferiore a una soglia T , allora la signature
all’interno del quadratino è considerata uniforme, e quindi o la regione
ha colore omogeneo, o è costituita da un pattern regolare formato dai
colori presenti nella signature (figura 5.2). Tali regioni costituiscono i
semi.
56
L’algoritmo proposto
Figura 5.2: Il metodo adottato per estrarre regioni dalla signature uniforme
(regioni con texture)
E’ interessante notare come questo metodo sia capace di rilevare regioni
uniformi anche in presenza di rumore, mentre il primo metodo richiede che
il rumore sia preventivamente ridotto, per esempio tramite un’operazione di
smoothing.
Sebbene questo terzo criterio sembri offrire risultati migliori rispetto agli altri
due, presenta anch’esso lo svantaggio di non rilevare regioni relativamente
piccole, con altezza o larghezza inferiori alla dimensione del quadratino.
Ciò porta a considerare che un singolo metodo per la selezione dei semi
non è sufficiente: se esistesse un metodo cosı̀ potremmo probabilmente usarlo
5.1 Scelta iniziale dei semi
57
direttamente per segmentare l’immagine.
La soluzione proposta in questa tesi è quella di adottare una procedura di
selezione dei seed che combini i semi provenienti da sorgenti diverse.
La decisione di quale semi selezionare è presa sulla base di un valore di fitness,
calcolato su ogni regione a partire dall’area della stessa, e sul vincolo che due
regioni differenti non devono sovrapporsi. In Figura 5.1 è formalizzato il
metodo per la selezione dei semi ottenuti con criteri diversi.
Cosı̀ facendo non solo si ha il vantaggio di avere seed scelti con criteri
differenti che comprendano regioni dalle caratteristiche differenti, sia regioni
piccole e uniformi che grandi e caratterizzate da una tessitura, ma si
lascia spazio anche ad estensioni future che utilizzano tecniche differenti
per la selzione dei seed. Per esempio, un’estensione dell’algoritmo potrebbe
selezionare seed le regioni con hue uniforme, al fine di diminuire il numero di
artefatti dovuti alla presenza di ombreggiature, ombre e lucentezza (si veda
a proposito il paragrafo 2.2.6).
SeedPriorityQueue region queue;
SeedRegionSet region set;
for each SeedSelector s
s.CalculateRegions();
region queue.push(s.Regions);
end for
while ( not region queue.empty() )
region = region queue.top();
if ( region set ∩ region = ®)
region set.add(region);
end if
end while
Figura 5.3: Metodo per la selezione dei semi provenienti da criteri diversi.
58
5.2
L’algoritmo proposto
Strategia di growing
Nella parte introduttiva del capitolo era stata introdotto il concetto di
strategia di growing ed erano state presentate due diverse startegie e le loro
carenze; in particolare, la dipendenza dall’ordine in cui vengono considerate
le regioni e lo scarso controllo sulla direzione della crescita delle regioni.
Queste debolezze portano all’assegnamento di pixel al regioni errate. Questo
problema è stato risolto introducendo una terza strategia di selezione dei
pixel tra i candidati.
Questa strategia, proposto in [18], seleziona per l’accrescimento e inserisce
nella relativa regione esattamente un pixel per iterazione, scelto tra tutti
i candidati. Rispetto alle altre strategie, viene introdotto un ordinamento
globale sull’insieme dei candidati, basato sulla metrica di distanza adottata:
i pixel sono ordinati sulla base della loro distanza della regione con cui
confinano.
Il pixel scelto dalla strategia è quello più vicino alla relativa regione, e quindi
il più promettente tra i candidati: questo assicura che l’espansione proceda
nella direzione e sulla regione migliori per quell’iterazione.
Questo strategia può esser implementata in maniera efficiente usando una
coda di priorità globale: i pixel sono ordinati all’interno della coda a seconda
della loro priorità, che corrisponde alla distanza dalla regione per cui sono
candidati. La coda viene inizializzata all’inizio dell’algoritmo inserendovi i
pixel sul bordo esterno dei semi. Durante l’esecuzione dell’algoritmo, quando
un pixel viene selezionato dalla strategia per essere assegnato, viene tolto
dalla coda e i suoi vicini (4- oppure 8-connessi) vengono inseriti alla posizione
corretta, data dalla loro distanza dalla regione. Questo garantisce che ad ogni
istante nella coda a priorità vi siano tutti i pixel del bordo esterno di tutte
le regioni, ordinati secondo la metrica data dal criterio di growing adottato.
Il vantaggio maggiore di questo approccio, descritto dallo pseudo-codice
in figura 5.2, è quello di combinare in modo elegante informazioni locali (la
distanza del pixel dalla regione) con informazioni globali (l’ordine dei pixel).
Inoltre l’accorgimento di mantenere i pixel all’interno della coda tra un’iterazione e la successiva, aggiungendo e togliendo solo i pixel interessati
dall’assegnamento, porta notevoli vantaggi in termini di efficenza: ad
ogni iterazione, sono necessarie solo una lettura dalla testa della coda,
un’estrazione del minimo e 4 (oppure 8) inserzioni. Per una coda di
5.2 Strategia di growing
59
priorità realizzata tramite heap, le operazioni di estrazione dell’elemento
con priorità minima, di cancellazione dell’elemento con priorità minima
e di inserimento di un elemento possono esser realizzate in modo molto
efficente, con complessità pari a O(1), O(log n) e O(log n) rispettivamente.
Tuttavia, questo accorgimento porta anche uno svantaggio che potrebbe
dare origine ad errori nell’assegnamento dei pixel: la priorità del pixel
(e quindi la sua posizione all’interno della coda) è quella calcolata al
momento del suo inserimento nella coda. Tra il momento dell’inserimento
e quello dell’estrazione possono passare diverse iterazioni; cambiamenti nelle
caratteristiche delle regioni dovute all’accrescimento delle stesse potrebbero
aver modificato la distanza del pixel dalla regione. In realtà, da un punto
di vista pratico, la differenza tra la distanza al momento dell’inserimento e
quella al momento dell’estrazione è molto ridotta, trascurabile ai fini di una
corretta segmentazione.
PixelPriorityQueue pixel queue;
SeedRegionSet region set;
for each ( Pixel p ∈ region set.boudaries() )
CalculateFitnessValue(p);
pixel queue.push(p);
end for
while ( not pixel queue.empty() )
candidate pixel = pixel queue.top();
region set.assign(candidate pixel);
for each ( pixel p ∈ Neighborhood(candidate pixel) )
CalculateFitnessValue(p);
pixel queue.push(p);
end for
end while
Figura 5.4: Algoritmo per il growing basato sulla strategia proposta
60
5.3
L’algoritmo proposto
Metriche di distanza
Le strategie di growing presentate in questo capitolo si appoggiano su delle
metriche di distanza per stabilire quali tra i pixel candidati vadano fusi con
le regioni confinanti e in che ordine debbano esser considerati. Le metriche
di distanza forniscono una misura della distanza tra il pixel canditato e la
regione, cioè danno un’indicazione di quanto il pixel candidato sia adatto a
far parte di quella regione.
Nei capitoli precedenti sono state introdotte misure di similarità tra regioni
basate sul colore (come la EMD, vedi capitolo 2.4.2) e sulla tessitura
(vedi capitolo 3.1.3). Queste misure di similarità estraggono un vettore di
caratteristiche dalle regioni interessate e calcolano la distanza tra i due vettori
usando una metrica definita su di essi. Possiamo utilizzare queste metriche
anche per misurare la distanza tra un pixel e una regione, basta avere un
metodo per estrarre il vettore di caratteristiche da un singolo pixel. Il metodo
impiegato in questo lavoro è semplice: invece di considerare il singolo pixel,
si considera una regione costituita da un piccolo intorno del pixel in esame
(figura 5.5(a)). Su questa regione, i vettori delle caratteristiche (per esempio,
la signature di colore) possono esser calcolati con facilità usando i metodi già
discussi (vedi capitoli 2.4.1 e 3.1.3).
Un discorso a parte lo meritano le metriche basate su misure di
discontinuità, come il contrasto o il gradiente. In questo lavoro, per esempio,
è stata implementata una metrica di distanza basata sul gradiente: in
questo caso, come già accennato in precedenza, si misura la differenza tra
la caratteristica calcolata per il pixel in esame e per il pixel della regione
confinante con esso (figura 5.5(b)).
Solitamente per l’algoritmo di growing viene scelta una tra queste
metriche; tuttavia, analogamente a quanto osservato per la strategia di scelta
dei semi, una sola metrica non basta a cogliere tutte le differenze da un punto
di vista percettivo. Come rilevato nel capitolo 1, sia il colore che la tessitura
sono fondamentali per il sistema visivo umano, quindi si è deciso di usare più
misure tramite una combinazione lineare.
dEM D (p, R): distanza EMD tra signature di colore calcolate sulla regione R
e l’intorno del pixel p(vedi figura 5.5(a) e capitolo 2.4.2).
dW (p, R): distanza bin-by-bin tra i vettori dei coefficinti wavelet della regione
R e dell’intorno del pixel p (vedi figura 5.5(a) e capitolo 3.1.3).
5.3 Metriche di distanza
61
pixel candidato
pixel candidato
pixel regione
pixel regione
pixel intorno
pixel confinante
(a) usando un intorno
del pixel
(b) usando le caratteristiche del pixel confinante
Figura 5.5: Calcolo della distanza tra pixel e regione
dgrad (p, R): distanza tra il valore del gradiente calcolato con l’operatore
Difference Vector Gradient al pixel candidato p e al pixel confinante
della regione R (vedi figura 5.5(b) e appendice A).
Per una misura di distanza complessiva:
d(p, R) = dEM D (p, R) + dW (p, R) + dgrad (p, R)
I risultati ottenuti, però, non sono stati quelli attesi: mentre le misure
fornite dalle metriche basate sulla signature di colore e dalle metriche
basate sulla differenza di gradiente si sono rivelate confrontabili, le misure
ricavate dalle metriche basate sulla distanza tra i coefficienti wavelet non lo
sono. I risultati di tutte le misure sono stati moltiplicati per un’oppurtuna
costante in modo da rientrare tutti nell’intervallo (0, 1), ma mentre i
risultati per le misure dEM D e dgrad sono distribuite in modo quasi uniforme
lungo l’intervallo, con una concentrazione maggiore nel primo 10-15%, i
risultati della misura dW (p, R) sono distribuiti in modo molto diverso, con
concentrazioni più elevate attorno ad alcuni valori e per di più in modo molto
dipendente dall’immagine.
62
L’algoritmo proposto
Si è quindi scelto di ricorrere a una misura di distanza diversa, che
comprendesse comunque l’informazione proveniente da tutte e tre le fonti
(signature di colore, coefficienti Wavelet e valore del gradiente):
d(p, R) = (dEM D (p, R) + dgrad (p, R)) × dtexture (p, R)
dove dtexture è pari a:
(
dtexture (p, R) =
Klow se classe(p) = classe(R)
Khigh altrimenti
La classe di p e R è calcolata a partire dalla mappa delle texture introdotta
nel capitolo 3, e le due costanti Klow e Khigh sono calcolate in maniera
empirica (e sono pari rispettivamente a 0.8 e 1.5 per l’algoritmo proposto).
5.4
Implementazione
Tutti i concetti analizzati e studiati nei paregrafi precedenti (spazi di colore,
metriche, trasformate Wavelet, criteri di growing, misure di omogeneità e
discontinuità) sono stati implementati nell’algoritmo proposto come parte di
questo lavoro di tesi.
Uno dei requisiti che sono stati ritenuti necessari per un’utilizzo pratico
dell’algoritmo e per rendere agevole la sperimentazione e l’utilizzo per lavori
futuri è che questo fosse parametrico e modulare in ogni suo aspetto.
Un altro requisito essenziale è l’efficienza: le immagini sono strutture
dati di grandi dimensioni, l’eleborazione è molto dispendiosa in termini
computazionali, quindi è necessario evitare ogni possibile overhead.
Tali requisiti sono stati soddisfatti in massima parte utilizzando la
programmazione generica e i template.
In particolare per che incapsulano le immagini sono tutte parametriche
sullo spazio di colore e ogni funzione che manipola immagini è a sua volta
parametrica sul tipo di immagine.
Inoltre le funzioni che necessitano di una metrica per compiere la loro
elaborazioni sono parametrici sul tipo di metrica. Le metriche sono
implementate come classi e sono a loro volta indipendenti dallo spazio di
colore utilizzato (vedi diagramma UML in figura 5.6).
5.4 Implementazione
63
color_t
dist_t
VectorAngle
color_t
dist_t
L2_Norm
Combined
color_t
dist_t
CombLuma
color_t
dist_t
CombSaturation
Figura 5.6: Il digramma delle classi UML relativo alle classi che
implementano le metriche
Tutto questo consente di avere lo stesso algoritmo e la stessa implementazione operanti su una qualsiasi combinazione di tipo di immagine, spazio
di colore e metrica e rende possibile aggiungere nuove metriche e nuovi spazi
di colore con sforzo minimo.
Dovrebbe esser chiaro come questa scelta porti notevoli vantaggi dal punto
di vista della modularità e della estensibilità.
Per quanto rigurada l’efficienza, l’inlinig delle funzioni e il polimorfismo
statico permesso dei template rendono il codice molto efficiente. Per ulteriori
dettagli si veda l’Appendice B.
Come supporto all’illustrazione dell’implementazione dell’algoritmo ho
incluso i digrammi UML relativi alle classi realizzate per l’algoritmo.
In particolare, sono presenti il digramma delle classi relativo alla parte
centrale dell’algoritmo (figura 5.7), il diagramma UML delle classi usate per
implementare le metriche di distanza tra colori (figura 5.6) e i diagrammi di
sequenza relativi alle fasi di selezione delle regioni iniziali (figura 5.8) e di
growing.
64
L’algoritmo proposto
image_t
SignatureBase<image_t>
<<interface>>
SignatureBase
clone()
merge()
distance()
compute_signatu...
image_t
metric_t
ColorSignature
image_t
GradSignature
image_t
WaveletSignature
std::vector<Sign
atureBase*>
T
ImageRegion
image_t
ColorSiganture<EM
DColorDistance>
std::vector<Reg
ionFeatures>
RegionFeatures
ImageRegio
n<uchar>
image_t
color_t
cmp
EdgeSmallSeedSelector
image_t
std::priority_queue<
CandidatePixel>
EMDColorDistance
image_t
CandidatePixel
FlatTexSeedSelector
image_t
FlatSeedSelector
image_t
RegionGrowing
std::priority_queue<
CandidateSeed>
CandidateSeed
Figura 5.7: Il digramma delle classi UML; per questo digramma, piuttosto
complesso, è stata adottata l’estensione basata sul colore proposta per UML
2.0. L’utilizzo del colore aggiunge una dimensione al digramma, rendendone
più facile la comprensione. I colori adottati sono quelli proposti: giallo per
le classi centrali, quelle che rivestono un ruolo centrale nel digramma; blu
per le classi che rappresentano dati; arancione per i punti di estensibilità;
verde per le classi che nel digramma rivestono un ruolo secondari; grigio per
le classi provenienti da librerie
Come si vede dal diagramma UML in figura 5.7 la classe più imporante
è la classe SignatureBase. Questa classe, che esporta le funzioni merge,
clone, distance e compute signature è l’interfacca usata dall’algoritmo
per accedere alle informazioni sulle features di un pixel o di una zona a più
livelli:
Durante la fase di selezione dei semi, per calcolare le features della regione coperta da ogni seme, utilizzando il metodo compute signature.
uchar
5.4 Implementazione
65
Durante la fase di growing dell’algoritmo, per per calcolare le features
dei pixel candidati, utilizzando il metodo compute signature, e la loro
distanza (priorità) utilizzando il metodo distance.
Durante la fase finale di merge, per calcolare la distanza tra due regioni
candidate per la fusione, utilizzando il metodo distance e la nuova
segnatura della regione in caso di fusione, utilizzando il metodomerge.
Tutti le classi che incapsulano una feature o caratteristica (come la
classe ColorSignature, che rappresenta una segnatura di colore come
descritta nel capitolo 2.4.2, o la classe WaveletSignaure, che rappresenta
la classe di texture di un pixel o di una regione, utilizzando la mappa
descritta nel capitolo 3) sono derivate da SignatureBase, in modo da fornire
all’algoritmo la medesima interfaccia. Questo permette all’algoritmo di
accedere alle funzioni di queste classi senza doverne conoscere la classe, ma
solo l’interfaccia. Aggiungere all’algoritmo un nuovo criterio di omogeneità o
discontinuità, come pure un nuovo tipo di feature per caratterizzare pixel e
regioni, diventa cosı̀ molto semplice: è sufficiente ereditare una nuova classe
da SignatureBase e implementarne i metodi.
Fornire un nuovo algoritmo per la selezione iniziale dei semi è altrettanto
semplice: le classi per la scelta iniziale dei semi (*SeedSelector) implementano un metodo -select- che crea un insieme di classi ImageRegion,
rappresentanti i seed iniziali, e le inserisce nelle coda a priorità della classe
centrale, la classe RegionGrowing.
E’ interessante notare come questa caratteristica di modularità dell’algoritmo, che permette di avere diversi criteri di scelta iniziale dei semi e di
usare differenti criteri di growing, renda possibile implementare l’algoritmo
JSEG -introdotto nel capitolo 2 e descritto in [33]- in termini dell’algoritmo
stesso.
66
L’algoritmo proposto
:
RegionGrowing
:
FlatTexSeedSelector
:
EdgeSmallSeedSelector
:
EMDColorDistance
NewRegion :
CandidateSeed
:
std::priority_queue<CandidateSeed>
select()
distance()
new
push(NewRegion)
select()
select_seeds( )
NextSeed := top()
Figura 5.8: Il digramma di sequenza UML relativo alle fasi di scelta iniziale
dei semi
Capitolo 6
Risultati sperimentali
“Vita brevis, ars longa, occasio praeceps, experimentum periculosum,
jiudicium difficile”.
(La vita è breve, l’arte durarura, l’occasione fuggevole, lo sperimentare
pericoloso, il giudicare difficile.)
Ippocrate
Esperimenti e test sulla segmentazione sono stati effettuati su vari tipi di
immagini, sia naturali che artificiali. Sebbene il metodo proposto consenta
di impostare numerosi parametri per ottimizzare la segmentazione in base
a tipi di immagini differenti, si è scelto di condurre tutti gli esperimenti
con le stesse soglie e gli stessi parametri. Questa scelta è stata dettata
dal fatto che l’algoritmo studiato è stato concepito come un’algoritmo per
l’utilizzo generico, adatto ad ogni tipo di immagine, come richiesto in molti
campi di ricerca attuale (per esempio il context-based image retrieval, si veda
l’introduzione).
Il problema della valutazione degli algoritmi per la segmentazione delle
immagini è forse ancora più complesso (e sicuramente è maggior causa di
dibattito) del problema della segmentazione stesso.
Non esistono criteri per definire una “buona segmentazione” che siano
indipendenti dall’algoritmo e dal tipo di immagine, sebbene esistano criteri
68
Risultati sperimentali
studiati ad-hoc per alcuni algoritmi (si veda [33]), e tantomeno test degli
algoritmi su immagini naturali: tutti i test attuali si basano su immagini
artificiali che non presentano tessiture.
Un test quantitativo dei risultati va quindi oltre lo scopo di questa tesi.
Di seguito, viene dato un giudizio qualitativo dell’algoritmo analizzando i
risultati della sua applicazione a una serie di immagini di test, confrontandole
con le immagini ottenute con un algoritmo esistente (JSEG, si veda [33]).
Sono forniti anche i dati sulla prestazioni, sempre a confronto con le
prestazioni ottenute da JSEG. Parte delle immagini usate durante i test
sono riportate nelle pagine successive. Di alcune di esse, dove si è ritenuto
che siano significativi, sono riportati anche i risultati di alcuni passeggi
intermedi effettuati dall’algoritmo proposto. In particolare, le immagini
Wavelet map si riferiscono alla mappa delle tessiture introdotta nel capitolo
5, le immagini Edge map visualizzano i semi ricavati mediante il metodo
basato sulla mappa degli edge (sezione 5.1), le immagini prima del merge
e dopo il merge sono le immagini della segmentazione fatta dall’algoritmo.
L’immagine Segmentazione è equivalente all’immagine dopo il merge; le
regioni sono le stesse, ma sono presentate in modo diverso (con una mappa dei
colori principali e tracciando i contorni delle regioni sull’immagine originale,
rispettivamente).
La prima caratteristica che si nota esaminando le immagini di test è la
tendanza dell’algoritmo a produrre una sovra–segmentazione dell’immagine.
Questo si nota specialmente in flower garden e geneva1. Al contrario JSEG,
con i parametri di default, tende a sotto–segmentare le immagini.
Il primo set di immagini è costituito da immagini “standard” per il test di
algoritmi di segmentazione.
Nell’immagine baboon (figura 6.1(e)) si nota come l’algoritmo proposto
divida in più zone il pelo del viso, in zone che hanno una predominza di
colore diversa: grigio, verde, giallo, azzurro. Questo risulta in una sovra–
segmentazione dal punto di vista semantico, tuttavia le zone riconosciute sono
effettivamente differenti da un punto di vista percettivo. Le zone più rilevanti
(occhi, muso, naso) sono tutti riconosciuti come elementi distinti. In questo
caso JSEG (6.1(f)) non riesce a riconoscere alcune di queste caratteristiche:
manca un occhio e parte del naso. Tuttavia, il pelo viene suddiviso in un
numero minore di zone.
69
(a) L’immagine di test baboon
(b) Wavelet map
(c) Prima del merge
(d) Dopo il merge
(e) Segmentazione (algoritmo
proposto)
(f) Segmentazione (JSEG)
Figura 6.1: L’immagine di test baboon
70
Risultati sperimentali
Nell’immagine flower garden (figure 6.3(e), 6.3(e)) si nota invece una
migliore segmentazione di JSEG, sia nella definizione del bordo del prato
(nella parte bassa dell’immagine), sia per quanto riguarda la divisione in
zone: l’algoritmo proposto tende a suddividere le piante di fiori in più zone,
dividendo le zone composte in prevalenza da fiori dalle zone composte in
prevalenza da foglie (parte centrale dell’immagine). In compenso, l’algoritmo
proposto riesce a isolare la cornice della finestra dal muro di mattoni (a
sinistra), dove JSEG li considera come una regione unica.
Nell’immagine parrots (figure 6.4(e), 6.4(e)) la situazione cambia: stavolta
è JSEG a presentare un problema di sovra–segmentazione. L’algoritmo
proposto produce un numero inferiore di regioni, specialmente per quel che
riguarda lo sfondo. In compenso, JSEG presenta una migliore definizione dei
contorni: si noti il becco del pappagallo giallo, o l’ala destra del pappagallo
rosso.
In immagini di test più semplici, come house o hand, figure 6.5 e 6.6, la
segmentazione è quasi perfetta: in hand i tre oggetti principali (mano,
anello, sfondo con tessitura) vengono riconosciuti con localizzazione dei bordi
precisa, in house vengono rilevati parecchi particolari della casa (finestre,
tetto) e il prato è riconosciuto come una regione uniforme e separata. Solo
negli alberi si ripresenta la sovra–segmentazione.
Immagine
baboon
hand
flower garden
house
parrots
Algoritmo proposto
1:29
0:23
2:12
0:14
1:44
JSEG
2:41
0:22
4:21
0:10
4:00
Dimensioni
512 × 512
303 × 243
756 × 504
205 × 192
768 × 512
Figura 6.2: Le prestazioni dell’algoritmo proposto a confronto con quelle di
JSEG
71
(a) L’immagine di test flower
garden
(b) Trasformata Wavelet
(c) Wavelet map
(d) Prima del merge
(e) Dopo il merge
(f) Segmentazione (algoritmo
proposto)
(g) Segmentazione (JSEG)
Figura 6.3: L’immagine di test flower garden
72
Risultati sperimentali
(a) L’immagine di test parrots
(b) Edge regions map
(c) Wavelet map
(d) Prima del merge
(e) Dopo il merge
(f) Segmentazione (algoritmo
proposto)
(g) Segmentazione (JSEG)
Figura 6.4: L’immagine di test parrots
73
(a) L’immagine di test house
(b) Prima del merge
(c) Dopo il merge
(d) Segmentazione
Figura 6.5: L’immagine di test house
(a) L’immagine di test hand
(b) Segmentazione
Figura 6.6: L’immagine di test hand
74
Risultati sperimentali
Oltre a questi test preliminari, i cui risultati sono stati confrontati con
JSEG, si sono condotti ulteriori test su immagini di natura diversa, per
testare le capacità dell’algoritmo con immagini di natura differente. Si prenda
per esempio la figura 6.7: in quest’immagine si nota come siano rilevati tutti
i piccoli particolari, come le finestre, i panni appesi alle finestre, i tendoni
al livello della strada e le barche nell’acqua. Molti di questi particolari sono
estratti usando la mappa delle texture e la mappa degli edge (figure 6.7(c) e
6.7(d)).
Un’ultima immagine su cui vale la pena spendere qualche parola è
l’immagine newspaper. Questa immagine è stata acquisita con uno scanner,
ed è la pagina di un giornale a colori stampato con la tecnica del diethering. Il
problema nel segmentare queste immagini sta nel fatto che le regioni stampate
con questa tecnica, “uniformi” da un punto di vista percettivo, non hanno in
realtà un colore uniforme. Infatti, i punti con cui sono composte le immagini
non solo hanno intensità differente, come accade nella maggior parte delle
tessiture, ma anche tinta diversa. Inoltre, bisogna distinguere queste zone
dalle zone di testo: è importante ai fini dell’elaborazione del documento
nelle fasi successive che i caratteri stampati siano conservati (riconoscendoli
come regioni distinte), ma il diethering sia rimosso (riconoscendo le regioni
stampate con questa tecnica come uniformi). Questo è reso possibile grazie
ai due metodi di selezione dei seed implementati: il metodo delle “piastrelle”
(figura 6.8(b)) consente di individuare le regioni con diethering, mentre il
metodo basato sul negativo della mappa degli edge (figura 6.8(c)) consente
di individuare i caratteri stampati.
75
(a) houses
(b) Trasformata Wavelet
(c) Wavelet map
(d) Edge region map
(e) Prima del merge
(f) Dopo il merge
(g) Segmentazione
Figura 6.7: L’immagine di test houses
76
Risultati sperimentali
(a) newspaper
(b) Texture map
(c) Edge region map
(d) Wavelet map
Figura 6.8: L’immagine di test newspaper
77
(a) Prima del merge
(b) Dopo il merge
(c) Segmentazione
Figura 6.9: L’immagine di test newspaper (continua)
78
Risultati sperimentali
(a) flowers2
(b) Prima del merge
(c) Dopo il merge
(d) Segmentazione
Figura 6.10: L’immagine di test flowers2
79
(a) house2
(b) Prima del merge
(c) Segmentazione
Figura 6.11: L’immagine di test house2
80
Risultati sperimentali
(a) geneva1
(b) Prima del merge
(c) Dopo il merge
(d) Segmentazione
Figura 6.12: L’immagine di test geneva1
Capitolo 7
Conclusioni
7.1
Conclusioni
Dal lavoro di ricerca presentato in questa tesi possono esser tratte varie
conclusioni
7.1.1
Il framework
Nell’implementare l’algoritmo di region growing basato sulle tessiture è stato
elaborato e sviluppato un framework efficiente e riusabile, adatto all’utilizzo
come base di partenza per la sperimentazione e l’implementazione di varianti
dell’algoritmo.
7.1.2
Il colore
Le prove sono state condotte utilizzando RGB come spazio di colore e il
Vector Angle combinato con la distanza euclidea sulla base dell’informazione
di luminosità come metrica.
Alcuni esperimenti condotti sulle prime implementazioni dell’algoritmo
hanno mostrato come questa metrica rappresenti il miglior compromesso:
come previsto nel capitolo 2 il solo utilizzo della distanza euclidea porta a
risultati percettivamente non corretti ed a un alto numero di falsi positivi
dovuti alle ombre.
D’altra parte, l’uso del Vector Angle da solo si rivela problematico in
immagini naturali, dove zone con bassa luminosità o saturazione fanno
82
Conclusioni
emergere l’instabilità numerica di questa metrica per certi valori. Usando una
combinazione delle due metriche con trade-off dato dalla luminosità risolve
completamente il secondo problema e in maniera parziale anche il primo.
Putroppo, cosı̀ facendo l’algoritmo ritorna ad essere piuttosto sensibile alle
ombre, anche se non in modo cosı̀ marcato come con la distanza euclidea.
7.1.3
La tessitura
Combinare in maniera efficace le informazioni sulla tessitura, ricavate grazie
all’analisi wavelet, con le informazioni sul colore, ricavate dalla signature
di una zona, si è rivelato il compito più arduo di questo lavoro di tesi. I
risultati iniziali basati sulla distanza tra gli istogrammi dei coefficienti wavelet
(vedi capitolo 3) sono stati deludenti: le due metriche, quella per le tessiture
e quella per il colore, fornivano risultati distribuiti in maniera diversa nei
rispettivi intervalli, cosa che ne rende impossibile il confronto. Cosı̀ si è
optato per una più semplice, ma efficace, suddivisione delle zone in poche
classi di texture.
7.1.4
Selezione dei candidati
Il sistema di selezione dei candidati tramite coda di priorità possiede la
caratteristica di rendere solo un pixel disponibile per il growing ad ogni
iterazione. Questo rende il processo growing più ordinato e prevedibile,
rendendo la localizzazione degli edge più precisa.
7.1.5
Selezione dei semi
La selezione dei semi usando criteri multipli, come il negativo della mappa
degli edge, permette di avere un numero maggiore di regioni di partenza a
disposizione. Questo, se da un lato permette di evitare il problema della
sottosegmentazione e la perdita di dettagli significativi, dall’altro favorisce
la sovrasegmentazione. L’algoritmo proposto tende infatti a generare un
numero elevato di regioni; spesso questa caratteristica è desiderabile rispetto
alla sottosegmentazione, e può essere mitigata modificando opportunamente
i parametri. Tuttavia il problema resta. Tra le possibili estensioni a questa
tesi, a mio avviso la più importante riguarda lo studio di un algoritmo di
merging più efficiente che permetta di risolvere questo problema.
7.2 Lavori futuri
7.2
7.2.1
83
Lavori futuri
Miglioramenti dell’algoritmo
Vanno ancora condotti esperimenti per impostare in maniera più precisa
i parametri e diminuire l’effetto di sovra-segmentazione che si riscontra in
molte immagini.
Questo effetto, molto probabilmente, è causato anche dall’uso di un algoritmo
di merging non ottimale, nell’ultima fase del procedimento. Lo studio
e l’implementazione di un algoritmo che sfrutti in modo più completo le
informazioni a dispozione (area, signature, classe di tessitura della zona,
nonchè seed selector di provenienza) è necessario.
Le performance dell’algoritmo, sebbene soddisfacenti per gli scopi attuali
e superiori a quelle di JSEG (vedi capitolo 6), possono essere migliorate,
in particolar modo per quanto riguarda il calcolo della EMD, che risulta
pesare per circa il 50% sul tempo totale di computazione (dati del profiler
alla mano).
7.2.2
Utilizzi dell’algoritmo
Visto il gran numero di features e caratteristiche importanti dal punto di vista
percettivo estratte dall’algoritmo, un suo uso in sistemi di image retrieval
sembra indicato.
La segmentazione, la descrizione delle caratteristiche di colore per ogni zona,
la mappa delle classi di tessitura, sono tutte features molto importanti per
stabilire la corrispondenza tra immagini e forniscono una buona base di
partenza per il query by context.
Appendice A
Edge detection
Nel capitolo 5 sono stati introdotti vari criteri per il calcolo delle regioni inziali
(seeds) per l’algoritmo di region growing proposto. Due di questi criteri si
appoggiano sulla mappa del gradiente dell’immagine e sulla mappa degli edge
derivata da quest’ultima. Per il calcolo del gradiente di un’immagine a colori
è stato usato un operatore che sfrutta le metriche introdotte nel capitolo 2.
A.1
Difference Vector
L’edge detector Difference Vector e’ un operatore 3x3 che calcola il gradiente
massimo attraverso il pixel centrale.
1
2
3
8
X
4
7
6
5
Figura A.1: Gli indici dei pixel in un intorno 3x3
GDV = max {D(~vi , ~vi+4 }
i=1...4
dove i rappresenta una tra le prime quattro (tra le otto possibili) posizioni
attorno al pixel centrale (figura A.1), e D rappresenta una metrica di
A.2 Entropy Thresholding
85
distanza tra quelle discusse nei paragrafi precedenti. Cosı̀ facendo si ottiene
una misura del gradiente lungo le quattro direzioni (orizzontale, verticale,
diagonale sinistra e diagonale destra) che passano attraverso il pixel centrale.
A.2
Entropy Thresholding
Tutti gli operatori di edge detection forniscono come risultato mappe del
gradiente che devono essere binarizzate per ottenere una mappa degli edge,
usando una soglia: data l’immagine a scala di grigio del gradiente, bisogna
stabilire un valore di soglia che funga da spartiacque; al di sopra di questo
valore il pixel appartiene a un edge, al di sotto no.
Una soluzione è quella di chiedere all’utente di fornire un valore per la soglia:
questo è possibile quando si ha a che fare con sistemi interattivi, tuttavia
spesso è desiderabile (e in sistemi automatici necessario) fornire una soglia
automatica e adattiva, che cioè sia scelta in modo ottimo da un algoritmo
sulla base della mappa del gradiente e del contenuto dell’immagine.
Come parte del lavoro svolto durante la preparazione di questa tesi, è stato
implementato un metodo basato sulla massimizzazione dell’entropia.
Questa tecnica è usata spesso per il problema della classificazione dei dati in
due classi. Il problema consiste nel dividere un insieme di valori in due parti
facendo in modo che l’errore sia minimo.
Per assicurare ciò, si cerca di dividere i dati in due insiemi in modo che
l’entropia totale (la somma dell’entropia delle due partizioni) sia massima.
Brevemente: poniamo che il gradiente (l’intensità di un edge) sia compreso
nell’intervallo [0, M ] e che nell’immagine ci siamo fi pixels che hanno intensità
uguale a i, con i ∈ [0, M ]. Data una certa soglia T , si può definire la
distribuzione di probabilità per le due classi (pixel di edge (e), pixel non
di edge (n)).
Visto che un pixel non può essere sia di edge che no, le due distribuzioni sono
indipendenti.
Quindi la probabilità per i pixel non di edge data la intensità i può essere
definita come:
fi
Pn (i) = PT
h=0
fh
,
0≤i≤T
(A.1)
86
Edge detection
analogamente la probabilità per i pixel di edge data la intensità i è definita
come:
fi
Pe (i) = PM
, T +1≤i≤M
(A.2)
h=T +1 fh
Ora che abbiamo la probabilità ci è possibile definire l’entropia per le due
classi di pixel:
T
X
Hn (T ) = −
Pn (i) log Pn (i),
0≤i≤T
(A.3)
i=0
He (T ) = −
M
X
Pn (i) log Pn (i),
0≤i≤T
(A.4)
i=T +1
E quindi la soglia ottimale T̄ per la classificazione di un pixel come di edge
o di non edge è quella che soddisfa la seguente funzione:
H(T̄ ) = max {Hn (T ) + He (T )}
T =0...M
(A.5)
Cercare il massimo globale di questa funzione ha complessità O(M 2 ), ma
esiste un algoritmo veloce che richiede tempo lineare. Quest’ultimo algoritmo
è stato implementato come parte di questo lavoro. Per dettagli si veda [10].
Appendice B
Polimorfismo statico vs.
polimorfismo dinamico
I linguaggi di programmazione tradizionali (Pascal, C, ecc) sono basati
sull’idea che le funzioni, e quindi i loro parametri, abbiano un solo tipo.
Questi linguaggi si dicono monomorfi.
Un linguaggio monomorfo costringe il programmatore a riscrivere funzioni
che usano lo stesso algoritmo ma operano su tipi di dati diversi (come sort,
swap, max...) e strutture dati (come liste, alberi, tabelle) per ogni tipo di
dato utilizzato. Si ha invece il polimorfismo quando il linguaggio adoperato
consente di scrivere funzioni che possono operare su un numero infinito di
tipi, purché questi rispettino alcune proprietà.
Si noti che in questa definizione rientrano sia il polimorfismo per inclusione
(quello classico nella OOP) che il polimorfimo parametrico (quello della
programmazione generica).
Il C++ permette di programmare usando entrambi i paradigmi. Il primo
viene implementato tramite le funzioni virtuali, e viene anche chiamato
polimorfismo dinamico, il secondo viene implementato tramite i template,
e viene detto anche polimorfismo statico.
Ci sono molti pro e contro sull’utilizzo entrambi i paradigmi; di solito i puristi
dell’OOP considerano migliore il primo approccio [21], ma sulla scia dell’STL
(la libreria standard del C++) sono nate molte librerie che sfruttano la
programmazione generica. In questo lavoro è stata usata la programmazione
generica (e quindi il polimorfismo statico) per svariate ragioni, tra cui
conviene sottolinearne una: l’efficienza.
Il principale svantaggio delle funzioni virtuali è il loro costo: la perdita di
88
Polimorfismo statico vs. polimorfismo dinamico
efficienza dovuta alla chiamata di una funzione virtuale (contro la chiamata
a una funzione normale o parametrica) è del 20-30%.
Questo overhead è dovuto a due cause: la chiamata tramite v-table e
l’impossibilità di fare l’inlining delle funzioni virtuali.
Quando nel codice si presenta una chiamata a funzione virtuale, il compilatore non sa (e non può sapere, visto che per fortuna ai compilatori C++,
di per sè già pittosto complessi, non viene richiesto di fare un’analisi statica
del flusso del codice) che funzione sarà chiamata a run-time, perché non sa
a quale classe appartiene l’oggetto su cui è invocata la funzione:
class A
{
public:
virtual void f() = 0;
};
class B : public A
{
public:
void f() { ... }
};
class C : public A
{
public:
void f() { ... }
};
int main()
{
A* a;
int i;
cin >> i;
if (i == 0)
a = new C();
//(1)
89
else
a = new B();
//(2)
a->f();
//(3)
return 0;
}
In (3) verrà chiamata la f() di C o di B? Il binding è sconosciuto a compiletime, e cosı̀ il compilatore memorizza all’interno di ogni oggetto creato (1,
2) un puntatore alla funzione corretta (C::f() in (1) e B::f() in (2)) per ogni
funzione virtuale presente nella classe. Questa tabella di puntatori a funzione
viene detta v-table.
Purtroppo, questo significa che invece di una semplice istruzione assembler
call il compilatore deve generare il codice per recuperare il puntatore e poi
fare la chiamata, aggiungendo due accessi alla memoria.
Inoltre la mancanza di conoscenza a compile time della funzione che verrà
invocata rende impossibile farne l’inlining.
Usando i template, invece, il compilatore genera del codice eseguibile diverso
per ogni tipo di dato su cui viene invocata la funzione. Questo permette di
inserire direttamente nel codice compilato l’indirizzo della funzione, oppure
il codice stesso nel caso si voglia l’inlining, quando questa viene invocata.
Appendice C
L’algoritmo del trasporto
L’algoritmo del trasporto minimizza il costo del trasporto di merci da m punti
di origine a n punti di destinazione lungo m ∗ n percorsi diretti dall’origine
alla destinazione.
Ognuno degli m punti di origine (fornitori) ha a disposizione merci in quantità
a1 , ..., am e ognuno degli n punti di destinazione (consumatori) ha domanda
pari a b1 , ..., bn .
Inoltre ognuno degli m ∗ n percorsi ha associato un costo cij , i = 1..m, j =
1..n.
Le tre strutture dati di input sono quindi:
1. Vettore delle forniture a
2. Vettore delle domande b
3. Matrice dei costi di consegna c
Nel caso di nostro interesse, la somma delle merci richieste dai consumatori
P
è uguale alla somma delle merci rese disponibili dai fornitori ( m
i=1 ai =
Pn
j=1 bj ), e il problema è quindi detto bilanciato.
Per procedere con l’algoritmo, abbiamo bisogno di una matrice di appoggio
i ∗ j, che denotiamo con x, che conterrà via via la quantità di merce che il
fornitore i-esimo deve consegnare al destinatario j-esimo.
Questo è un problema di ottimizzazione, e l’algoritmo è basato sulla
tecnica della ricerca locale. E’ quindi necessario cercare una soluzione iniziale
percorribile, che verrà poi ottimizzata dalla seconda fase dell’algoritmo.
91
La scelta di una buona soluzione iniziale è desiderabile, in quanto consente
di diminuire il numero di passi necessari per trovare l’ottimo nella seconda
fase dell’algoritmo.
Per questo lavoro si è scelto di implementare una semplice tecnica greedy.
Prima di iniziare a descrivere l’algoritmo, è necessario intrudurre due
termini: si dicono celle di base le celle della matrice della soluzione parziale
x che hanno un flusso positivo -che hanno cioè della merce allocata lungo quel
percorso-, mentre si dicono celle non di base quello il cui flusso è attualmente
pari a zero.
L’algoritmo procede come segue:
La prima fase consiste nel costruire una soluzione iniziale percorribile
usando una tecnica greedy:
1. se la porzione ancora valida dell’array consiste di una singola riga
o di una singola colonna
• si seleziona ogni cella rimanente in essa come una cella di base;
• si termina;
2. altrimenti
• si trova la variabile con il costo di consegna più basso, poniamo
che sia cij ;
• si marca la cella cij come cella di base;
3. per ogni cella di base cij scelta al passo precedente
• si assegna a cij il flusso massimo possibile, min(ai , bj );
• si cancellano la riga i-esima (se min(ai , bj ) = ai ) o la colonna
j-esima (se min(ai , bj ) = bj ): questa non sarà più considerata
nella scelta della variabile al passo 2;
• si riducono la domanda bj e l’offerta ai di min(ai , bj ); si
noti che una delle due variabili (quella sulla riga/colonna
cancellata) verrà posta a zero;
La seconda fase consiste nel determinare una variabile entrante tra le celle
non di base. Se tutte le celle non di base soddisfano la condizione di
ottimalità, ci si ferma; altrimenti si va alla terza fase:
92
L’algoritmo del trasporto
14
13
12
11
21
17
23
16
22
15
19
18
20
23
24
1000
1500
2000
500
1500
800
1000
14
13
12
17
23
19
18
700
11
21
16
22
15
20
23
24
1000
X
1500
2000
500
1500
14
800
13
0
12
700
11
21
15
1000
X
17
23
16
22
19
18
20
23
700
800
24
2000
500
1500
800
0
X
Figura C.1: I primi passi della prima fase
1. associamo due variabili ui e vj , dette moltiplicatori, alla riga iesima e alla colonna j-esima della matrice della soluzione parziale
x;
2. si calcolano ui e vj ; per ogni cella di base xij deve valere la relazione
ui + vj = cij , quindi:
• si pone ui = 0;
• si determinano di conseguenza i restanti ui e vj risolvendo un
sistema lineare in m + n − 1 variabili;
93
X
X
X
X
X
X
X
X
X
X
X
X
Figura C.2: Due esempi di ciclo
3. si calcolano i nuovi costi c̄ij = ui + vj − cij ;
4. si seleziona come variabile entrante la cella non di base xij con c̄ij
massimo;
La terza fase consiste nel determinare una variabile uscente tra le celle
di base attualmente nella soluzione, e di trovare una nuova soluzione.
Quindi si torna alla seconda fase.
Prima di procedere in dettaglio con la descrizione è necessrio dare una
definizione:
Una sequenza ordinata di celle distinte è detta un ciclo se:
- Ogni coppia di celle consecutive giace nella stessa riga o nella
stessa colonna.
- Non ci sono tre celle consecutive nella stessa riga o colonna.
- L’ultima cella della sequanza ha una riga o una colonna in comune
con la prima cella della sequenza (figura C.2).
94
L’algoritmo del trasporto
14
500
13
12
11
21
16
22
15
500
17
23
1000
19
500
18
20
300
14
500
13
24
700
12
11
21
16
22
15
500
17
23
1000
19
500
18
20
X
300
entrante
uscente
14
-300
13
23
1000
24
700
12
11
21
16
22
15
20
23
24
+300
500
500
17
23
-300
+300
1000
19
500
18
+300
-300
X
300
14
200
13
1000
700
12
11
21
16
22
15
800
17
23
700
19
300
23
1000
800
18
20
23
1000
24
700
Figura C.3: Uno scambio variabile uscente-entrante
1. si costruisce un ciclo costituito dalla variabile entrante scelta nella
seconda fase e da sole celle di base (Nota: si può dimostrare che
per ogni cella non di base -come la variabile d’entrata- si può
costruire uno e un solo ciclo);
2. si sceglie la variabile uscente come la cella di base appartenete al
95
ciclo con valore minimo;
3. si pone la variabile uscente a zero e si pone la variabile entrante
uguale al valore della variabile uscente
4. si marca la variabile uscente come cella non di base;
5. si marca la variabile entrante come cella di base;
6. si aggiustano la altre celle del loop aumentando o diminuendo il
flusso in modo da mantenere il bilanciamento;
7. si torna alla seconda fase (figura C.3);
Per un’approfondimento sull’algoritmo si vedano [27], [20].
Appendice D
Utilizzo di istruzioni SIMD
La metrica Vector Angle e stata usata intensivamente assieme allo spazio
RGB, viste le sue proprieta e i buoni risultati conseguiti.
Uno degli svantaggi derivanti dall’uso di questa metrica sono le sue performance, indubbiamente inferiori rispetto a quelle della più semplice distanza
euclidea.
Il metodo, infatti, richiede una buona mole di calcoli, tra cui tre operazioni
di estrazione di radice quadrata. Visto che alcune delle operazioni (somma,
elevamento al quadrato...) vanno effettuate su tutte e tre le componenti dei
due colori di cui si sta misuerando la distanza, si è pensato di aumentare le
performance usando istruzioni SIMD (Single Instruction Multiple Data).
Questo tipo di istruzioni, quando sono supportate dal processore, consentono
di effettuare la stessa operazione su un blocco di dati al costo di una singola
istruzione, aumentando notevolmente il parallelismo.
Sulle architetture Intel a 32 bit (IA-32) sono presenti, a partire dal processore
Pentium III, delle istruzioni SIMD dette SSE (Streaming Simd Extension)
[17]. Queste istruzioni permettono di effettuare alcune operazioni algebriche
(somma, sottrazione, moltiplicazione, divisione, estrazione di radice e altre)
su blocchi di 4 float (numeri a virgola mobile da 32 bit) [16].
Grazie all’uso di queste istruzioni assembler è stato possibile aumentare le
performance della metrica Vector Angle del 50% circa.
Codice C:
inline static dist_t distance(const color_t& a, const color_t& b)
97
{
double v1 = sqrt(sqr(a.C1()) + sqr(a.C2()) + sqr(a.C3()));
double v2 = sqrt(sqr(b.C1()) + sqr(b.C2()) + sqr(b.C3()));
double v3 = (a.C1() * b.C1() + a.C2() * b.C2() + a.C3() * b.C3());
.
.
.
}
Codice assembler SSE:
inline static dist_t distance(const color_t& a, const color_t& b)
{
//variabili
__declspec(align(16)) float acf1[4];
__declspec(align(16)) float acf2[4];
acf1[0]
acf1[1]
acf1[2]
acf1[3]
=
=
=
=
(float)a.C1();
(float)a.C2();
(float)a.C3();
(float)0.0f;
acf2[0] = (float)b.C1();
acf2[1] = (float)b.C2();
acf2[2] = (float)b.C3();
acf2[3] = (float)0.0f;
__asm
{
movaps xmm0, acf1;
movaps xmm1, acf2;
movaps xmm2, xmm0; xmm2 e xmm0 contengono a
mulps xmm2, xmm0; xmm2 = a * a
movaps xmm3, xmm1; xmm3 e xmm1 contengono b
mulps xmm3, xmm1; xmm3 = b * b
98
Utilizzo di istruzioni SIMD
mulps xmm0, xmm1; xmm0 = a * b
movaps xmm4, xmm2;
shufps xmm4, xmm3, 0x44;
movaps xmm1, xmm2;
shufps xmm1, xmm3, 0x11;
movaps xmm5, xmm2;
shufps xmm5, xmm3, 0xEE;
addps xmm1, xmm4;
addps xmm1, xmm5;
rsqrtps xmm6, xmm1;
rcpps xmm1, xmm6; xmm1[0] = v1, xmm1[2] = v2
movaps acf2, xmm1;
movaps acf1, xmm0;
}
float v3 = acf1[0] + acf1[1] + acf1[2];
float v1 = acf2[0];
float v2 = acf2[2];
.
.
.
}
Bibliografia
[1] L. Balmelli and A. Mojsilović. Wavelet Domain Features fo Texture
Description, Classification and Replicability Analysis.
In IEEE
International Conference on Image Processing (ICIP), volume 4, pages
440–444, 1999.
[2] B.A.Wandell. Foundations of Vision. Sinauer Assocites Inc., 1995.
[3] S. Boker. The representation of color metrics and mappings in perceptual
color space. Paper, Department of Psychology, The University of
Virginia, Charlottesville, Virginia 22903, 1994.
[4] T. Carron and P. Lambert. Color Edge Detector Using Jointly Hue,
Saturation, and Intensity. In International Conference on Image
Processing, volume 3, pages 977–98, 1994.
[5] J. Chen, T. Pappas, A. Mojsilovic, and B. Rogowitz. Adaptive image
segmentation based on color and texture. In International Conference
Image Processing, Rochester, New York, 2002.
[6] H. Cheng, X. Jiang, Y. Sun, and J. Wang. Color Image Segmentation:
Advances and Prospects. Pattern Recognition, 34(12):2259–2281, 2001.
[7] A. Cumani. Edge detection in multispectral images. Computer
Vision, Graphics and Image Processing: Graphical Models and Image
Processing, 53(1):40–51, January 1991.
[8] S. di Zenzo. A Note on the Gradient of a Multi-Image. Computer Vision,
Graphics and Image Processing, 33(1):116–125, January 1986.
[9] S. P. et al. A Review on Image Segmentation Techniques. Pattern
Recognition, 29:1277–1294, 1993.
100
BIBLIOGRAFIA
[10] J. Fan, D. Yau, A. Elmagarmid, and W. Aref. Automatic Image
Segmentation by Integrating Color-Edge Extraction and Seeded Region
Growing. IEEE Trans. On Image Processing, 10(10):1454–1456, 2001.
[11] Foley, V. Dam, Feiner, and Hughes. Computer Graphics, Principles And
Practice, 2nd Edition. Addison Wesley, 1992.
[12] K. Fu and J. Mui. A survey on image segmentation. Pattern Recognition,
13:3–16, 1981.
[13] R. Gonzales and R. E. Woods. Digital Image Processing. AddisonWesley, 1992.
[14] A. Graps. An introduction to Wavelet. IEEE Computational Science
and Engineering, 2(2), 1995.
[15] S. Hojjatoleslami and J. Kittler. Region Growing: A New Approach.
IEEE Trans. on Image Processing, 7(7):1079–1088, July 1998.
[16] Intel Corporation, Mt. Prospect, Illinois.
Optimization: Reference manual, 1999.
Intel Architecture
[17] Intel Corporation, Mt. Prospect, Illinois. IA-32 Intel Architecture
Software Developer’s Manual Volume 2: Instruction set reference, 2002.
[18] U. Kthe. Primary Image Segmentation. In DAGM-Symposium, pages
554–561, Berlin, Deutschland, 1995.
[19] A. Lou.
Texture Images Classification Using Tree-structured
Wavelet Decomposition. Project technical report, Computer Science
Department, University of California, Santa Cruz, California, 1999.
[20] K. Murty. The Balanced Transportation Problem. Lecture slides,
College of Engineering, University of Michigan, Ann Arbor, Michigan,
1999.
[21] C. Pescio. Programmazione ad Oggetti e Programmazione Generica.
IEEE Computational Science and Engineering, VII(62), October 1997.
[22] W. H. Press, B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling.
Numerical Recipes in C++. Cambridge University Press, Cambridge
(UK) and New York, 2nd edition, 2002.
BIBLIOGRAFIA
101
[23] Y. Rubner, C. Tomasi, and L. Guibas. The Earth Mover’s Distance
as a Metric for Image Retrieval. Technical Report STAN-CS-TN-98-86,
Computer Science Department, Stanford University, September 1998.
[24] J. Sklansky. Image Segmentation and Feature Extraction. IEEE
Transactions on Systems, Man, and Cybernetics, (8):237–247, 1978.
[25] S.Livens and P. et al. Wavelet-based Texture Analysis. International
Journal Computer Science and Information management, December
1997.
[26] N. Suematsu and Y. I. et al. Region-Based Image Retrieval using
Wavelet Transform. In 15th International Conference on Vision
Interface, volume 1, Calgary, Canada, 2002.
[27] C. Sung. The Transportation Simplex Method. Lecture slides,
University of Illinois at Springfield, Springfield, Illinois, 2000.
[28] A. Tanenbaum. Computer Networks, 3rd Edition.
International, 1997.
Prentice Hall
[29] A. Wah.
A General Multiscale Scheme for Unsupervised Image
Segmantation. University of Cambridge, 2000.
[30] S. Wesolkowski. Color Image Edge Detection and Segmentation: A
Comparison of the Vector Angle and the Euclidean Distance Color
Similarity Measures.
Systems Design Engineering, University of
Waterloo, Canada, 1999.
[31] S. Wesolkowski and E.Jernigan. Color Edge Detection in RGB Using
Jointly Euclidean Distance And Vector Angle. In Vision Interface ’99,
Trois-Rivières, Canada, 1999.
[32] S. Wesolkowski and P. Feiguth. Color Image Segmentation Using a New
Region Growing Method. In 9th Congress of the Int. Colour Association,
Rochester, NY, USA, 2001.
[33] Y. Deng and B. S. Manjunath and H. Shin. Unsupervised Segmentation
of Color-Texture Regions in Images and Video. IEEE Trans. on PAMI,
2001.
102
BIBLIOGRAFIA
[34] X. Zhang and B. Wandell. A Spatial Extension of CIELAB for Digital
Color Image Reproduction. Journal of the Society for Information
Display, 5(1):61–63, 1997.
Scarica

UNIVERSIT`A DEGLI STUDI DI TRENTO Algoritmi parametrici