Sei sulla pagina 1di 86

Appunti di Modelli e Metodi per la Visione

Artificiale

12 giugno 2011

Indice
1 Introduzione
1.1 Concetti Iniziali . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 I Livelli di Visione . . . . . . . . . . . . . . . . . . . . . . . . . .

3
3
4

2 Acquisizione
2.1 Introduzione . . . . . . . . . . . . .
2.2 Aliasing . . . . . . . . . . . . . . .
2.3 Risoluzione . . . . . . . . . . . . .
2.4 Modello di Colore e Profondit . .
2.4.1 Immagini Monocromatiche
2.5 Telecamere . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

6
6
7
7
8
9
9

3 Elaborazioni di Basso Livello


3.1 Introduzione . . . . . . . . . . . . . . .
3.2 Operatori Puntuali . . . . . . . . . . .
3.2.1 Look Up Table (LUT) . . . . .
3.2.2 Istogramma dei livelli di grigio
3.2.3 Contrast Stretching . . . . . .
3.2.4 Equalizzazione dellIstogramma
3.2.5 Modificare la luminosit . . . .
3.2.6 Thresholding . . . . . . . . . .
3.3 Operatori Locali . . . . . . . . . . . .
3.3.1 Operatori Morfologici . . . . .
3.4 Filtraggio . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

11
11
12
12
12
13
14
15
15
16
16
25

4 Elaborazioni di Medio Livello


4.1 Sogliatura . . . . . . . . . . . . . . . . .
4.1.1 Sogliatura con soglia globale . .
4.1.2 Evidenziare listogramma . . . .
4.1.3 Tecniche alternative di sogliatura
4.2 Segmentazione . . . . . . . . . . . . . .
4.2.1 Definizione Formale . . . . . . .
4.2.2 Algoritmi di segmentazione . . .
4.2.3 Tecniche basate su discontinuit
4.2.4 Tecniche basate sul gradiente . .
4.2.5 Tecniche basate sul Laplaciano .
4.3 Tecniche di Regionalizzazione . . . . . .
4.3.1 Labeling di componenti connesse

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

37
37
37
41
41
42
42
43
43
46
54
55
55

.
.
.
.
.
.

INDICE

4.4
4.5
4.6

2
4.3.2 Region Growing . . . . . . . . . . . . . . . .
4.3.3 Region Splitting and Merging . . . . . . . . .
4.3.4 K-Means . . . . . . . . . . . . . . . . . . . .
4.3.5 Segmentazione Wathershed . . . . . . . . . .
Individuazione dei punti di interesse: Feature Points
4.4.1 Harris Corner Detector . . . . . . . . . . . .
Scale Invariant Feature Transform (SIFT) . . . . . .
4.5.1 Il Metodo di Lowe . . . . . . . . . . . . . . .
Speeded Up Robust Feature (SURF) . . . . . . . . .
4.6.1 Individuazione dei punti di interesse . . . . .
4.6.2 Descrizione e matching dei punti di interesse

5 OpenCV
5.1 Introduzione . . . . . . . . .
5.2 Organizzazione della libreria
5.3 Convenzioni . . . . . . . . .
5.4 Strutture Dati . . . . . . .
5.4.1 CvArr . . . . . . . .
5.4.2 IplImage . . . . . . .
5.4.3 CvScalar . . . . . .
5.5 Spazi di colore . . . . . . .
5.6 Accesso ai pixel . . . . . . .
5.6.1 Metodo indiretto . .
5.6.2 Metodo diretto . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

58
58
59
60
61
63
67
68
69
70
75

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

79
79
79
80
80
80
81
83
83
84
84
84

Capitolo 1

Introduzione
1.1

Concetti Iniziali

Per visione artificiale si intende linsieme dei processi che mirano a costruire una descrizione del mondo a partire da immagini, cercando di emulare gli
effetti della visione umana attraverso, lacquisizione, lelaborazione e la successiva comprensione delle immagini. La visione artificiale un campo altamente
multidisciplinare che comprende competenze di:
image processing
pattern recognition
intelligenza artificiale
neurofisiologia
psicologia
fisica
etc . . .
Un sistema di visione artificiale ostituito dallintegrazione di componenti
ottiche, elettroniche e meccaniche che permettono di acquisire, registrare ed
elaborare immagini sia nello spettro della luce visibile che al di fuori di essa
(infrarosso, ultravioletto, raggi X, ecc. . . ). Il risultato dellelaborazione il
riconoscimento di determinate caratteristiche dellimmagine per varie finalit di
controllo, classificazione, selezione, ecc. . .
Lobiettivo di produrre sistemi artificiali che manifestano un comportamento visivo con prestazioni paragonabili quelle di un sistema biologico.
Un problema classico nella visione artificiale quello di determinare se limmagine contiene o no determinati oggetti o attivit. Il problema pu essere
risolto efficacemente e senza difficolt per oggetti specifici in situazioni specifiche per esempio il riconoscimento di specifici oggetti geometrici come poliedri,
riconoscimento di volti o caratteri scritti a mano. Le cose si complicano nel caso
di oggetti arbitrari in situazioni arbitrarie. Nella letteratura troviamo differenti
variet del problema:
3

CAPITOLO 1. INTRODUZIONE

Recognition uno o pi oggetti prespecificati o memorizzati possono essere ricondotti a classi generiche usualmente insieme alla loro posizione 2D o 3D
nella scena.
Identification viene individuata unistanza specifica di una classe. (Es. Identificazione di un volto, impronta digitale o veicolo specifico.)
Detection Limmagine scandita fino allindividuazione di una condizione specifica. (Es. Individuazione di possibili cellule anormali o tessuti nelle
immagini mediche)
Le applicazioni possono toccare svariati campi come:
Industriale (ricerca di difetti, classificazione e scelta, guida di robot, etc. . . ).
Controllo veicoli autonomi.
Video sorveglianza.
Modellazione di oggetti o ambienti.
Medicina.

1.2

I Livelli di Visione

Consideriamo il sistema di visione umano, esso formato da tre livelli di visione:


Visione Retinica consiste in tutta una serie di pre-elaborazioni effettuate
direttamente dallocchio, come la messa a fuoco.
Visione Corticale a questo livello avviene una sorta di estrazione delle informazioni visuali ottenute dellocchio.
Visione Intelligente lultimo di livello si occupa di effettuare delle analisi sulle informazioni, come il riconoscimento, apprendimento, ragionamento,
associazione con modelli precedentemente acquisiti, etc. . .
Allo stesso modo potremmo pensare di strutturare un sistema di visione artificiale in maniera analoga:
Acquisizione come ottenere limmagine, questo problema relativo solo alla
visione artificiale, in quanto esiste tutta una serie di problematiche relative
a come acquisire in maniera ottimale limmagine.
Basso livello si occupa dellimage processing, cio linsieme delle operazioni
svolte sulle immagini a fine di migliorare la qualit e di selezionare le
informazioni utili che verranno elaborate al livello successivo.

CAPITOLO 1. INTRODUZIONE

Medio livello si occupa dellimage analysys, cio linsieme dei processi di estrazione delle informazioni simboliche dalle immagini preelaborate e le tecniche di analisi delle caratteristiche visuali degli oggetti presenti nelle
stesse
Alto livello lo scopo di questo livello quello di arrivare ad una forma di
comprensione della scena osservata, come il riconoscimento di oggetti o le
loro relazioni spaziali. Spesso, a questo scopo, vengono utilizzate tecniche
di intelligenza artificiale.

Capitolo 2

Acquisizione
2.1

Introduzione

Lo scopo dellacquisizione quello di ottenere limmagine che, a seconda del


tipo di strumento usato, pu essere analogica oppure direttamente digitale. In
generale, un immagine, un segnale bidimensionale analogico che deve essere
opportunamente elaborato per ottenere la rappresentazione digitale, cio come
matrice limitata MxN. Ogni elemento nella matrice rappresenta una quantit
campionata e quantizzata del valore misurato dal sensore e viene detto pixel
(picture element).
La conversione dal segnale analogico a quello digitale avviene secondi tre
passi:
1. Campionamento Spaziale: questo ha lo scopo di trasformare delle funzioni
continue in un insieme di valori detti campioni dellimmagine, se il processo
viene effettuato rispettando il vincoli imposti dal Teorema di Shannon non
si verificano fenomeni che possono provocare la perdita delle informazioni.

2. Quantizzazione: ogni campione ottenuto dallimmagine ha una profondit di colore che continua. Tramite la quantizzazione rappresentiamo i
6

CAPITOLO 2. ACQUISIZIONE

singoli campioni con un numero finito di livelli Q. Dobbiamo ricordare che


questa operazione comporta un errore che proporzionale a Q.
3. Codifica: dopo aver effettuato la quantizzazione, per poter memorizzare
limmagine su un calcolatore necessario codificare i livelli Q assegnati ai
vari campioni dellimmagine.

2.2

Aliasing

Laliasing un problema derivante sia da operazioni di sottocampionamento


(quando la frequenza di campionamento inferiore a quella consigliata dalla
Shannon), sia da operazioni di ricampionamento (quando si campiona un segnale
gi campionato). Per ridurre gli effetti dellaliasing si pu ricorrere ad un filtro
passa-basso, cio ridiciamo, prima di campionare, la massima frequenza presente
nellimmagine. Questa operazione risulta necessaria quando la frequenza di
campionamento necessaria troppo elevata, e quindi per evitare laliasing si
riduce la frequenza massima dellimmagine. Per evitare di dover usare un filtro
passa-basso digitale si pu agire anche direttamente sul sistema di acquisizione.

2.3

Risoluzione

Quando parliamo di risoluzione spaziale dellimmagine intendiamo il numero di


campionamenti del piano immagine, e solitamente viene espressa in termini di
dimensione della matrice MxN ottenuta dopo il campionamento. La risoluzione
pu essere espressa anche in termini di densit di pixel che formano limmagine

CAPITOLO 2. ACQUISIZIONE

(dpi). Pi in generale essa dipende direttamente dallapplicazione e dal sistema


di acquisizione, ad esempio:
Riconoscimento caratteri : 64x64
Immagini biomediche: da 512x512
Immagini satellitari : da 4096x4096
Ovviamente una stessa immagine pu essere rappresentata con un numero differente di pixel, ma bene ricordare che se il questo numero troppo
basso la risoluzione spaziale pu risultare scadente e presentare delle discontinuit nellimmagine. Con laumentare della densit di pixel limmagine presenta
sempre meno discontinuit fino a dare limpressione di essere continua (quando
la dimensione dei pixel diventa pi piccola della risoluzione spaziale del sistema visivo umano). In generale non possibile definire a priori il numero di
pixel necessari a garantire una buona qualit dellimmagine, ma sicuramente
la dimensione dei pixel deve essere piccola in relazione alla scala degli oggetti
rappresentati nellimmagine. Il fatto che la qualit sia buona o meno dipende
fortemente dallapplicazione.

2.4

Modello di Colore e Profondit

Un modello di colore un modello matematico astratto che permette di rappresentare i colori in forma numerica, tipicamente utilizzando tre o quattro valori
o componenti cromatiche. Un modello di colore si serve cio di unapplicazione che associa ad un vettore numerico un elemento in uno spazio dei colori. I
modelli di colore pi diffusi sono:
RGB (Red, Green, Blue): modello di colori di tipo additivo, unendo i
tre colori con la loro intensit massima si ottiene il bianco.
CMYK (Cyan, Magenta, Yellow, Key black): modello di colori di tipo
sottrattivo, i colori ottenibili con la quadricromia sono un sottoinsieme
della gamma visibile, quindi non tutti i colori che vediamo possono essere
realizzati con la quadricromia, cos come non tutti i colori realizzati con
linsieme RGB hanno un corrispondente nellinsieme CMYK. Il 100% di
tutte e tre le componenti (CMYK 100,100,100,0) non genera solitamente
il nero, bens il bistro, colore simile a una tonalit di marrone molto scura.
La profondit di colore (color depth) la quantit di bit necessari per rappresentare il colore di un singolo pixel in unimmagine bitmap, questa si misura
in bit per pixel (bpp) ed il valore memorizzato per ciascun bit generalmente
un indice in una mappa di colori o tavolozza:
1 bpp (21 = 2 colori)
2 bpp (22 = 4 colori)
8 bpp (28 = 256 colori)

CAPITOLO 2. ACQUISIZIONE

Con laumentare del numero di bit per pixel aumenta anche la quantit di colori
possibili, rendendo sempre pi scomodo luso delle tavolozze. Per le profondit
pi alte si preferisce perci codificare i colori direttamente nei valori corrispondenti alla luminosit relativa dei canali rosso, verde e blu secondo il modello
RGB (oppure seguendo altri modelli di colore).

2.4.1

Immagini Monocromatiche

Il valore dei pixel rappresentato con valori interi (k bit) che indicano il livello
della quantit misurata, adeguatamente campionata e quantizzata. Solitamente
si indica con risoluzione a livelli di grigio il numero di livelli distinguibili anche
se la quantit misurata non luminosa.

2.5

Telecamere

Le immagini posso derivare dalla digitalizzazione di segnali provenienti da diversi sensori. Uno dei sensori pi diffusi sono le telecamere che possono essere
classificate in due categorie principali:
Analogiche generano un segnale analogico che fornisce informazioni sullimmagine riga per riga. I segnali devono essere successivamente campionati
e quantizzati.
Digitali generano un segnale digitale.

Tra le telecamere digitali sono largamente diffuse quelle basate su sensori


allo stato solido CCD (Charge-Coupled Device) che forniscono una immagine
gi campionata spazialmente (e temporalmente) a causa del numero finito di
fotorecettori. Unalternativa nascente sono invece le telecamere basate su sensori CMOS (Complementary Metal-Oxide Semiconductor) che permettono di
superare alcuni problemi legati ai sensori CCD come linterlacciamento ed il
consumo, ma la qualit non ancora comparabile ai primi. Generalmente il segnale video delle telecamere CCD interlacciato, cio vengono trasmesse prima

CAPITOLO 2. ACQUISIZIONE

10

le linee dispari e poi quelle pari, questo permette di ridurre il fenomeno del flickering (disturbo elettrico percepito come uno sfarfallio). Mentre il numero N di
righe fissato dallo standard il numero di righe M dipende dal campionamento
del frame grabber (strumento che trasforma il segnale video analogico prodotto
da una telecamera in un segnale digitale). Esistono tre tipi di standard:
NTSC (National Television Standard Committee)
SECAM (Squentiel Couleur Mmoire - colore sequenziale con memoria)
PAL (Phase Alternating Line).

Immagini al secondo
ms per immagine
linee per immagine
aspect ratio h:v

NTSC

SECAM

PAL

30
33.37
525
4:3

(29.97)
40
625
4:3

25
40
625
4:3

CCD

CMOS

alta qualit
basso rumore
molto sensibili
alto consumo
tecnologia matura
elevato numero di pixel

minore qualit
alto rumore
ridotta sensibilit
basso consumo
tecnologia innovativa
numero di pixel ridotto

Un altro aspetto fondamentale da considerare durante la fase di acquisizione


il rumore, questo pu essere determinato da vari fattori:
Sensori: tipicamente modellato come rumore bianco o gaussiano.
Trasmissione.
Quantizzazione.
Impulsivo (sale e pepe).

Capitolo 3

Elaborazioni di Basso Livello


3.1

Introduzione

Lelaborazione di basso livello ha lo scopo di migliorare la qualit dellimmagine


ottenuta dalla fase acquisizione (es. eliminazione del rumore, compressione,
etc. . . ) e di effettuare una serie di operazione al fine di facilitare lelaborazione
di medio livello.

..
..
..
..
..
..
..
.
.
.
.
.
.
.

. . . 172 172 173 169 170 168 . . .

. . . 172 172 173 169 170 168 . . .

. . . 165 165 170 170 169 168 . . .

. . . 159 160 150 150 170 159 . . .

. . . 160 160 150 150 170 158 . . .

. . . 160 158 150 150 170 159 . . .

..
..
..
..
..
..
..
.

.
.
.
.
.
.
A questo livello limmagine rappresentata come una matrice di pixel su cui
possibile applicare degli operatori, che posso essere di tre tipi:
Operatori Puntuali ogni pixel dellimmagine duscita funzione solo del corrispondente pixel nellimmagine di ingresso. Questi operatori non alterano le relazioni spaziali tra i punti dellimmagine. (Variazioni dei livelli di
grigio, look up table, operazioni di soglia).
Operatori Locali ogni pixel dellimmagine duscita funzione del corrispondente pixel nellimmagine di ingresso e di un suo intorno locale (detto
kernel). In questa classe ricadono i filtraggi e gli operatori morfologici.
Operatori Globali ogni pixel dellimmagine duscita funzione di tutti i pixel
dellimmagine di ingresso. (Trasformazioni varie).

11

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

3.2
3.2.1

12

Operatori Puntuali
Look Up Table (LUT)

Nelle LUT ogni colore o livello di grigio memorizzato in una tabella insieme con
il colore o il livello di grigio corrispondente. Gli operatori puntuali possono essere
realizzati mediante look-up table (LUT). Tipicamente le schede di acquisizione
mettono a disposizione delle LUT personalizzabili dallutente che consentono la
realizzazione in hardware di operatori puntuali.

3.2.2

Istogramma dei livelli di grigio

Listogramma dei livelli di grigio di unimmagine una funzione che associa


a ciascun livello il numero di pixel dellimmagine aventi quel livello di grigio. Listogramma misura quindi la frequenza di occorrenza dei livelli di grigio
dellimmagine.
int histo [256];
...
f o r ( i n t i = 0 ; i < N; i ++){
f o r ( i n t j = 0 ; j < M; j ++){
k = Image [ i ] [ j ] ;
h i s t o [ k ] = h i s t o [ k ]+1;
}
}

Il calcolo dellistogramma viene effettuato definendo un vettore di dimensione pari al numero dei livelli di grigio dellimmagine. Ciascun elemento del
vettore rappresenta il contatore dei pixel aventi livello di grigio uguale allindice
dellelemento. Quindi si scandisce limmagine e si incrementa lelemento del
vettore avente indice pari al livello di grigio del pixel corrente.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

3.2.3

13

Contrast Stretching

Questo operatore viene utilizzato per migliorare la qualit di immagini caratterizzate da debole contrasto. Loperatore migliora il contrasto dellimmagine
espandendo la dinamica dei livelli di grigio su un intervallo pi ampio.
Detti Gmin e Gmax i livelli di grigio minimo e massimo dellimmagine iniziale, viene utilizzata una funzione di mapping lineare per espandere la dinamica
nellintervallo desiderato [G0min , G0max ]:
Pout = (Pin Gmin )

G0max G0min
+ G0min
Gmax Gmin

Tipicamente la dinamica viene espansa su tutto lintervallo disponibile [0,255]:


Pout = (Pin Gmin )

255
Gmax Gmin

La funzione di mapping precedentemente definita poco robusta rispetto


alla eventuale presenza di pixel fuori range (livello di grigio molto basso o molto
alto). Difatti lintervallo [Gmin , Gmax ] risulter pi esteso di quanto effettivamente necessario, riducendo leffetto di miglioramento del contrasto. In questi
casi di preferisce determinare Gmin e Gmax selezionando degli opportuni valori percentuali sullistogramma dei livelli di grigio (ad esempio 5% e 95%).
Se loperazione deve essere effettuata in tempo reale mediante look-up table su
una sequenza di immagini, Gmin e Gmax non possono essere ricalcolati per ogni
immagine. Di conseguenza, una volta determinati Gmin e Gmax a partire da un
insieme rappresentativo di immagini, i valori dellimmagine corrente fuori dal
range vengono trasformati negli estremi dellintervallo:

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

Pout

3.2.4

Gmin
= (Pin Gmin )

0
Gmax

14

se Pin < Gmin


G0max G0min
Gmax Gmin

G0min

se Gmin < Pin < Gmax


se Pin > Gmax

Equalizzazione dellIstogramma

Lobiettivo delloperazione di equalizzazione dellistogramma quello di ottenere unimmagine risultato avente un istogramma uniforme (piatto). Questa
caratteristica generalmente implica unespansione della dinamica dei livelli di
grigio e quindi un incremento del contrasto, in pratica aumenta i contrasti vicino ai massimo e li diminuisce vicino ai minimi. La procedura di equalizzazione
considera listogramma come un distribuzione di probabilit dei livelli di grigio
ed esegue i seguenti passi:
1. Calcolo dellistogramma cumulativo
2. Si dividono i valori ottenuti al passo 1 con il numero di pixel
3. Si moltiplicano i valori ottenuti al passo 2 per il massimo livello di grigio
4. Si mappano i livelli di grigio originali sui valori ottenuti al passo 3 con una
corrispondenza 1 a 1.
In realt una distribuzione perfettamente uniforme dei livelli di grigio non pu
essere ottenuta a causa della natura discreta delle grandezze trattate. Bisogna
fare attenzione perch quando il contrasto originale dellimmagine molto basso
pu provocare effetti di sgranatura o comparsa di false regioni.
In generale lapparenza dellimmagine pu essere migliorata anche con altre
tecniche di modifica del contrasto, ma lequalizzazione ha il vantaggio di essere
del tutto automatica.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

3.2.5

15

Modificare la luminosit

Variare la luminosit significa spostare listogramma verso il massimo o verso


il minimo, questo pu provocare effetti di saturazione verso gli estremi. Possiamo notare la variazione: la prima immagine sulla sinistra quella originale,
mentre laltra leffetto di un aumento del 10%.

3.2.6

Thresholding

Loperazione di soglia serve a binarizzare unimmagine, cio a passare da una


rappresentazioni in livelli di grigio ad una rappresentazione in bianco e nero. In
particolare loperazione consiste nello scegliere un livello di soglia e tutti i pixel
che si trovano al di sotto della soglia vengono impostati a 0, mentre tutti quelli
maggiori o uguali ad 1 (o meglio al livello massimo che pu essere anche 255).

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

(
Ibinaria (x) =

16

0 se Ioriginale (x) < soglia


1 se Ioriginale (x) > soglia

Il parametro chiave in una sogliatura la scelta del valore di soglia. Esistono


diverse metodologie per la scelta automatica di questo valore, oppure possibile sceglierlo a mano. Un semplice metodo potrebbe essere quello di scegliere il
valore medio o la mediana come valore di soglia. Questa logica pu funzionare
bene in unimmagine senza alcun tipo di rumore, altrimenti si debbono utilizzare tecniche pi sofisticate, come ad esempio quello di creare un istogramma e
osservare dove vi il punto pi basso in mezzo allistogramma; quindi si sceglie
quel valore come soglia. Ma questo potrebbe non funzionare in immagini pi
rumorose, dove forse vale la pena di utilizzare un K-means binario (algoritmo di
clustering). Anche le immagini a colori possono venire sogliate, e si parla in questo caso di sogliatura multibanda. Un semplice approccio potrebbe essere quello
di scomporre limmagine nei suoi tre canali RGB e sogliarli tutti indipendentemente. Le tre immagini binarie sono poi processate attraverso unoperazione
logica di and.

3.3
3.3.1

Operatori Locali
Operatori Morfologici

La morfologia studia la forma delle piante e degli animali. Nellimage processing


per processing morfologico si intende lo studio della forma e della struttura degli
oggetti dalle loro immagini. Gli operatori morfologici si basano su due operazioni
di base dette erosione e dilatazione di seguito definite:
Erosione Lerosione di A con lelemento strutturante (kernel) B dato in
formule da:


A B = z|Bz A

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

17

In parole, si ha che nel traslare lelemento strutturante B su A se B tutto


compreso in A ossia se lAND logico fra B ed A pari ad 1 allora il pixel
risultante a cui associata loperazione sar nellerosione A B. Nella
pratica, supponendo che lelemento strutturante sia una matrice 3x3, in
cui il foreground dato dai pixel con valore 1, mentre quelli con valore 0
sono il background. Indichiamo con origine dellelemento strutturante il
centro dellelemento.

1 1 1
1 1 1
1 1 1
Coordinate dei punti:
(1, 1), (0, 1), (1, 1)
(1, 0), (0, 0), (1, 0)
(1, 1), (0, 1), (1, 1)
Come prima cosa sovrapponiamo lorigine dellelemento strutturante con
il pixel di interesse nellimmagine di input, se tutti i pixel del foreground
si sovrappongono a pixel presente nellintorno del pixel analizzato allora
lasciamo questultimo invariato, altrimenti se troviamo almeno un pixel
nellintorno che non sovrapposto con il foreground allora il valore del
pixel di interesse viene impostato uguale a quello del background (nel
nostro caso a 0).

Lerosione pu essere effettuata anche su immagini a livelli di grigio, in questo caso la funzione si erosione si complica in quanto dobbiamo considerare
diversi livelli:


(f b)(s, t) = min f (s + x, t + y) b(x, y)|(s + x), (t y) Df ; x, y Db
Dove Df e Db sono rispettivamente il dominio di f ed il dominio di b,
bisogna ricordare che lelemento strutturante deve essere completamente
contenuto nellinsieme da erodere. Possiamo estendere la definizione ad
una funzione di una variabile ottenendo:


(f b)(s) = min f (s + x) b(x)|(s + x) Df ; x Db

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

18

In parole, lerosione di una immagine in livelli di grigio non molto differente da quella di una immagine binaria, lunica differenza che viene
espressa in termini di funzione di due variabili. Lelemento strutturante
rimane una matrice in cui sono contenuti, non pi solo valori binari, ma
possono essere valori presenti nel range di valori dellimmagine di partenza.
Sovrapponendo il centro dellelemento strutturante sul pixel di interesse
otterremo un insieme di valori per la funzione (f b) dai pixel che si trovano
nellintorno del pixel di interesse, di questi valori ottenuti prendiamo il
minimo e lo impostiamo come valore del pixel di input.

Dilatazione La dilatazione di A con lelemento strutturante B dato in formule


da:


A B = z|Bz A 6= 0
In parole, si ha che passando il kernel B su A se essi si toccano anche di
un solo elemento non nullo allora il risultato sar pari ad 1.

1 1 1
1 1 1
1 1 1
Consideriamo sempre il kernel precedente, possiamo notare gli effetti della
dilatazione si un immagine binaria:

Analogamente al caso della erosione, possiamo applicare la dilatazione ad


una immagine a livelli di grigio tramite la seguente funzione:


(f b)(s, t) = max f (s x, t y) b(x, y)|(s x), (t y) Df ; x, y Db
Che nel caso di una funzione ad una sola variabile si traduce in:


(f b)(s) = max f (s x) b(x)|(s x) Df ; x Db
Anche in questo caso la funzione (f b) viene calcolata per ogni pixel
sottoposto al kernel, ma, a differenza dellerosione, viene associato al pixel
di interesse il valore massimo tra quelli ottenuti. Se tutti i valori dellelemento strutturante sono positivi limmagine risultante sar pi luminosa
di quella di partenza.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

19

Apertura questa operazione una cascata di erosione e poi dilatazione. Quindi


in formule si ha:
A B (A B) B
Il senso che prima erodo per eliminare gli oggetti grandi come lelemento
B e poi dilato per ripristinare la forma degli oggetti restanti. possibile notare come si siano separati due oggetti che si erano erroneamente
attaccati senza alterare la forma degli oggetti stessi.

Lerosione, solitamente, permette di eliminare il rumore (salt noise) di


background che pu presentarsi, ma ha il grosso svantaggio di agire su
qualsiasi regione di pixel indiscriminatamente, quindi elimina informazioni
sullimmagine. Con lapertura possiamo, sommando gli effetti dei due
operatorio precedenti, in modo da ottenere un effetto meno distruttivo
(come possiamo notare dallesempio sopra).
Un altro esempio di uso delloperatore di apertura il seguente, nel quale
vogliamo estrarre solo i cerchi ed eliminare gli altri elementi considerandoli
come un disturbo:

Questa operazione pu essere effettuata con lapplicazione di un elemento


strutturante che ripropone la figura che si vuole individuare: Solitamente
non di applica una sola volta, ma pu essere applicato in maniera iterativa pi volte fino ad ottenere leffetto desiderato (Nellesempio abbiamo
applicato 5 volte il kernel).

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

20

Chiusura una cascata di dilatazione e poi erosione. Quindi in formule si ha:


A B (A B) B
Il senso che prima dilato per riempire eventuali gap con lelemento B e
poi erodo per ripristinare la forma degli oggetti restanti.

Un esempio di utilizzo delloperatore di chiusura (con kernel 3x3 pieno)


pu essere, ad esempio, quello di isolare soltanto i cerchi grandi eliminando
quelli piccoli e il cerchio nero allinterno.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

21

Mentre loperazione di apertura efficace con il salt noise, quello di chiusura efficace per il peppe noise.
Hit and Miss Transform (pattern matching e marking) questo operatore viene utilizzato per ritrovare i pixel centrali degli oggetti che somigliano allelemento strutturante. A differenza degli operatori precedenti la somiglianza deve essere sia sugli elementi di foreground che su quelli di background,
in oltre si possono inserire anche delle zone di dont care cio in cui i
pixel possono assumere qualsiasi valore. Ad esempio se volgiamo cercare
esattamente gli angoli bassi possiamo usare questo kernel:
(A B)

1
0 1 1
0 0
In alternativa possono essere utilizzati pi kernel in OR, in modo da trovare tutti gli elementi che corrispondono ad angoli nella figura. Ad esempio
usando in OR i seguenti kernel:

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

22

Possiamo ottenere questo risultato:

Solitamente, questo tipo di operatore viene utilizzato per cercare e/o contare le occorrenze di un particolare pattern allinterno dellimmagine.
Thinning questa fa parte delle operazioni che si basano sul pattern matching,
cio sulla corrispondenza tra lelemento strutturante e lintorno del pixel
di interesse, per cui il valore di questultimo viene assunto in base allesito
del matching con il kernel scelto (per essere ritenuto positivo il matching
deve essere esatto). Possiamo dire quindi che lesito di questo genere di
operazioni strettamente legato alla scelta del kernel che si utilizza per il
matching, infatti kernel diversi possono portare a risulti differenti. Loperazione ha come effetto lo sfinamento degli oggetti, e viene definita nel
seguente modo:
A B A (A B)
Cio, fa lhit-and-miss con lelemento strutturante B, poi sottrae il risultato allimmagine originale A. La sottrazione intesa in senso logico,
cio:
X Y = XqY
In altre parole, quello che accade che quando viene sovrapposto il centro
del elemento strutturante sul pixel di interesse, se il suo intorno esattamente uguale allelemento strutturante allora il valore del pixel viene
posto uguale a quello di background (zero nel nostro caso), altrimenti viene lasciato inalterato. Loperazione solitamente ripetuta pi volte fino
a quando non avvengono pi cambiamenti allimmagine. Luso pi comune di questa operazione quello di ridurre limmagine ottenuta dalla
sogliatura, per essere analizzata tramite algoritmi di edge detection come
loperatore di Sobel, in quanto assottiglia le linee spesse pi pixel a linee
di singoli pixel.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

23

Thickening possiamo definire questa operazione come la duale del thinning,


infatti mentre nel caso precedente era una erosione basata su pattern matching, in questo caso una dilatazione basta sullo stesso principio. In
pratica se il matching risulta positivo il pixel di interesse assume il valore
del foreground (cio uno, nel nostro caso). Loperazione cos definita:
A B A (A B)
Anche in questo caso determinante la scelta dellelemento strutturante
per il risultato che si vuole ottenere.
Due applicazioni comuni di questo operatore sono:
1. Determinare linvolucro convesso (convex hull): linvolucro convesso
di una immagine si pu ottenere immaginando di stendere una banda elastica intorno ad essa. Questa banda elastica seguir i contorni
convessi della sagoma far da ponte sui contorni concavi. La sagoma risultante non avr pi concavit e conterr la sagoma iniziale.
Se sono presenti pi sagome lalgoritmo determiner linvolucro convesso di ognuna di esse. Usando i seguenti elementi strutturali con
loperatore di thickening possiamo ottenere linvolucro convesso:

1 1
1 0
1 0

1 1
0 1
0 1
Iterando 100 volte loperatore otteniamo:

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

24

2. Ricerca dello SKIZ (Skeleton by zone of influence): questa una


struttura scheletrica che divide limmagine in regioni, ognuna delle
quali contiene solo un elemento distinto presente nellimmagine. Questo ancora conosciuto come diagramma di Varonoi. Un metodo per
calcolarlo quello di determinare prima lo scheletro del background
e poi effettuare delle operazioni di pruning fino a rimuovere tutti i
rami che non creano delle forme chiuse. Tale operazione pu essere effettuata sia tramite il thinning che tramite il thickening (poich
il suo duale) la scelta delloperatore dipende dalla polarit dellimmagine, cio se nero (foreground) su bianco (background) o
viceversa.

Skeletonization/Medial Axis Trasform il processo di riduzione delle zone di foreground di una immagine binaria in un residuo scheletrico che
mantenga lestensione e la connessione delle zone originarie fino alleliminazione della maggior parte dei pixel di foreground. Per capire come funziona, immaginiamo che le regioni di foreground nellimmagine di input
siano fatte di un materiale infiammabile lentamente. Se facciamo bruciare contemporaneamente tutti i punti che si trovano sulla frontiera della
regione vedremo il fuoco muoversi sempre verso linterno. Il fuoco si estingue nei punti in cui si toccano fiamme provenienti da direzioni differenti,
unendo tutti questi punti otteniamo la linea di spegnimento (quench line),
questa linea lo scheletro. Possiamo comprendere quindi, come loperazione di thinning (e dualmente quella di thickening) producano una sorta
di scheletro. Un altro modo per immaginare lo scheletro di una regione
quello di pensarlo come il luogo dei centri delle circonferenze bi-tangenti
inscritte completamente allinterno della regione di foreground che stiamo
considerando.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

25

Mentre si parla di scheletro quando il risultato delloperazione un immagine in bianco e nero, parliamo invece di Medial Axis Trasform (MAT)
quando il risultato delloperazione unimmagine a livelli di grigio in cui
lintensit di ogni punto dello scheletro rappresenta la distanza tra questo
e la frontiera della regione originale.

3.4

Filtraggio

Un altro gruppo di operazioni locali rappresentata dai filtri, il cui scopo


quello di migliorare la qualit dellimmagine. Normalmente le operazioni di filtraggio dei segnali avvengono tramite loperazione di convoluzione, nel caso delle
immagini digitali utilizziamo la convoluzione discreta. Per cui loperazione da
effettuare si traduce in una doppia somma tra due matrici, una rappresentante
limmagine I(i, j) e laltra rappresentate la risposta impulsiva del filtro H.

I11 I12 I13 I14 I15 I16 I17 I18 I19


I21 I22 I23 I24 I25 I26 I27 I28 I29

I31 I32 I33 I34 I35 I36 I37 I38 I39

I41 I42 I43 I44 I45 I46 I47 I48 I49

I51 I52 I53 I54 I55 I56 I57 I58 I59


I61 I62 I63 I64 I56 I66 I67 I68 I69

K11
K21

K12
K22

K13
K23

O57 = I57 K11 +PI58 K12 P


+ I59 K13 + I67 K21 + I68 K22 + I69 K23
k
k
O(i, j) m=k n=k H(m, n) I(i m, j n)
Filtro di Media : un metodo molto semplice e rapido per realizzare unoperazione di smoothing dellimmagine. Lidea alla base del filtro consiste
nel sostituire ad ogni pixel il valor medio dei suoi vicini (incluso il pixel
stesso). Questa operazione corrisponde ad un filtraggio di tipo passa basso
che attenua le armoniche a frequenza pi elevata. Il filtro di media un

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

26

operatore lineare spazialmente invariante e pu essere descritto tramite


un kernel che rappresenta la risposta impulsiva del filtro. Tipicamente
si usano filtri basati su kernel 3x3 o 5x5. Filtraggi pi pesanti vengono
realizzati iterando loperatore elementare.
1
9
1
9
1
9

1
9
1
9
1
9

1
9
1
9
1
9

Dal punto di vista computazionale conviene calcolare il valor medio in ogni


punto piuttosto che eseguire la convoluzione con il kernel del filtro. Inoltre,
possibile implementare in modo ricorsivo il calcolo del valor medio al fine
di ridurre ulteriormente il carico computazionale.
Limmagine 3.1 rappresenta una versione degradata dal rumore gaussiano.
Proviamo quindi a vedere che effetto avrebbe un filtro di media: Limmagine immagine 3.2 mostra il risultato dellapplicazione di un filtro di
media con kernel 3x3: il rumore stato ridotto ma limmagine appare lievemente pi sfocata, i dettagli pi fini risultano meno evidenti. Leffetto
dello smoothing ancor pi evidente nella figura 3.4, che rappresenta il
risultato ottenuto mediante un filtro di media 5x5.
Possiamo concludere dicendo che il filtro di media, essendo di tipo passabasso, attenua le armoniche a frequenza elevata mentre lascia sostanzialmente invariate quelle a bassa frequenza. Lattenuazione delle frequenze elevate causa un effetto di smussamento dei bordi delle regioni
dellimmagine.
Filtro Mediano Lidea alla base del filtro consiste nel sostituire ad ogni pixel
il valore mediano dei suoi vicini (incluso il pixel stesso). Il valore mediano
calcolato ordinando tutti i pixel dellintorno prescelto e sostituendo al
pixel in esame il valore centrale dellinsieme ordinato (se lintorno contiene
un numero pari di pixel si prende la media dei due valori centrali).
A differenza del filtro gaussiano e di quello di media questo un filtro non
lineare, infatti:
median[A(X) + B(X)] 6= medial[A(X)] + median[A(X)]

..

.
. . .

. . .

. . .

..
.

..
..
..
.
.
.
124 126 127
120 150 125
115 119 123
..
..
..
.
.
.

.
. . .

. . .

. . .

..
.
..

Lapplicazione principale del filtro mediano leliminazione del rumore


impulsivo. Difatti il valore mediano molto pi robusto rispetto alla presenza di pixel corrotti della semplice media. Se il valore di un pixel
significativamente diverso da quello dei vicini esso viene eliminato senza influenzare i pixel vicini. In oltre, limmagine filtrata mantiene dei

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

27

Figura 3.1: Degradazione dellimmagine con rumore gaussiano

Figura 3.2: Effetto del filtro di media con kernel 3x3 sullimmagine degradata

Figura 3.3: Immagine degradata con rumore impulsivo

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

28

Figura 3.4: Applicazione di un filtro con kernel 3x3 a sinistra e 5x5 a destra

Figura 3.5: Degradazione dellimmagine sopra ed applicazione del filtro mediano, 1 passo per limmagine in basso a sinistra, 2 passi per quella in basso a
destra

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

29

contorni pi netti rispetto alluso di un filtro di media o di un filtro gaussiano di pari dimensioni. Dallimmagine 3.5 notiamo come il filtro 3x3
consenta di eliminare il rumore impulsivo senza produrre uno sfocamento
dellimmagine.
Filtro Gaussiano Un filtro che trova larghissimo impiego nello smoothing di
immagini il filtro che ha come risposta impulsiva una funzione guassiana
bidimensionale di valor medio nullo e deviazione standard .

Figura 3.6: Nella a sinistra immagine notiamo il gaussiano in 2D, mentre in


quella a destra in 3D
Nel caso monodimensionale la densit di probabilit gaussiana definita
come:
2

G(x) =

x
1 e 22
2

La figura mostra landamento della gaussiana monodimensionale con =


1, ricordiamo che poich la funzione rappresenta una densit di probabilit
larea sottesa unitaria. La gaussiana bidimensionale ottenibile come
prodotto di due gaussiane monodimensionali orientate secondo gli assi
coordinati.
G(x, y) = G(x)G(y) =

1
2 2 e

x2 +y 2
2 2

Il comportamento del filtro gaussiano determinato dal valore del parametro : quanto pi elevato tanto maggiore leffetto di smoothing.
Questa propriet pu essere compresa osservando che allaumentare di
diminuiscono i pesi dei pixel pi vicini ed aumentano quelli dei pixel pi
lontani. Il kernel del filtro gaussiano discreto viene costruito campionando la risposta impulsiva del corrispondente filtro continuo. Poich il filtro
continuo ha risposta impulsiva infinita, necessario stabilire la dimensione
del kernel tenendo presente che:
lapprossimazione discreta del filtro continuo tanto migliore quanto
pi il kernel ampio;
il costo computazionale delloperazione di filtraggio cresce significativamente allaumentare delle dimensioni del kernel;

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

30

la risposta impulsiva del filtro continuo descresce man mano che ci si


allontana dallorigine;
Inoltre, poich lestensione della gaussiana dipende da , il kernel dovr
essere dimensionato sulla base di tali parametro. Per una gaussiana stretta ( piccola) possibile usare un kernel piccolo, ma se la gaussiana si
allarga ( cresce) necessario utilizzare un kernel pi largo. utile quindi disporre di una regola che consenta di determinare la dimensione del
kernel in funzione di .
Analizzando il valore dellarea sottesa dalla gaussiana 1D nellintervallo
|x| n per n = 1, 2, 3 :
|x| 0.68
|x| 2 0.95
|x| 3 0.99
si deduce che scegliendo un kernel (2k + 1)x(2k + 1) con k = 3 si ottiene
unapprossimazione molto buona della gaussiana continua. Quindi:
= 1 7x7
= 1, 5 11x11
= 2 13x13
= 3 19x19
Tipicamente al fine di ridurre il tempo di calcolo si preferisce eseguire
la convoluzione con un kernel a coefficienti interi. Un kernel intero pu
essere ottenuto da un kernel a coefficienti reali dividendo per il coefficiente reale pi piccolo (che quindi viene reso pari ad 1), arrontondando
il risultato e dividendo poi per la somma dei coefficienti ottenuti dopo
larrotondamento:
k k1 =

1
kmin

k2 = round(k1 ) k2 =

1
sum(k)2 k2

Analogamente possiamo fare per filtro bidimensionale con = 1.

1
4

1
7
256
4
1

4
16
26
16
4

7
26
41
26
7

4
16
26
16
4

1
4

4
1

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

31

Abbiamo visto che limplementazione del filtro gaussiano pu richiedere


la convoluzione con un kernel di dimensioni notevoli (gi con = 2 il
kernel 13x13). per possibile ridurre significativamente il costo computazionale sfruttando la propriet di separabilit del filtro gaussiano che
consente di effettuare la convoluzione 2D eseguendo una convoluzione 1D
nella direzione x (o y) seguita da una convoluzione 1D nella direzione y (o
x). Con questo approccio il numero di operazioni elementari (prodotto +
somma) per pixel passa da (2k + 1)2 a 2(2k + 1).

Figura 3.7: Esempio di applicazione del filtro gaussiano, a sinistra limmagine


originale a destra quella filtrata con = 1
Lapaciano del Gaussiano In matematica, loperatore di Laplace o laplaciano un operatore differenziale del secondo ordine. Loperatore di Laplace
pu operare da due fino ad n dimensioni e pu essere applicato sia a campi
scalari, che vettoriali. In coordinate cartesiane definito come la somma
delle derivate parziali seconde non miste rispetto alle coordinate. Questo operatore viene utilizzato spesso per la edge detection, e generalmente
viene applicato dopo una operazione di gaussian smoothing in modo da
evitare che il rumore presente sullimmagine condizione lesito delloperazione (riduzione delle sensibilit al rumore). Solitamente questo operatore
prende in ingresso un immagine a livelli di grigio e restituisce, come output,
unaltra immagine a livelli di grigio in cui sono evidenziati i contorni.
Possiamo quindi definire il laplaciano L(x, y) di un immagine con valore
di insensit dei pixel I(x, y) come:
L(x, y) =

2 I
x2

2 I
y 2

solitamente viene calcolato con un filtro di convoluzione, in maniera analoga a quanto fatto con i filtri precedenti. Esistono diversi kernel utilizzati
per approssimare le derivate seconde dellimmagine, i pi utilizzati sono i
seguenti:

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

0
1
0

1
4
1

0
1
0

1
1
1

1
8
1

1
1
1

32

Dato che il calcolo delle derivata seconda avviene tramite luso di un filtro
che ne approssima il valore, questa operazione anche molto sensibile al
rumore, per cui dobbiamo prima applicare un filtro gaussiano per eliminare
le componenti in alta frequenza del rumore. Ma, dato che la convoluzione gode della associativit, possiamo prima effettuare una convoluzione
tra il filtro gaussiano e quello di Laplace, e poi convolvere il risultato con
limmagine in modo da precalcolare il filtro ed effettuare una sola convoluzione sullimmagine (ricordiamo che la convoluzione tra i due filtri molto
rapida in quanto in kernel sono sempre molti pi piccoli dellimmagine).
Dalla convoluzione dei due filtri otteniamo quello che viene detto Laplaciano del Gaussiano:
LoG(x, y) =

0
1

1
0

1
2
4
5
5
5
4
2
1

1
4
5
3
0
3
5
4
1

1
2 +y 2
2 [1 x 2
2

]e

2
2
2
1
5
5
5
4
3
0
3
5
12 24 12 3
24 40 24 0
12 24 12 3
3
0
3
5
5
5
5
4
2
2
2
1

x2 +y 2
2 2

1
2
4
5
5
5
4
2
1

0
1

1
0

Il Laplaciano del Gaussiano calcola le derivate seconde spaziali di una


immagine, questo significa che nelle aree in cui limmagine presenta una
intensit costante loutput sar zero. Mentre, in prossimit di un cambiamento di intensit la risposta sar positiva per il lato pi scuro e negativa
per quello pi chiaro. Questo significa che possiamo ragionevolmente considerare che in corrispondenza di un bordo tra due regioni omogenee la
risposta del LoG sar:

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

33

zero nei punti lontani dal bordo;


positivo da un lato del bordo;
negativo dallaltro lato del bordo.

Figura 3.8: Esempio su di risposta su un gradino.

Figura 3.9: LoG con kernel 7x7 = 1.0. Notiamo che limmagine contiene
valori negativi e non interi, ma stata normalizzata in nel range [0 255]

Figura 3.10: Effetto di LoG con kernel 7x7 con = 1.0.


Differenza del Gaussiano (DoG) La procedura prevede di convolvere limmagine (in scala di grigi) originale due volte tramite kernel gaussiano al
fine di ottenere due immagini filtrate, ma con differente deviazione standard (). Successivamente sottraiamo alla prima immagine, la seconda.
Il risultato sar molto simile allapplicazione di un filtro passa-banda che
taglia quasi tutte le frequenze tranne una piccolo insieme.

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

DoG(x, , 1 , 2 ) =

e
2

(x)2
2
21

34

e
2

(x)2
2
22

Il DoG pu essere usato per aumentare la visibilit di edge o altri dettagli


presenti allinterno dellimmagine. In oltre rimuove le alte frequenze che
spesso includono buona parte del rumore e questo lo rende ottimo per
immagini con alto grado di rumore.
Filtro Unsharp Questo semplicemente un operatore di sharpening che deriva il proprio nome dal fatto che esalta i bordi (ed ogni altro componente
ad alta frequenza presente nellimmagine). La procedura prevede la sottrazione di una versione morbida (senza bordi, o punti di alta frequenza)
dellimmagine da quella originale:
g(x, y) = f (x, y) fsmooth (x, y)

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

35

Analizzando la risposta in frequenza di questo operatore possiamo capire


meglio come si comporta.

La figura a rappresenta il segnale originale, mentre la b la sua componente a bassa frequenza. Sottraendo questultima al segnale iniziale
otteniamo il segnale c, cio la sua componente ad alta frequenza (i bordi).
Per mettere in evidenza i bordi basta sommare il segnale c con quello originale ottenendo un nuovo segnale in cui sono accentuate le componente
alle frequenze alte.

fsmooth (x, y) = f (x, y) + k g(x, y)


dove k la costante di scala, solitamente scelta tra 0.2 e 0.7, in base quanto
si voglia far risaltare il segnale ad alta frequenza.

Figura 3.11: A sinistra limmagine originale, al centro le componenti ad alta


frequenza, a destra il risultato finale delloperazione con k=0.7
Un modo comune di realizzare questo filtro quello di usare linverso del
Laplaciano:

Alcuni kernel che permetto di estrarre il segnale ad alta frequenza, da


scalare ed aggiungere a quello originale sono i seguenti:

CAPITOLO 3. ELABORAZIONI DI BASSO LIVELLO

0
1
0

1
4
1

0
1
0

1
1
1

1
8
1

1
1
1

2
4
2

1
2
1

1
2
1

36

che rappresentano delle approssimazioni discrete del filtro Laplaciano.

Figura 3.12: Partendo da sinistra, limmagine originale, quella ottenuta con


LoG 7x7, immagine ottenuta con il Laplaciano 7x7, immagine finale
Ovviamente il LoG pi robusto rispetto al rumore, essendo stato realizzato a questo scopo.

Capitolo 4

Elaborazioni di Medio Livello


4.1

Sogliatura

In numerosissime applicazioni le immagini da elaborare sono intrinsecamente


binarie: limmagine ideale della scena costituita da due soli livelli di grigio
significativi : un livello chiaro (bianco) ed un livello scuro (nero).
Alcuni esempi di immagini intrinsecamente binarie:
Immagini di testo dattiloscritto o manoscritto.
Immagini di oggetti di spessore approssimativamente costante e superficie
omogenea su sfondo omogeneo.
Immagini microscopiche di cellule, cromosomi etc..
In seguito allacquisizione mediante una telecamera si ottiene per unimmagine che occupa una porzione signicativa dellintervallo dei livelli di grigio
disponibili.
Le ragioni della comparsa di questi livelli spuri sono molteplici, ad esempio:
Illuminazione non perfettamente omogenea.
Rumore associato allacquisizione dallimmagine.
Diversa sensibilit dellobiettivo al centro ed ai bordi.
In questo contesto il primo passo dellelaborazione costituito tipicamente
dalla binarizzazione dellimmagine, cio dalla trasformazione dellimmagine a
livelli di grigio acquisita mediante la telecamera in unimmagine a due soli livelli (immagine binaria) che catturi il contenuto informativo fondamentale della
scena.

4.1.1

Sogliatura con soglia globale

Nei casi pi favorevoli la discriminazione fra punti dellimmagine corrispondenti


ad oggetti e punti di sfondo pu essere effettuata confrontando il livello di grigio
di ogni pixel con un valore di soglia opportunamente determinato. Il risultato
delloperazione unimmagine in cui i pixel delloggetto e dello sfondo sono
marcati con due livelli di grigio differenti. Listogramma dei livelli di grigio
37

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

38

costituisce lo strumento fondamentale per la determinazione della soglia: si


analizza listogramma e si individua un valore adeguato ai fini della separazione
fra oggetti e sfondo.

#d e f i n e OBJECT 0
#d e f i n e BACKGROUND 255
#d e f i n e THRESHOLD 128
f o r ( i n t i = 0 ; i < N; i ++){
f o r ( i n t j = 0 ; j < M; j ++){
i f ( I [ i ] [ j ] < THRESHOLD)
O[ i ] [ j ] = OBJECT;
e l s e O[ i ] [ j ] = BACKGROUND;
}
}
Ad esempio se consideriamo limmagine 4.1, possiamo capire che il valore
di soglia adeguato, in questo caso tra 110 e 130, per cui 120 dovrebbe essere
un buon valore di soglia che ci porta al risultato dellimmagine 4.2. Fino ad
ora abbiamo analizzato un caso ottimale, in cui si presentano due picchi ben
distinti allinterno dellistogramma (istogramma bimodale), nella maggior parte
dei casi la soglia non cos immediata da individuare. Quanto maggiore
la sovrapposizione dei modi allinterno dellistogramma tanto pi complesso
scegliere il valore della soglia, ed i risultati della sogliatura sono peggiori.

La sovrapposizione fra i due modi dellistogramma associati alloggetto ed


allo sfondo implica lesistenza di pixel delloggetto pi chiari (scuri) di pixel
dello sfondo e di pixel dello sfondo pi scuri (chiari) di pixel delloggetto. Evidentemente, in tale situazione il livello di grigio di un pixel non una caratteristica sufficiente ai fini della discriminazione fra oggetto e sfondo e limmagine
non pu essere binarizzata correttamente (cio senza errori) tramite una soglia

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

Figura 4.1: Immagine trattabile con soglia globale.

Figura 4.2: Risultato della sogliatura dellimmagine precedente.

39

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

40

globale. Tuttavia, vista limportanza delloperazione di binarizzazione, che


riduce drasticamente la quantit dei dati preservando il contenuto informativo primario dellimmagine, in moltissime applicazioni si cerca di determinare
una soglia globale che consenta di effettuare una binarizzazione ragionevolmente corretta anche in presenza di un certo grado di sovrapposizione fra i modi.
importante ricordare che ci sono dei casi in cui i modi delistogramma si fondo completamente, per cui diventa impossibile determinare un valore di soglia
globale.

Figura 4.3: Immagine non binarizzabile tramite soglia globale.


Limmagine intrinsecamente binaria (oggetto su sfondo) ma a causa della
forte variazione dellilluminazione nella scena i valori di intensit dello sfondo
e delloggetto non sono nettamente distinti. Di conseguenza, i due modi dellistogramma sono significativamente sovrapposti. Nelle due immagini si pu
osservare come la scelta di un valore di soglia troppo basso porti alla classificazione come sfondo dei pixel appartenenti alla parte pi chiara delloggetto
mentre quella di una soglia troppo alta porti a classificare come oggetto i pixel
appartenenti alla parte pi scura dello sfondo.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

4.1.2

41

Evidenziare listogramma

Nei casi in cui listogramma ragionevolmente bimodale possibile ricorrere ad


alcune semplici elaborazioni che facilitano la scelta della soglia.
1. Istogramma Modificato: quando la sovrapposizione fra i due modi dovuta
principalmente alle regioni di transizione fra oggetto e sfondo possibile evidenziare i due modi calcolando listogramma relativo ai soli punti dellimmagine caratterizzati da basso valore del modulo del gradiente.
Difatti, poich i punti a basso gradiente saranno situati presumibilmente allinterno delle regioni associate ad oggetto e sfondo, listogramma
modificato presenter due modi maggiormente separati rispetto a quello
dellimmagine originaria.
2. Smoothing: quando la sovrapposizione fra i due modi dovuta principalmente alle fluttuazioni intorno al valor medio dei livelli di grigio dei
pixel appartenenti alloggetto ed allo sfondo utile eseguire unoperazione di smoothing (ad esempio una semplice media con finestra 3x3) prima
del calcolo dellistogramma. Difatti, loperazione di smoothing riduce le
fluttuazioni intorno al valor medio. Evidentemente lelaborazione ha anche leffetto, non desiderato, di smussare i bordi (aumentando quindi la
sovrapposizione dovuta alle regioni di transizione), ma se la causa principale della sovrapposizione sono le fluttuazioni intorno al valor medio
leffetto globale una maggior separazione fra i due modi dellistogramma
rispetto allimmagine originaria.

4.1.3

Tecniche alternative di sogliatura

Per aggirare le problematiche della sogliatura con soglia globale, spesso vengono utilizzate tecniche alternative che permetto di migliorare la resa finale
dellelaborazione, tra queste ricordiamo:
Calcolo automatico della soglia Analizzando listogramma, determinano automaticamente la soglia per la binarizzazione.
Sogliatura con soglia variabile Lapproccio tipico a questo problema consiste nella suddivisione dellimmagine in blocchi e nelluso di una soglia
distinta per ogni blocco. Una volta eseguita la suddivisione, la scelta della
soglia dei singoli blocchi pu essere effettuata manualmente o mediante
uno dei metodi di determinazione automatica. La suddivisione in blocchi
si basa sullosservazione che quanto pi piccola larea da binarizzare tanto pi probabile che al suo interno le condizioni di illuminazione siano
uniformi. Da questo punto di vista sarebbe quindi auspicabile la scelta di
blocchi piccoli. Bisogna per tenere presente che la scelta di blocchi troppo piccoli comporta il rischio che essi contengano esclusivamente regioni
delloggetto o dello sfondo. In tal caso listogramma del blocco presenta
un solo modo, ed, in assenza di informazioni aggiuntive, ci porta ad una
scelta errata della soglia. La scelta della dimensione del blocco dipende
quindi fortemente dalle caratteristiche delle immagini di lavoro ed un
compromesso fra lesigenza di tenere il blocco piccolo al fine di limitare le

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

42

variazioni di luminosit al suo interno e di renderlo sufficientemente grande da contenere sia pixel appartenenti alloggetto sia pixel appartenenti
allo sfondo.
Sogliatura con soglia locale Lapproccio basato sulla soglia variabile pu essere ulteriormente esteso fino a prevedere una soglia locale, cio una soglia
per ogni pixel dellimmagine il cui valore dipende delle caratteristiche dellimmagine in un blocco di dimensione opportuna centrato nel pixel (come
avviene per tutti gli operatori locali). Inoltre necessario ricorrere ad un
metodo automatico per la determinazione della soglia essendo impensabile scegliere manualmente la soglia per ogni pixel. Al fine di limitare il
carico computazionale, si adotta generalmente un metodo semplice per la
determinazione automatica della soglia (valor medio o mediano). Luso
di una soglia locale quindi particolarmente adeguato per immagini in
cui c unalta probabilit che in un blocco piccolo siano presenti sia pixel
delloggetto sia pixel dello sfondo (dattiloscritto o manoscritto).
Binarizzazione tramite due livelli di soglia Esistono metodi di binarizzazione che prevedono il confronto del livello del pixel con due valori di
soglia. Lidea consiste nello sfruttare anche le relazioni di adiacenza fra
i pixel al fine di introdurre una tolleranza (intervallo di isteresi) sulla soglia di binarizzazione. Si cerca di classificare come oggetto anche i pixels
che hanno livello di grigio superiore alla soglia ma sono vicini a punti che
sicuramente appartengono alloggetto.

4.2

Segmentazione

Lanalisi automatica delle immagini ha lo scopo di estrarre informazioni con


un appropriato grado di utilit. Segmentare significa suddividere limmagine in
parti significative, per cui a basso livello pu significare identificare delle regioni,
mentre ad alto livello ha come scopo quello di identificare oggetti (anche se questa
operazione di tipo semantico e difficilmente automatizzabile). Ovviamente, il
livello di dettaglio della segmentazione dipende dal tipo di applicazione.

4.2.1

Definizione Formale

Detta P (x, y) una propriet dellimmagine definita localmente (intensit luminosa, colore, etc . . . ), con il termine segmentazione si intende il partizionamento
dellimmagine R in un insieme di regioni R1, R2, ..., RS omogenee rispetto a
P. Il partizionamento deve soddisfare i seguenti vincoli:
S
lunione delle regioni lintera immagine: Ri = R
T
Le regioni sono disgiunte: Ri Rj = 0
La segmentazione un passo fondamentale nel processo di interpretazione
poich consente di estrarre le parti elementari dellimmagine. Tali parti possono poi essere analizzate separatamente, al fine di misurare le propriet che
ne consentono la caratterizzazione, e globalmente, al fine di stabilire quali sono
le relazioni che le legano. Possiamo dire, quindi, che la segmentazione un
processo di classificazione in cui ogni pixel dellimmagine viene assegnato ad

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

43

una classe (regione) in funzione del valore di P. Per cui possiamo considerare
la binarizzazione come un caso particolare, molto semplice, di segmentazione
in cui limmagine viene partizionata in due sole regioni (sfondo e oggetto) e la
propriet il valore di intensit luminosa di ogni pixel. molto difficile stabilire un criterio generale che consenta di valutare le prestazioni di un algoritmo
di segmentazione, poich linterpretazione dei risultati fortemente dipendente
dallapplicazione. Tuttavia, gli algoritmi pi generali tendono a rispettare le
seguenti regole:
Le regioni devono essere il pi possibile omogenee rispetto a P.
Le regioni non devono avere troppe lacune.
Regioni adiacenti devono essere caratterizzate da valori significativamente
diversi di P.
I confini fra le regioni devono essere regolari e la loro localizzazione spaziale
deve essere accurata.

4.2.2

Algoritmi di segmentazione

Esistono vari algoritmi che permettono di effettuare la segmentazione di una


immagine e dipendono dalla propriet P che si considera e dalla classificazione
effettuata, questi sono basati su due aspetti: similarit o discontinuit. Sulla
prima si basano i metodi di sogliatura che sono anche quelli pi semplici e
computazionalmente meno onerosi, ma forniscono risultati soddisfacenti solo
nel caso di immagini semplici (cio con un numero piccolo di regioni). Per
superere i limiti dellapproccio basato su sogliatura sono stati sviluppati degli
algoritmi pi complessi:
Relaxation
Region Growing
Split-and-Merge
che, a differenza dei metodi di sogliatura, sfruttano anche le relazioni di adiacenza che sussistono fra i pixel dellimmagine. Altri approcci, ancor pi sofisticati,
si basano sullestrazione di un determinato insieme n-dimensionale di caratteristiche locali e sullindividuazione di gruppi di pixel omogenei rispetto a tali
caratteristiche (Clustering). Sulla discontinuit si basano, invece, gli algoritmi
che estraggono i contorni (edge) o altre caratteristiche come i punti isolati, linee,
etc . . .

4.2.3

Tecniche basate su discontinuit

Punti isolati e linee


Il metodo spesso utilizzato per individuare le discontinuit si basa su una maschera di pesi:
P
Rpuntuale = wi zi
dove wi sono ottenuti dalla matrice dei pesi e zi sono i valori dei pixel.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

1
1
1

1
8
1

44

1
1
1

Per individuare un punto isolato si valuta la condizione |Rpuntuale | > T in


cui T una soglia opportunamente scelta. Supponiamo, infatti, che un punto
isolato abbia un valore di toni di grigio zi,j molto differente dai punti adiacenti,
per questo motivo nella maschera precedente abbiamo dato un peso positivo al
punto che ci interessava. Infatti, svolgendo la sommatoria localmente sul punto
si rilever un valore elevato di |Rpuntuale |.
Per le linee omogenee spesse un pixel su sfondo uniforme possiamo usare le
seguenti maschere di pesi, infatti R diventa massimo quando combacia con la
linea rappresentata dai pesi di maggior valore.

1 1 1
2
2
2 Linea orizzontale
1 1 1

1
1
1

2
2
2

1
1 Linea verticale
1

2
1
1

1
2
1

1
1 Linea obliqua
2

1
1
2

1
2
1

2
1 Linea obliqua
1

Il pi elevato valore di |Rj | associato a queste maschere indica una maggiore


probabilit che il punto in cui si applicata la maschera appartenga ad una
linea orientata nella direzione della maschera j.

Individuzione dei contorni


Il contorno di un oggetto rappresenta una zona di frontiera, una separazione tra
lo sfondo e loggetto oppure tra questo ed altri oggetti presenti allinterno della
scena, ed il primo passo per lindividuazione di un oggetto. Un edge separa
due regioni con propriet di toni di grigio distinguibili.
Gli algoritmi di edge detection funzionano meglio quando le regioni da separare sono uniformi, solitamente lindividuazione di un contorno si divide in due
fasi:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

45

1. Applicazione di filtri derivativi : il valore in ogni punto di uscita rappresenta in modulo una stima numerica del gradiente spaziale nel punto
corrispondente nellimmagine di ingresso.
2. Sogliatura e binarizzazione.
Possiamo notare nellimmagine che il profilo dei livelli di grigio non netto, a
gradino, ma rappresenta una rampa con un salita molto ripida, dovuto ad effetti
di blurring (offuscamento) causato dal campionamento. La derivata prima (D) e
seconda (D2) sono diverse solo nelle zone di transizione, analizzandole possiamo
dire che:
D > 0 : da scuro a chiaro.
D < 0 : da chiaro a scuro.
D = 0 : zone a livello costante.
D2 > 0 : prossimit scura del contorno.
D2 < 0 : prossimit chiara del contorno.
D2 = 0 : zone a livello costante.
D2 presenta uno zero-crossing (cambio di segno o attraversamento dello
zero) in corrispondenza delle transizioni.

Per cui, mentre la derivata prima identifica il contorno, la derivata seconda


lo localizza con precisione nel momento in cui attraversa lo zero e tramite il
cambio di segno possiamo dire se siamo nel versante chiaro o in quello scuro. Il
calcolo della derivata prima e seconda dellintensit luminosa I(x, y) oneroso,
per questo motivo useremo il gradiente per la derivata prima ed il laplaciano
per la derivata seconda. I contorni, come abbiamo notato, non sono sempre
netti, ma posso assumere la forma di una rampa (con pendenze differenti). Per

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

46

la ricerca di contorni di orientamento qualunque valgono le stesse osservazioni,


considerando il profilo di grigio lungo una direzione ortogonale al contorno nel
punto desiderato:

4.2.4

Tecniche basate sul gradiente

Il gradiente di una funzione di due variabili il vettore delle derivate direzioni


lungo le direzioni degli assi, per cui:
I I T
, y ]
I(x, y) = [Gx , Gy ]T = [ x

ma oltre a queste informazioni siamo anche interessati al modulo ed alla direzione:


q
modulo: |I(x, y)| = G2x + G2y |Gx | + |Gy |
x
direzione: (x, y) = tan1 ( G
Gy )

La presenza di un edge si valuta con il superamento di una soglia da parte del


modulo del gradiente. Le formule fino ad ora presentate si riferiscono a funzioni
che sono continue, ma a noi interessano le stesse operazioni nel caso discreto,il
modo pi semplice per ottenere una approssimazione discreta del gradiente
quella di usare la differenza mobile oppure le differenze incrociate. Consideriamo
il seguente esempio, per capire cosa rappresentano:

..
..
..
..
.
.
.
.

. . . z1 z2 z3 . . .

. . . z4 z5 z6 . . .

. . . z7 z8 z9 . . .

..
..
.. . .
.
.
.
.
Le componenti del gradiente nel punto z5 sono:
Gx = z5 z6
Gy = z5 z8
1. Differenza Mobile: I = (z5 z6 ) + (z5 z8 )
2. Differenze Incrociate: I = (z5 z9 ) + (z5 z8 )
Queste operazioni possono essere implementate con lapplicazione di maschere 2x2, ad esempio le differenze incrociate possono essere ottenute tramite
gli operatori di Roberts, che vengono utilizzati per misurare le componenti del
gradiente nelle due direzioni.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO



1
0


0
1


1
0

0
1

47

Utilizzando la differenza mobile nellesempio degli edge a rampa o a gradino


otteniamo:

I contorni a rampa non possono essere localizzati dalledge detector a differenza


mobile con la precisione del pixel, infatti nelle immagini reali otteniamo dei contorni non ben definiti. Inoltre il metodo molto sensibile alle piccole fluttuazioni
di intensit e tende ad esaltare il rumore.

Figura 4.4: Esempio di applicazione della differenza mobile. Possiamo notare la


differenza orizzontale e quella verticale. In fondo a destra il risultato.
Per migliorare questa tecnica possiamo tenere in conto dei valori dei pixel da
entrambe le parti del potenziale punto di edge, usiamo la differenza separata:
I = (z4 z6 ) + (z2 z8 )
che porta al seguente risultato:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

48

Operatori di Sobel e Prewitt


Per ottenere risultati migliori possiamo utilizzare maschere di dimensione pi
grande, come quelle 3x3, queste ci permettono di effettuare simultaneamente la
differenza lungo una direzione ed una media spaziale lungo la direzione ortogonale, divenendo meno sensibile alle variazioni di luminosit ed al rumore. I due
operatori ottenuti sono chiamati:
1. Operatore di Prewitt

1
1
1

1
0
1

0
0
0
1
0
1

1
1
1

1
0
1

2. Operatore di Sobel

1
2
1

1
0
1

0
0
0
2
0
2

1
2
1

1
0
1

Figura 4.5: La prima immagine sulla sinistra ottenuta con loperatore di Sobel,
al centro con loperatore di Prewitt, a destra con la differenza mobile. In fine
notiamo la forte sensibilit al rumore.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

49

A volte si preferisce normalizzare i gradienti di riga e di colonna in modo


da avere medie pesate unitarie per i pixel posti ad entrambi i lati delleventuale
edge (si moltiplica per 1/3 la maschera di Prewitt e di 1/4 la maschera di sobel).
Anche questi operatori hanno dei problemi con edge che presentano rampe meno
ripide, in quando sono sempre del tipo a differenza separata.
Come abbiamo potuto notare, gli operatori basati sul gradiente sono poco
efficaci in presenza di rumore, per questo motivo si possono applicare preventivamente delle operazioni di smoothing per ridurre il rumore. Alternativamente possiamo aumentare larea su cui viene applicato il gradiente con maschere di dimensione pi grande, che per aumenterebbero enormemente lonere
computazionale delloperazione.

Canny Edge Detector


Lobiettivo di John F. Canny fu quello di sviluppare un algoritmo che fosse
ottimale rispetto ai seguenti criteri:
1. Detection: La probabilit di individuare punti che appartengono a edge
reali dovrebbe essere massimizzata, mentre la probabilit di individuare
falsi bordi dovrebbe essere minimizzata. Ci corrisponde a massimizzare
il rapporto segnale/rumore.
2. Localizzazione: Il bordo individuato dovrebbe essere il pi vicino possibile
al bordo reale.
3. Numero di risposte: Un solo bordo dovrebbe essere individuato, non pi di
uno (Questo requisito, si pu supporre implicitamente incluso nel primo).
Questo algoritmo, a differenza degli operatori precedenti, ci restituisce edge
dello spessore di esattamente un pixel. La formulazione matematica di tali criteri
da parte di Canny risulta ottima per una classe di problemi di individuazione
degli edge (conosciuta come step edge). Lalgoritmo lavora su cinque passi :
1. Smoothing: Limmagine viene sfocata al fine di ridurre il rumore
2. Calcolo del gradiente: Il bordo pu essere individuato come il punto in cui
il modulo del gradiente assume un modulo grande.
3. Non soppressione dei massimi : Solo i massimi locali dovrebbero essere
marcati come un bordo. Ci garantisce che i bordi siano di un pixel di
spessore.
4. Doppia sogliatura: I potenziali bordi, vengono individuati attraverso una
sogliatura.
5. Edge tracking by hysteresis: I bordi vengono determinati, eliminando tutti
i bordi che non sono connessi ai bordi forti.
Smoothing Quando limmagine viene acquisita dalla camera impossibile evitare che su di essa sia presente una certa quantit di rumore. Al fine di
garantire che questo rumore non porti a commettere errori in fase di individuazione degli edge, il rumore deve essere ridotto. Di conseguenza
limmagine viene filtra attraverso un filtro Gaussiano. Il kernel utilizzato

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

50

da tale filtro, con deviazione = 1.4. Si noti inoltre che in generale pi


grande , pi grande sar la campana e di conseguenza pi grande sar
leffetto di smooth ottenuto sul immagine.

2
4

1
B = 159
5
4
2

4
9
12
9
4

5 4
12 9
15 12
12 9
5 4

2
4

4
2

La dimensione di ha in generale impatto sulla dimensione del kernel.

Figura 4.6: Limmagine sulla sinistra quella originale, mentre sulla destra
notiamo leffetto del filtro Gaussiano per lattenuazione del rumore
Calcolo del Gradiente Lalgoritmo di Canny individua i bordi, sfruttando
una grossa variazione dellintensit, allinterno di un immagine in scala di
grigi. Queste aree vengono determinate calcolando il gradiente dellimmagine. Il gradiente in ogni pixel presente nellimmagine in cui applicato
leffetto di smooth, pu essere ricavato applicando loperatore di Sobel. Il
primo passo quello di approssimare il gradiente, lungo le direzioni x e y
rispettivamente, utilizzando i kernel seguenti:

KGX

KGY

1
= 2
1

1
= 0
1

0
0
0
2
0
2

1
2
1

1
0
1

Lampiezza del gradiente (anche conosciuta come punti di forza del bordo)
pu allora essere determinata come una misura della distanza Euclidea,
applicando le leggi di Pitagora. Essa pu essere qualche volta semplificata
applicando la misura della distanza di Manhattan in modo da ridurre la
complessit computazionale.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO


Distanza Euclidea: |G| =

51

q
G2x + G2y

Distanza Manhattan: |G| = |Gx | + |Gy |


dove Gx e Gy sono i gradienti lungo le direzioni x ed y. chiaro dalla
figura sopra, che limmagine del modulo del gradiente, indicano spesso i
bordi abbastanza chiaramente. Tuttavia, i bordi sono tipicamente ampi e
di conseguenza non indicano esattamente dove sono gli edge. Per rendere
possibile ci la direzione del bordo pu essere determinata e memorizzata
come mostrato nel equazione seguente.
|G |

= arctan( |Gxy | )

Figura 4.7: Calcolo delle direzioni di crescita del gradiente, ad esempio tramite
loperatore di Sobel
Come si pu notare dallimmagine sopra I bordi pi chiari, di una maggiore intensit sono quelli di passaggio tra loggetto e lo sfondo nero. Lo
spessore maggiore di 1 pixel, poich a seguito del filtraggio Gaussiano
i contorni non sono ben definiti, ma pi smooth. Sicuramente se avessimo applicato un filtraggio derivativo sullimmagine originale avremmo
ottenuto una maggiore quantit di rumore, dei bordi pi stretti ma con
un intensit maggiore. In tale immagine viene riportato pixel per pixel il
modulo del gradiente nel punto specifico.
Non soppressione dei massimi Lo scopo di questo passo quello di convertire i bordi blurred nellimmagine dellampiezza del gradiente in bordi
sharp. Fondamentalmente, questo fatto per preservare ogni massimo
locale allinterno del immagine gradiente, e cancellare ogni altra cosa.
Lalgoritmo per ogni pixel dellimmagine del gradiente:
1. Calcolare 0 , approssimando ad una delle quattro direzioni 0 , 45 , 90
o 135 . Ovviamente per gli edge, 180 = 0 , 225 = 45 , etc. Ci
comporta che nel range [22.5 . . . 22.5 ] e [157.5 . . . 202.5 ] verr
approssimato a 0 = 0 . Sfruttando una rappresentazione grafica,
ogni bordo assume uno dei quattro colori :

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

52

(verde intorno 225 , blu intorno 270 e rosso intorno ai 315 ) ci


corrisponde allutilizzare una regione 8-connessa.
2. Confrontare la edge strenght del pixel corrente con ledge strengh dei
pixel lungo le direzioni positive e negative del gradiente. Quindi,
verranno esaminati solo tre pixel in un intorno 3x3 del pixel (x, y):
(x, y) = 0
Se 0 (x, y) = 0 , allora verranno analizzati i pixel: (x+1, y), (x, y)
e (x 1, y).
Se 0 (x, y) = 90 , allora verranno analizzati i pixel: (x, y +
1), (x, y) e (x, y 1).
Se 0 (x, y) = 45 , allora verranno analizzati i pixel: (x + 1, y +
1), (x, y) e (x 1, y 1).
Se 0 (x, y) = 135 , allora verranno analizzati i pixel: (x + 1, y
1), (x, y) e (x 1, y + 1).
Ad esempio se la direzione del gradiente nord (0 (x, y) = 90 ) verr
confrontato con il pixel a nord e a sud.
3. Se il pixel (x, y) ha un valore del modulo del gradiente maggiore
rispetto ai tre pixel esaminati, viene mantenuto come bordo. Se
invece uno dei due pixel ha un valore del modulo del gradiente pi
grande, allora il pixel (x, y) non al centro del edge e perci verr
scartato, non classificato come un edge pixel.
Si noti che la scelta di considerare tre pixel deriva dal fatto che nel caso
ideale la dimensione del bordo di un pixel, ma dato che stato applicato
un filtraggio Gaussiano il bordo non pi puntuale ma distribuito su di
una fascia di valori di cui si vuole considerare un solo pixel, il massimo
locale. Per raggiungere tale risultato si prende nel punto considerato la
direzione delledge che permette di limitare la ricerca a suoli due pixel che
potrebbero essere degli edge. La localit data dal fatto che si considera
un area 3x3.

Figura 4.8: Le intensit degli edge sono indicate sia con i colori che con i numeri,
le frecce invece indicano la direzione del gradiente
Un semplice esempio di non soppressione dei massimi viene mostrato nella
figura successiva. Quasi tutti i pixel hanno un gradiente con direzione che
punta verso nord. Essi vengono quindi confrontati con i pixel sopra e

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

53

Figura 4.9: In questa figura possiamo notare leffetto della soppressione, sono
preservati solo gli edge-pixel in cui il gradiente ha un massimo locale.
sotto. Il pixel che risultano essere pi grandi in questo confronto, vengono
contrassegnati come bordi bianchi. Ogni altro pixel verr soppresso.
Doppia sogliatura Gli edge-pixel rimanenti dalla fase di non soppressione dei
massimi, vengono (ancora) marcati con la loro intensit pixel per pixel.
Alcuni di questi, probabilmente saranno un vero bordo dellimmagine,
ma taluni potrebbero essere causati dal rumore o da una variazione di
colore, per esempio a causa di superfici ruvide. Il modo pi semplice
per discernere tra questi vari casi quello di utilizzare una sogliatura, in
modo da garantire che solo i bordi che superano un certo valore vengono
preservati. Lalgoritmo di individuazione dei bordi di Canny, utilizza due
soglie. Gli Edge-pixels che superano la soglia superiore verranno marcati
come strong edge pixel pi piccoli della soglia inferiore saranno eliminati e
gli edge pixel che si trovano tra le due soglie verranno marcati come weak.

Figura 4.10: Leffetto sullimmagine di test con soglia rispettivamente fissata a


20 e a 80
Si noti, infine, che allaumentare le soglie superiori e inferiori, lalgoritmo
di Canny restituir un numero minore di edge.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

54

Edge tracking by hysteresis Gli strong edges vengono in generale interpretati con bordi certi, e possono essere immediatamente inclusi nellimmagine
finale. Gli edge weak sono inclusi se e solo se sono connessi a degli edges strong. Il concetto che il rumore e le altre piccole variazioni sono
improbabili che siano presenti in un edge strong (con un opportuna configurazione del livello di soglia). Questi strong edge saranno (al massimo)
causati dai veri bordi dellimmagine. Gli edge weak possono essere dati
sia dai bordi veri che dalle variazioni di colore/rumore. Questultimo tipo
sar probabilmente distribuito indipendentemente dai bordi su tutta limmagine, e di conseguenza solo una piccola quantit sar situata accanto
agli strong edge. I weak edge dovuti agli edge veri molto probabile che
siano connessi direttamente agli edges strong. In altre parole, i pixel incerti devono essere classificati come appartenenti o meno al bordo. Questo
pu essere fatto considerando se in un intorno del pixel considerato c almeno un pixel che appartenente al bordo. Se il pixel considerato si trova
tra Thigh e Tlow e in un intorno 3x3 c almeno un pixel cha ha un valore
maggiore di Thigh , allora il pixel considerato viene marcato come edge,
altrimenti allargo lintorno considerato ad una regione 5x5 e controllo se
in questo nuovo intorno c un pixel maggiore di Thigh . Se la condizione
ricercata non viene soddisfatta sul pixel considerato, questo verr scartato
e considerato come sfondo. Il tracciamento degli edge pu essere implementato tramite un analisi BLOB (Binary Large Object). Gli edge pixel
vengono divisi in BLOB connessi, utilizzando regioni 8-connesse. I BLOB
che contengono almeno un edge strong vengono preservati, mentre gli altri
BLOB soppressi. Leffetto del tracciamento degli edge sullimmagine di
test viene mostrato nella figura seguente.

Figura 4.11: Nellimmagine possiamo vedere gli effetti delledge tracking e leffetto finale dellalgoritmo di Canny. Limmagine centrale nostra gli strong edge
in bianco, i weak edge che sono connessi con quelli strong tramite gli edge in
blu, tutti gli altri in rosso

4.2.5

Tecniche basate sul Laplaciano

Gli zero-crossing della derivata seconda identificano con precisione gli edge, ed
il segno determina lappartenenza di un pixel al versante scuro oppure a quello
chiaro. Per calcolare la derivata seconda della funzione di intensit luminosa
I(x,y) usiamo loperatore Laplaciano definito come:
L(x, y) = 2 I(x, y) =

2 I
x2

2 I
y 2

Il modo migliore per approssimare il Laplaciano nel caso discreto quello di


calcolare le differenze delle derivate prima lungo gli assi:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

55

Figura 4.12: Tutti i passaggi dellalgoritmo di Canny


L(x, y) = [I(x, y) I(x 1, y)] [I(x + 1, y) I(x, y)] + [I(x, y) I(x, y
1)] [I(x, y + 1) I(x, y)]
quindi:
L(x, y) = 4I(x, y) I(x 1, y) I(x + 1, y) I(x, y 1) I(x, y + 1)
Dato che la risposta impulsiva del filtro ottenuto sfruttando i quattro vicini del pixel troppo soggetta al rumore ed incapace di rilevare la direzione
delledge, si sfrutta solitamente il Laplaciano del Gaussiano (LoG).

4.3

Tecniche di Regionalizzazione

Queste tecniche sono basate sullanalisi delle similarit tra pixel al fine di estrarre
direttamente delle regioni. A differenza della segmentazione, questa pi forte
perch aggiunge il concetto di connessione. Si suddivide limmagine R in Ri
regioni tali che:
Ogni pixel contenuto in una regione Ri .
Ogni regione Ri connessa.
Ogni regione Ri disgiunta dalle altre.
Tutti i pixel appartenenti ad una regione devono soddisfare le propriet in base
alla quale la regione stata identificata P (Ri ), ed ogni regione deve essere
diversa dalle altre.

4.3.1

Labeling di componenti connesse

Il concetto di componente connessa deriva dalla teoria dei grafi, e con esso anche
lalgoritmo di etichettatura in cui un sotto insieme di componenti connesse viene
etichettata univocamente sulla base di una determinata euristica. Nellambito
della computer vision viene utilizzato per identificare regioni connesse allinterno

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

56

di una immagine binaria, solitamente con lo scopo di estrarre dei blob da poter
analizzare in un secondo momento per effettaure tracking, conteggio, etc . . . .
Bisogna fare attenzione a non confondere il labeling delle componento connesse
con la segmentazione. Due esempi di labeling potrebbero essere i seguenti.

Figura 4.13: Esempi di labeling di componenti connesse


La nozione di componente connessa dipende dal criterio di connessione adottato:
4-connesso: se nellanalisi della propriet comune si considera il pixel centrale e quelli sopra, sotto, a destra, a sinistra. In questo caso analizzaremo
letichetta dei pixel a Nort e Ovest.
8-connesso: si considerano tutti i pixel intorno al pixel analizzato prima
di assegnare la label. In questo caso analizziamo letichetta dei pixel a
Nord, Ovest, Nord-Ovest, Nord-Est.
Lalgoritmo per il labeling pi semplice prevede solo due passaggi:
1. Identificazione delle equivalenze ed assegnazione di label temporanee.
2. Valutazione delle classi di equivalenza tra le label temporanee ed assegnazione di label definitive.
Nel caso 4-connesso possiamo riassumere le condizioni da valutare per determinare il valore delletichetta del pixel sotto analisi come segue:
1. Il pixel a sinistra (Ovest) del pixel corrente presenta lo stesso valore?
Si - Il pixel sotto analisi si trova nella stessa region, gli assegnamo la
stessa etichetta di quello alla sua sinistra.
No - Passa alla prossima condizione.
2. Il pixel a in alto (Nord) e quello a sinistra (Ovest) del pixel corrente presentano lo stesso valore, ma non la stessa etichetta (Conflitto tra
etichette)?

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

57

Si - Sappiamo che il pixel in alto e quello a sinistra appartengono alla


stessa regione e devono essere fusi. Assegna al pixel corrente il minimo tra le etichette del pixel sopra e di quello a sinistra, e memorizza
la loro relazione di equivalenza.
No - Passa alla prossima condizione.
3. Il pixele a sinistra di quello corrente presenta un valore differente e quello
in alto presenta lo stesso valore?
Si - Assegna letichetta del pixel in alto al pixel corrente.
No - Passa alla prossima condizione.
4. Il pixel in alto e quello a sinistra presentano valori differenti?
Si - Crea una nuova etichetta ed assegnala al pixel corrente
Lalgoritmo procede in questo modo analizzando tutti i pixel dellimmagine e
creando nuove regioni dove necessario. Quando viene completata letichettatura
iniziale si effettua una seconda passata per sostituire alle etichiette iniziali quelle
equivalenti.
a l g o r i t h m TwoPass ( data )
linked = [ ]
l a b e l s = s t r u c t u r e with d i m e n s i o n s o f data ,
i n i t i a l i z e d with t h e v a l u e o f Background
F i r s t pass
f o r row i n data :
f o r column i n row :
i f data [ row ] [ c o l ] i s not Background
neighbors = connected elements
with t h e c u r r e n t element s l a b e l
i f n e i g h b o r s i s empty
l i n k e d [ NextLabel ] = s e t c o n t a i n i n g NextLabel
l a b e l s [ row ] [ column ] = NextLabel
NextLabel += 1
else
Find t h e s m a l l e s t l a b e l
L = neighbors l a b e l s
l a b e l s [ row ] [ column ] = min (L)
for label in L
l i n k e d [ l a b e l ] = union ( l i n k e d [ l a b e l ] , L)
Second p a s s

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

58

f o r row i n data
f o r column i n row
i f l a b e l s [ row ] [ column ] i s not Background
l a b e l s [ row ] [ column ] = min ( l i n k e d [ l a b e l s [ row ] [ column ] ] )
return l a b e l s

4.3.2

Region Growing

Il region growing utilizza un semplice approccio, cio parte da alcuni pixel


(seeds) che rappresentano regioni distinte dellimmagine (per fare ci ci si pu
basare sulle informazioni fornite dallistogramma) e li accresce fino a che tutta limmagine risulta coperta. Per fare ci servono una regola che descriva il
meccanismo di crescita ed una regola che controlla lomogeneit di ogni regione
dopo ogni accrescimento e che verifica se possibile unire due regioni distinte.
Il meccanismo di crescita funziona in questa maniera:
1. Ad ogni passo k e per ciascuna regione Ri (k), i = 1, . . . , N , si controlla se
ci sono pixel non classificati nel vicinato 8-connesso (in poche parole gli
otto pixel che circondano quello in esame) di ciascun pixel del bordo della
regione;
2. In caso positivo, prima di assegnare tale pixel alla regione Ri (k), si verifica
se la regione ancora omogenea, ovvero se ancora valida la propriet:
P (Ri (k), Ux ) = T RU E Un possibile esempio di test di omogeneit il
seguente: se lintensit del pixel vicina al valore medio della regione. La
scelta delle propriet P usate per la segmentazione dipende dal problema
in esame e dai dati a disposizione (intensit, colore, texture).
La regola di arresto dellaccrescimento di una regione pu essere determinata
da:
Assenza di pixel che soddisfano il criterio di aggregazione.
Criteri globali che tengano conto non solo delle P locali, ma anche di come
si formata la regione fino a quel momento.

4.3.3

Region Splitting and Merging

Questa tecnica prevede di partire dallimmagine intera, suddividendola in parti


disgiunte sempre pi piccole, fondendo quelle adiacenti con caratteristiche simili.
Il procedimento termina quando tutte le regioni soddisfano i criteri previsti per
la segmentazione e ricoprono lintera immagine.
Ad ogni livello di suddivisione si verifica la propriet per tutti i quadranti,
se non verificata viene ulteriormente suddiviso, e cos via.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

59

Il solo splitting non potrebbe evitare, allultimo livello di suddivisione, la


presenza di regioni adiacenti con caratteristiche simili. Per cui, si fa il merging
delle regioni adiacenti i cui pixel soddisfano la propriet P. Possiamo riassumere
la procedura come segue. Ad ogni livello di suddivisione:
1. Suddividere in quattro quadranti ogni regione Ri per la quale P (Ri )
falsa.
2. Fondere due regioni adiacenti Ri ed Rj se vera P (Ri Rj ).
3. Terminare quando non pi possibile effettuare splitting o merging.

4.3.4

K-Means

Questo Algoritmo opera una classificazione senza dover preventivamente imparare le classi. Infatti, si suppone che il numero delle classi di pixel (sfondo
compreso) sia noto, quindi pixel vengono iterativamente assegnati alle k classi.
Bisogna ricordare che non sempre disponibile una tecnica ottimale per
determinare il numero e caratteristiche delle classi, e se le classi non sono k
possibile giungere a risultati errati.
Lalgoritmo prevede i seguenti passi:
1. Definisci il numero k.
2. Scegli i k punti che faranno da semi iniziali per i cluster da formare.
3. Prima passata: assegna ciascun punto dellimmagine (tranne i k semi) al
cluster pi simile.
4. Per ogni cluster, calcola il class exemplar corrispondente ogni volta che al
cluster viene aggiunto un punto.
5. Seconda passata: riclassifica tutti i punti compresi i k semi iniziali in base
al class exemplar pi simile.
Non detto che alla fine della seconda passata i semi appartengano ancora
alle classi originarie. In effetti questo ci permette di scegliere a caso i k semi. Se
il numero k non noto sar necessario ricorrere ad altre tecniche o a raffinamenti
successivi. Non sempre si considerano le coordinate spaziali fra le features, quindi una classe sar in genere composta da pi oggetti. Non abbiamo dato alcuna
indicazione su come scegliere la metrica pi adatta (dipende dallapplicazione).

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

60

Figura 4.14: Esempio di K-means solo sul grigio e solo sul colore (le coordinate
non sono comprese fra le feature)

4.3.5

Segmentazione Wathershed

Tecnica di segmentazione mista, basata sulla pixel aggregation flooding, ma con


limpiego del gradiente dellimmagine come argine per il flooding.

Loperatore di gradiente assume un valore elevato in corrispondenza dei pixel


in cui si verifica una variazione del livello di luminosit, quindi la magnitudo del
gradiente tanto pi elevata quanto maggiore la variazione nel punto. A questo punti definiamo limmagine di gradiente che limmagine G(x, y) ottenuta
assegnando a ciascun punto (x, y) valore di magnitudo del gradiente dellimmagine I(x, y). Questa immagine pu essere considerata come una superficie 3D
caratterizzata da:
Argini (ridges): rappresentano le curve di massimo del gradiente;
Bacini (catchment basins): rappresentano le curve di minimo.
Supponiamo di praticare un foro sul fondo di ciascun bacino e di allagare poi
tutti i bacini contemporaneamente attraverso i fori, quello che accadr che
lacqua risalir i bacini fino agli argini. E supponiamo di impedire che le acque
provenienti da bacini differenti si mischino, costruendo una diga ogni volta che
le acque di due bacini si incontrano.
La diga costruita man mano per impedire la congiunzione delle acque rappresenta, a fine processo, il contorno degli oggetti dellimmagine, mentre linsieme
dei punti che allaga ciascun bacino costituisce un oggetto. Notiamo che la presenza di minimi locali porta in genere ad una sovrasegmentazione dovuta alla
presenza di troppi bacini che non possono mai fondersi.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

61

Figura 4.15: Tutti i passaggi del watershed

Figura 4.16: Effetto di sovrasegmentazione del wathershed.


Una soluzione rendere semi-manuale il processo, richiedendo allutente di
marcare preventivamente tutti e soli i minimi da cui partire, operazione che
corrisponde a forare manualmente i bacini per fare entrare lacqua.

4.4

Individuazione dei punti di interesse: Feature


Points

Esistono delle applicazioni in cui utile individuare punti di particolare interesse


allinterno dellimmagine, in questo modo possibile riassumere delle caratteristiche di un oggetto presente allinterno della scena e quindi poterlo riconoscere
in scene differenti (applicazione tipica il tracking).
Il problema principale come identificare dei punti che siano effettivamente
rilevanti e solidi da poter essere identificati anche in situazioni differenti da

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

62

Figura 4.17: Preforatura dei bacini per evitare la sovrasegmentazione.

Figura 4.18: Nellimmagine possiamo vedere una delle applicazioni dei punti di
interessere: la ricerca dei due oggetti nelle foto sulla sinistra allinterno della
scena sulla destra.
quella in cui i punti stessi sono stati trovati (indipendenza dallimmagine), in
modo che anche se loggetto venga ruotato, inclinato, o spostato sia sempre
possibile associarli ai punti identificati in scene precedenti. Un altro problema
da risolvere quello di organizzare correttamente le corrispondenze tra i punti
individuati su due scene differenti. Se riuscissi ad identificare dei punti del
genere, e riuscissi ad ottenere perfettamente la corrispondenza di ogni punto
in scene differenti, potrei seguire loggetto o cercarlo in contesti completamente
differenti da quello originale.
In conclusione devo trovare dei punti che si differenzino da tutti gli altri
adiacenti per colore, intensit luminosa, etc, . . . Come sappiamo, i punti che si
trovano sugli edge presentano delle caratteristiche che possono interessarci, ma
non sono ancora del tutto buoni poich possono essere confusi con altri punti
presenti sullo stesso edge. Allora la soluzione migliore certamente quella di
prendere in considerazione gli angoli, infatti un punto che si trova in un angolo
rispetta tutte le caratteristiche che vorremmo avesse un punto di interessere:
Intensit luminosa costante.
Ha una sufficiente variabilit strutturale, ma non troppo.
Corrisponde ad una zona superficiale reale.
Non si deforma eccessivamente nel tempo.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

63

Figura 4.19: Unaltra applicazione quella della ricostruzione dei panorami,


tipica della fotocamere digitali.

A questo punto, possiamo cominciare a parlare non pi di ricerca di punti di


interesse generici, ma di identificazione dei corner point (punti di angolo), uno
degli algoritmi pi conosciuti in questo contesto quello di Harris.

4.4.1

Harris Corner Detector

Questo algoritmo ha lo scopo di rilevare gli angoli dellimmagine, che diventano


le caratteristiche salienti, o features, che vogliamo estrarre dallimmagine stessa.

Lidea di base che possiamo facilmente localizzare un punto cercando allinterno di una piccola finestra, spostando questa in ogni direzione riusciremmo
ad individuare le zone in cui si presente una forte variazione di intensit. dalla
figura 4.20 notiamo che possiamo imbatterci in:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

64

Figura 4.20: Tre casi che possiamo incontrare muovendo la finestra.


Flat Region: muovendo la finestra in qualisiasi direzione non di nota alcun
cambiamento.
Edge: non si notano cambiamenti quando ci si muove lungo la direzione
delledge.
Corner : in qualsiasi direzione si muove si notano variazioni significative.

La funzione finestra e la matrice M


Consideriamo, per semplicit, di lavorare su unimmagine in scala di grigi I(x, y),
e siano u e v le coordinate sul piano corrispondenti rispettivamente alla direzione orizzontale e verticale. Ricordiamo, innanzi tutto, che ad edge e corner
corrispondono solitamente veloci variazioni nellintensit dellimmagine, quindi
ntroduciamo la la seguente funzione, che rappresenta la media delle variazioni
di intensit movendo la finestra in [u, v]:
X
E(u, v) =
w(x, y)[I(x + u, y + v) I(x, y)]2
x,y

in cui w(x, y) rappresente la funzione finestra, che pu assumere sia la forma di


una finestra rettangolare che 1 nellintervallo dinteresse e 0 fuori, si di una
gaussiana.

Approssimando la funzione I(x, y) al primo grado la serie di Taylor otteniamo:


X
E(u, v)
w(x, y)[I(x, y) + uIx + vIy I(x, y)]2
x,y

w(x, y)[uIx + vIy ]2

x,y

x,y w(x, y)(u, v)


Ix Ix
Ix Iy

Ix Iy
Iy Iy

 
u
v

In questo modo abbiamo ottenuto, per piccole variazioni di [u, v] una approssimazione lineare:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO


E(u, v) ' [u, v]M

65

 
u
v

dove M una matrice 2x2 ottenuta tramite le derivate dellimmagine:


 2

P
Ix
Ix Iy
M = x,y w(x, y)
Ix Iy
Iy2

Analisi degli autovalori di M


A questo punto possiamo effettuare una analisi degli autovalori (1 , 2 ) della
matrice M per valutare le variazioni di intensit, sotto la condizione che lellissi
E(x, y) = const (contorno di iso-intensit).

Dallanalisi degli autovalori possiamo effettuare una classificazione dellimmagine, infatti:


Flat Region nei casi in cui 1 e 2 sono piccoli (E rimane costante in tutte
le direzioni).
Edge: nei casi in cui 1  2 oppure 2  1 .
Corner : nei casi in cui 1 e 2 sono grandi e 2 1 (E cresce in tutte le
direzioni).

Misura della corner response


Sempre basandoci sullanalisi degli autovalori possiamo definire la corner response:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

66

R = detM k(traceM )2
detM = 1 2
traceM = 1 + 2
in questo modo non pi necessario calcolare gli autovalori della matrice
M, ma ci possiamo basare direttamente sul determinante di M, sulla sua traccia
e sulla constante k=0.04 - 0.06 (calcolata empiricamente). Avvalendoci nuovamente della rappresentazione precedente, possiamo suddividere limmagine in
tre regioni:
Flat Region dove |R| picolo.
Edge: dove R negativo.
Corner : dove R positivo e molto grande.

Algoritmo
A fronte dellanalisi precedente possiamo capire che lalgoritmo si basa sul
calcolo della corner response
Calcolo della Corner Response R (Figura 4.22)
Individuazione dei punti in cui R > soglia (Figura 4.23)
Individuazione dei massimi locali di R (Figura 4.24)

Analisi dellalgoritmo
Lalgoritmo ideale per lidentificazione dei feature point dovrebbe identificare
gli stessi punti delloggetto indipendentemente dai cambiamenti subiti dallimmagine. In particolare, deve essere robusto rispetto a:
Scalamento dellimmagine (Figura 4.27)

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

67

Figura 4.21: Immagine originale

Figura 4.22: Immagine dopo il calcolo della corner response


Rotazione dellimmagine (Figura 4.26)
Illuminazione (Figura 4.28)
Prospettiva
Occlusione parziale
Lalgoritmo di Harris si dimostra invariante rispetto alla rotazione, in quanto
limmagine rimane sostanzialmente uguale e quindi anche i valori di R, ma
non robusto rispetto allo scalamento dellimmagine. Per quanto riguarda le
variazioni di luminosit dipende fortemente dalla soglia scelta per i massimi
locali.

4.5

Scale Invariant Feature Transform (SIFT)

Lalgoritmo SIFT stato pubblicato da David Lowe nel 1999, e rientra nella
famiglia dei Feature Detector (oppure Blob Detector, dove per Blob si intende
una certa area dellimmagine). Questa famiglia di algoritmi prevede non solo
lidentificazione di dei punti di interesse ma anche la descrizione in quanto una
delle applicazioni classiche prevede di poter identificare gli stessi punti allinterno
di immagini diverse:
1. Feature Tracking: inseguire dei punti salienti in una sequenza video.
2. Feature Matching: caratterizzare un oggetto tramite una serie di feature
point per poter ricercare lo stesso oggetto in unaltra immagine.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

68

Figura 4.23: Immagine dopo la sogliatura

Figura 4.24: Massimi locali


3. Costruzione della mappa di disparit: nellambito della registrazione 3D
si utilizzano due telecamere, per cui necessario effettuare il matching tra
i punti ripresi da entrambe le scene e determinare la mappa di disparit.
SIFT presenta le seguenti caratteristiche:
1. Scale Invariant
2. Rotationa Invariant
3. Parzialmente invariante al cambiamento di luminosit
4. Alta Ripetibilit: indica la capacit di un feature detector di individuare,
su diverse viste della stessa immagine, sempre gli stessi punti. Questo
garantisce una semplificazione delle operazioni di matching.

4.5.1

Il Metodo di Lowe

I punti chiave SIFT degli oggetti sono prima estratti da una serie di immagini
di riferimento e memorizzati in un database. Un oggetto riconosciuto in una
nuova immagine confrontando singolarmente ciascun elemento della nuova immagine con quello nel database trovando quello pi simile secondo la distanza
euclidea delle loro caratteristiche vettoriali. Da lintera serie di corrispondenze,
insieme di punti chiave che corrispondono alloggetto e la sua ubicazione, scala,
e orientamento, sono identificate nella nuova immagine estraendo le migliori. La
determinazione dei gruppi pi coerenti viene eseguita rapidamente utilizzando

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

69

Figura 4.25: Risultato

Figura 4.26: Harris robusto rispetto alla rotazione


una hash table che funge da implementazione della trasformata di Hough generalizzata. Ogni gruppo di 3 o pi caratteristiche che concordano su un oggetto
e la sua posizione poi oggetto di ulteriori verifiche e, successivamente, i peggiori vengono scartati. Infine, viene calcolata la probabilit che un determinato
insieme di caratteristiche indica la presenza di un oggetto, dando la precisione
di adattamento e il numero di probabili corrispondenze errate. Gli oggetti trovati che passano tutte queste prove possono essere identificati come corretti con
elevata affidabilit.

Hough Transform
La trasformata di Hough una tecnica di estrazione utilizzata nel campo dellelaborazione digitale delle immagini. Nella sua forma classica si basa sul riconoscimento delle linee di unimmagine, ma stata estesa anche al riconoscimento
di altre forme arbitrariamente definite. Questa tecnica ha lo scopo di individuare istanze imperfette di oggetti allinterno di una determinata classe di
forme basandosi su una procedura di votazione svolta allinterno di uno spazio
parametrico. Allinterno di questo spazio ogni oggetto candidato ottenuto come massimo locale di uno spazio accumulatore che viene appositamente creato
dallalgoritmo.

4.6

Speeded Up Robust Feature (SURF)

SURF nasce con lo scopo di ottimizzare e semplificare SIFT, ma preservando le prestazioni in termini di punti salienti identificati e ripetibilit. I passi
fondamentali dellalgoritmo sono i seguenti:

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

70

Figura 4.27: Harris non robusto rispetto alla scalatura

Figura 4.28: Harris presenta un discreta tolleranza della luminosit


1. Individuazione dei punti di interesse (tramite lutilizzo del determinante
della matrice Hessiana).
2. Analisi dei punti di interesse nello scale space. Poich un punto di interesse
buono se rimane un punto a forte variazione su differenti risoluzioni
dellimmagine.
3. Individuare la direzione delle feature. (Per poter essere rotation invariant)
4. Generazione dei feature vector, che rappresentano la descrizione delle feature individuate (in termini di direzione, variazioni locali nellintorno della
feature, etc . . . ).

4.6.1

Individuazione dei punti di interesse

Lapproccio utilizzato per individuare i punti di interesse sfrutta una approssimazione molto semplice della matrice Hessiana, sfruttando una immagine
integrale, il che riduce drasticamente i tempi di elaborazione.

Matrice Hessiana
La matrice Hessiana un matrice quadrata contenente le derivate di secondo
grado di una funzione, e permette di descriverne la curvatura locale.
2 f

2
2 f
f
. . . x1 x
x1 x2
x21
n
2 f

2
2 f
f

. . . x2 x
x2 x1
x22
n

..
..

.
...
.
...
2
2
2
f
f
f
...
xn x1
xn x2
x2
n

Che nel caso di una immagine I(x,y) diventa semplicemente una matrice 2x2
simmetrica.
#
" 2 I
2 I
x21
2 I
x2 x1

x1 x2
2 I
x22

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

71

Come sappiamo, per le matrici quadrate, il determinante pu essere ottenuto


come prodotto degli autovalori. Per la matrice Hessiana, gli autovettori formano
una base ortogonale che mostra il gradiente dellimmagine:
Minimo Locale: se tutti gli autovalori sono positivi.
Massimo Locale: se tutti gli autovettori sono negativi.
Sella: se gli autovalori hanno segno discordanti.
Quindi, essendo il determinante calcolato come prodotto degli autovalori, possiamo asserire che se questo positivo significa che gli autovalori hanno segno concorde e quindi siamo in un massimo o minimo locale. Solitamente non
prendiamo in considerazione tutti i minimi o i massimi (non-maximum suppression), ma imponiamo una soglia al valore del determinante in modo da rilevare
solamente i valori che sono pi interessanti.

Immagine integrale
Questo tipo di rappresentazione permette una elaborazione molto rapida dei
filtri di convoluzione a box. Il valore dellimmagine integrale al punto IP (x, y)
rappresenta la somma di tutti i pixel dellimmagine di input I(x, y) allinterno
della regione rettangolare formata dallorigine (x, y).
IP (x, y) =

jy
ix X
X

I(i, j)

i=0 j=0

Una volta che stata realizzata limmagine integrale essa richiede semplicemente
tre addizioni per poter calcolare la somma delle intensit di una qualsiasi regione,
come possiamo notare dalla figure 4.29. Quindi il tempo elaborazione diventa
indipendente dalla dimensione dellimmagine, il che vantaggioso quando si
devono utilizzare filtri di grosse dimensioni.

Individuazione dei punti di interesse tramite la matrice


Hessiana
SURF si basa sulla matrice Hessiana perch permette di ottenere buone prestazioni per quanto riguarda laccuratezza. Precisamente, indivudua delle strutture
simili a blob nei punti in cui il determinante massimo.
Dato un punto = (x, y) nellimmagine I, la matrice Hessiana H(, ) in
con scalamento definito come segue:


Lxx (, ) Lxy (, )
H(, ) =
Lxy (, ) Lyy (, )

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

72

Figura 4.29: Calcolo dellintensit allinterno di una regione rettangolare


dove Lxx (, ) il LoG che permette di approssimare la derivata seconda
dellimmagine.

I filtri guassiani sono ottimi per lanalisi nello scale space, ma devono essere
discretizzate e approssimate. Il vantaggio in termini computazionali ottenuto dallutilizzo del LoG (dovuto soprattutto allindipendenza dalla dimensione
dellimmagine) non ha un impatto significativo sulle prestazioni dellalgoritmo.

Lapprossimazione del LoG avviene tramite i kernel visti nelle immagini precedenti, ad esempio il box 9x9 rappresenta lapprossimazione di un Gaussiano con
= 1.2 ed la scala pi bassa (vedi come risoluzione pi alta dellimmagine)
per lelaborazione della Response Map dei blob. Per calcolare conoscendo le
dimensioni del box possiamo utilizzare la seguente relazione:
= (f iltersize/9) 1.2
Denotando con Dxx , Dyy e Dxy queste approssimazioni possiamo facilmente
ottenere il determinante dellHessiano come:
det(Happrox ) = Dxx Dyy (wDxy )2

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

73

dove w rappresenta il peso (dipendente dalla scala) utilizzato per bilanciare


lespressione del determinante, necessario per la conservazione dellenergia tra
il kernel Gaussiano e la sua approssimazione.
Lapprossimazione del determinante dellHessiano rappresentala risposta del
blob nella posizione dellimmagine. Questa risposta viene memorizzata nella
Response Map in differenti scale, ed il massimo locale viene calcolato come
spiegato sopra.

Rappresentazione dello Scale Space


Per una corretta analisi necessario identificare i punti di interesse su differenti
scale di risoluzione dellimmagine poich la ricerca delle corrispondenze spesso
richiede la comparazione tra immagini che hanno differenti risoluzioni. Lo Scale
Space spesso realizzato come una piramide di immagini. Le immagini sono
ripetutamente sfumate con un filtro Gaussiano e sottocampionate fino a raggiungere la vetta della piramide. Sfruttando limmagine integrale SURF ottiene
lo scale space effettuando un incremento della dimensione del filtro, invece di
ridurre iterativamente la dimensione dellimmagine.
Loutput del filtro di dimensioni 9x9 considerato il primo livello di scala, i successivi livelli sono ottenuti filtrando limmagine con maschere sempre
pi grandi, sfruttando la natura discreta dellimmagine integrale e la specifica
struttura dei filtri usati. Tutto questo permette di avere un notevole incremento dellefficienza computazionale delle operazioni, inoltre non necessario
effettuare il sottocampionamento e quindi non sorgono problemi di aliasing.

Figura 4.30: Rappresentazione della suddivisione in livelli ed ottave


Lo scale space viene suddiviso in ottave (Figura 4.30). Ogni ottava rappresenta una serie di response map dei filtri ottenute convolvendo la stessa
immagine di input con filtri di dimensioni sempre crescenti. In totale, una ottava comprende un fattore di scala di 2. Ogni ottava suddivisa in un numero
costante di livelli.
Sempre basandoci sulla natura discreta dellimmagine integrale possiamo
considerare che la minima diffenza di scala tra due sottosequenze di scale dipende
dalla lunghezza l0 dei lobi positivi o negativi della derivata seconda parziale nella
direzione di derivazione (x o y), che solitamente impostato come un terzo della
dimensione del filtro (ed esempio per il filtro 9x9 3). Per due successivi livelli
dobbiamo incrementare questa dimensione di un minimo di 2 pixel (uno per ogni
lato) per mantenere la dimensione irregolare e cos da assicurare la presenza di

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

74

un pixel centrale. Questo comporta un incremento totale della maschera di


6 pixel e quindi a livello successivo avremo dimensioni 15x15, poi 21x21, poi
27x27, fino a quando la scala non cambia di un fattore 2. Per calcolare la
varizione di scala tra due livelli bisogna semplicemente dividere le dimensioni
delle loro maschere, ad esempio dal primo al secondo livello della prima ottava
21
avremo 15
9 = 1.6, dal secondo al terzo avremo 15 = 1.4. Possiamo notare come
laumento di scala diventa sempre pi piccolo al crescere dei livelli della stessa
ottava. I cambiamenti di scala pi ampi, specialmente tra i primi due livelli della
stessa ottava, rendono il campionamento delle scale molto rudimentale. Per
questo motivo SURF implementa anche un scale space con un campionamento
pi fine delle scale.

Per ogni nuova ottava la dimensione iniziale della maschera viene raddoppiata, quindi la prima ottava partir da 9x9, la seconda da 15x15, la terza da 21x21
e cos via. Anche lincremento di dimensioni da livello a livello varia a seconda
dellottava in cui ci troviamo, ad esempio se per la prima ottava aumentiamo
di 6 pixel, per la seconda aumenteremo di 12 pixel alla volta. In questo modo
possiamo analizzare il pi ottave contemporaneamente, ma ricordiamo che il
numero di punti di interesse per ottava decresce molto rapidamente.

Localizzazione dei punti di interesse


Per localizzare i punti di interesse SURF utilizza una soppressione dei nonmassimi con una localit 3x3x3. Quindi il massimo del determinante dellHessiana viene interpolato nello scale space e nello spazio dellimmagine. In questo modo vengono conservati solo i punti di interesse che si mantengono sulla
maggior parte delle scale.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

75

Figura 4.31: Filtri a differenti livelli dellottava

4.6.2

Descrizione e matching dei punti di interesse

La sola informazione sulla posizione dei punti di intesse non basta per la maggior
parte delle applicazioni, per cui necessario inserire delle informazioni aggiuntive che descrivano il punto. SURF descrive i punti di interesse in termini di
intensit dei punti adiacenti a quello di interesse (simile al gradiente usato da
SIFT) e di orientamento (in modo da essere invariante alla rotazione). Per valutare lorientamento, sfrutta una approssimazione discreta della la wavelet di
Haar in entrambe le direzioni.

Orientamento
Per individuare lorientamento di un punto di interesse SURF calcola, prima
di tutto, la risposta alla wavelet di Haar nelle direzioni x e y allinterno di un
intorno circolare di dimensioni 6s, dove s la scala in cui il punti di interesse
stato identificato. Il passo di campionamento dipendente dalla scala e viene
impostato ad s, mentre la dimensione delle wavelet scelta 4s.

Figura 4.32: Wavelet di Haar utilizzate per lorientamento


Una volta calcolata la risposta alla wavelet e pesata con un Gaussiano ( =
2s) centrato sul punto di interesse, le risposte vengono rappresentate su un piano

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

76

cartesiano in cui lascissa la forza della risposta orizzontale e lordinata la forza


della risposta verticale.

Figura 4.33: Stima dellorientamento del punto di interesse


La direzione dominante stimata calcolando la somma di tutte le risposte
allinterno di una finestra ad orientamento scorrevole di dimensione 3 (Figura 4.33). Le componenti orizzontali e verticali della risposta allinterno della
finestra vengono sommate, ottenendo un vettore di orientamento. Il vettore
pi grande tra tutti quelli considerati allinterno delle varie finestre definisce
lorientamento del punto di interesse

Descrittore basato sulla somma delle risposte alla wavelet


di Haar
Al fine di estrarre il descrittore, il primo passo da eseguire quello di costruire
una regione quadrata intorno al punto di interesse, orientata lungo la direzione
individuata al passo precedente. La dimensione di tale finestra di 20s.
La regione viene poi suddivisa regolarmente in sotto-regioni aventi dimensionsi 4x4 (Figura 4.34), in modo da preservare importanti informazioni spaziali.
Per ogni regione, calcoliamo la risposta alla wavelet di Haar, e per semplicit
indicheremo con dx la risposta lungo la direzione orizzontale e dy quella lungo la direzione verticale (dove orizzontale e verticale sono definite in relazione
allorientamento del punto). Per aumentare la robustezza nei confronti di deformazioni geometriche e errori di localizzazione, le risposte dx e dy sono pesate
con un Gaussiano ( = 3.3s) centrato nel punto di interesse.
Quindi, per ogni regione vengono sommate le risposte dx e dy in modo da
formare un primo insieme di informazioni da inserire nel feature vector. Per
legare queste informazioni sulla polarit dei cambiamenti di intensit estraiamo i valori assoluti delle risposte |dx | e |dy |. Ora ogni sotto-regione ha
un descriptor
per la propria stuttura di intensit
P
P vector
P quattro-dimensionale
P
v = ( dx , dy , |dx |, |dy |). Concatenando queste informazioni per tutte
le regioni 4x4 otterremo un descriptor vector di 64 valori (4 valori per ognuna
delle 16 sotto-regioni) che rappresenta il nostro feature vector. Le risposte alla
wavelet di Haar risultano invarianti rispetto ad errori preesistenti sulla illuminazione. Linvarianza rispetto al contrasto viene ottenuta fondendo il descrittore
in uno unit vector.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

77

Figura 4.34: Suddivisione della regione in sottoregioni di dimensioni 4x4

Fast Indexing
Per ottenere una indicizzazione rapida durante la fase di matching, il segno del
Laplaciano (traccia della matrice Hessiana) viene sfruttato come discriminante
per scartare immediatamente un punto.

CAPITOLO 4. ELABORAZIONI DI MEDIO LIVELLO

78

Figura 4.35: I valori del descrittore delle sottoregioni rappresenta la natura del
pattern di intensit sottostante. A sinistra il caso di una regione omogenea,
notiamo che tutti i valori sono relativamente bassi. AlPcentro il caso in cui le
frequenze sono presenti nella direzione x, il valore di
|dx | elevato, ma gli
altri rimangono bassi. A destra
il
caso
in
cui
lintensit
cresce gradualmente
P
P
nella direzione x, i due valori
dx e |dx | risultano alti, mentre gli altri sono
bassi

Figura 4.36: Nel figura possiamo notare il comportamento di SIFT e SURF in


presenza di rumore. SURF risulta molto meno sensibile al rumore
Infatti, il segno del Laplaciano permette di distinguere un blob luminoso su
sfondo scuro oppure la situazione inversa. Questa informazione viene ottenuta
senza onere aggiuntivo perch calcolata direttamente durante la fase di detection. Nella fase di matching possiamo comparare scegliere solo le feature che
presentano lo stesso tipo di contrasto, velocizzando notevolmente loperazione
senza ridurre le prestazioni del descrittore.

Capitolo 5

OpenCV
5.1

Introduzione

La Open Source Computer Vision Library una libreria scritta in C e C++,


costituita da oltre 500 funzioni utili nel campo dellimage processing e della
computer vision. Punti di forza della libreria sono la completezza e il suo essere
open source: il fatto di essere liberamente distribuita garantisce sicurezza al
codice e la possibilit di apportare modifiche al codice stesso, assicurandone
cos una continua evoluzione; la portabilit della libreria OpenCV completa,
sono infatti disponibili le versioni per i sistemi MS-Windows, Linux, BSD, Unix
e MacOSX.
La licenza di distribuzione priva di royalty e ci consente il suo utilizzo
anche in prodotti commerciali a condizione di mantenere le note di copyright.
OpenCV costituisce quindi una infrastruttura aperta e gratuita, compatibile con
la Intel Image Processing Library (IPL). Questultima una libreria non open
source che esegue solo operazioni di image processing e dalla quale OpenCV ha
ereditato originariamente alcune strutture dati.

5.2

Organizzazione della libreria

La libreria strutturata in cinque sottolibrerie (dette anche moduli) ciascuna


con funzionalit specifiche:
Il modulo CXCORE quello principale nonch indispensabile. Contiene
le strutture dati di base con le rispettive funzioni di inizializzazione, le
funzioni matematiche, le funzioni di lettura, scrittura e memorizzazione
dati, le funzioni di sistema e di gestione degli errori.
Il modulo CV contiene le funzioni di gestione delle immagini/video (funzioni relative allimage processing, funzioni di analisi strutturale e del
moto, di object detection e ricostruzione 3D).
HIGHGUI contiene sia le funzioni GUI (es. gestione delle finestre) sia
funzioni di salvataggio e caricamento immagini, nonch le funzioni di
acquisizione video e di gestione delle telecamere.

79

CAPITOLO 5. OPENCV

80

Il modulo ML (Machine Learning) contiene funzioni di classificazione e


clustering di dati (es. reti neurali).
Infine vi il modulo CVAUX che contiene sia le funzioni basate su algoritmi ancora in fase di sperimentazione (il cui futuro quello di migrare
nel modulo CV) e sia le funzioni obsolete e quindi non pi supportate.
Le funzionalit di tale modulo sono rivolte alla corrispondenza stereo, al
tracking 3D, al riconoscimento degli oggetti (Eigen object).

Figura 5.1: Architettura della libreria

5.3

Convenzioni

Tutte le funzioni della libreria sono caratterizzate dal prefisso cv, mentre i nomi delle strutture hanno prefisso Cv (ad eccezione della IplImage, la quale
ereditata dalla libreria IPL).
Poich le funzioni operano con immagini e con matrici numeriche, le dimensioni seguono rispettivamente la convenzione larghezza-altezza (X, Y ) comune
nella grafica e lordine righe-colonne (R,C).
In genere i nomi delle funzioni hanno la forma cv<ActionName><Object>,
dove ActionName rappresenta lazione principale della funzione (ad esempio
cvCreate<Object>, cvRelease<Object>), mentre Object loggetto su cui avviene lazione (ad esempio cvReleaseImage). Altre funzioni assumono invece il
nome dellalgoritmo che implementano, ad esempio cvCanny.

5.4
5.4.1

Strutture Dati
CvArr

La maggior parte delle funzioni eseguono operazioni su strutture dati diverse


tra loro, come le immagini (IplImage), le matrici (CvMat) e le liste dinamiche
(CvSeq). Le funzioni che eseguono operazioni su questi tipi di dati ammettono
sempre un virtuale oggetto array CvArr.
La relazione esistente tra le strutture CvArr, cvMat e IplImage di tipo
object-oriented, dove la IplImage deriva dalla CvMat la quale a sua volta deriva
dalla CvArr.

CAPITOLO 5. OPENCV

5.4.2

81

IplImage

IplImage lacronimo di Image Processing Library Image, ossia il formato standard utilizzato da Intel per rappresentare unimmagine sia nelle API IPL sia in
OpenCV.
Tramite questa struttura dati possibile gestire completamente tutto ci
che ruota intorno alle immagini, come: caricamento e salvataggio, conversione
di formato, elaborazione, filtraggio e visualizzazione.
La struttura definisce sia immagini con origine top-left che immagini avente
origine bottom-left, inoltre costituita dai seguenti campi che nel loro insieme
prendono il nome di image Header:
typedef s t r u c t IplImage {
int nSize ;
i n t ID ;
i n t nChannels ;
i n t alphaChannel ;
i n t depth ;
char colorModel [ 4 ] ;
char channelSeq [ 4 ] ;
i n t dataOrder ;
int origin ;
int align ;
i n t width ;
int height ;
s t r u c t IplROI r o i ;
s t r u c t I p l I m a g e maskROI ;
v o i d imageId ;
struct IplTileInfo tileInfo ;
int imageSize ;
c h a r imageData ;
i n t widthStep ;
i n t BorderMode [ 4 ] ;
i n t BorderConst [ 4 ] ;
c h a r imageDataOrigin ;
} IplImage ;

CAPITOLO 5. OPENCV

82

La libreria OpenCV, a differenza della IPL, utilizza solo alcuni campi della
struttura. Tra questi abbiamo:
nChannels che indica il numero di canali.
depth indica la profondit in bit. Per questultimo i valori possibili sono:
IPL_DEPTH_8U intero a 8-bit unsigned.
IPL_DEPTH_8S intero a 8-bit con segno.
IPL_DEPTH_16S intero a 16-bit con segno.
IPL_DEPTH_16U intero a 16-bit senza segno.
IPL_DEPTH_32S intero a 32-bit con segno.
IPL_DEPTH_32F floating point a 32-bit.
IPL_DEPTH_64F floating point a 64-bit.
dataOrder ordine di memorizzazione dei canali
IPL_DATA_ORDER_PIXEL memorizza RGB per ogni pixel.
IPL_DATA_ORDER_PLANE memorizza prima gli R di tutti i
pixel, poi tutti i G e poi tutti i B.
origin indica lordine con cui sono memorizzate le coordinate dellimmagine
IPL_ORIGIN_TL (oppure valore 0) quando lorigine delle coordinate top-left.
IPL_ORIGIN_BL (oppure valore 1) quando lorigine bottom-left.
width e height indicano rispettivamente lampiezza e laltezza in pixel dellimmagine.
struct IplROI* roi specifica una regione dellimmagine da elaborare (Region
Of Interest).
mageSize contiene le dimensioni in bytes dellintera immagine.
imageData puntatore alla prima riga dei dati dellimmagine (pixel).
widthStep distanza (espressa in byte) tra i punti della stessa colonna, ma di
righe adiacenti.
La funzione che consente di creare e allocare unimmagine la seguente:
cvCreateImage(CvSize size, int depth, int channels);
Il parametro size permette di assegnare le dimensioni relative allampiezza e
allaltezza, il parametro depth assegna la profondit in bit ed infine channels
che assegna il numero di canali.
Ad esempio, volendo allocare unimmagine (img) di dimensione 640 ? 320
con profondit a 8-bit con un solo canale, possiamo scrivere:
CvSize size = cvSize(640, 320);
IplImage* img = cvCreateImage(size, IPL_DEPTH_8U, 1);

CAPITOLO 5. OPENCV

83

La struttura CvSize quindi costituita da due membri di tipo intero utili per
definire le dimensioni, espresse in pixel, dellimmagine. La funzione costruttore
corrispondente :
cvSize(int width, int height);
e laccesso ai campi si ottiene tramite loperatore punto (.)
size.width = 640; size.height = 320;

5.4.3

CvScalar

Per poter operare con valori scalari si utilizza la struttura dati CvScalar dove
lunico membro un array costituito da quattro elementi di tipo double. La
struttura pu essere utilizzata non solo per le usuali operazioni aritmetiche, ma
anche nelle operazioni di accesso ai singoli pixel di una immagine. In particolare
la funzione:
cvScalar(double val0, double val1 = 0, double val2 = 0, double val3 = 0);
consente di assegnare da uno a quattro valori ai corrispondenti elementi del
membro val[ ] mediante una dichiarazione del tipo:
CvScalar scalar = cvScalar(val0, val1, val2, val3);
Laccesso a un elemento si ottiene con lusuale operatore punto:
scalar.val[i]; i = 0, 1, 2, 3

5.5

Spazi di colore

OpenCV in grado di gestire numerosi spazi colore, consentendo il passaggio


da uno spazio allaltro tramite la funzione:
void cvCvtColor(const CvArr* src,CvArr* dst, int code);
Le due immagini src e dst devono essere dello stesso tipo (8U, 16U e 32F) ma
possono avere differente numero di canale. Il parametro code specifica il tipo di
conversione che deve essere eseguita utilizzando lespressione
CV_<spazio colore sorgente>2<spazio colore destinazione>.
Ad esempio, con il codice di conversione CV_RGB2GRAY la funzione converte
unimmagine a colori (RGB) in una a toni di grigio. Le intensit dellimmagine
a toni di grigio sono calcolate secondo la formula:
Y = (0.299)R + (0.587)G + (0.114)B
Viceversa, nella conversione di unimmagine a toni di grigio in una a colori
(CV_GRAY2RGB) le componenti sono prese tutte con lo stesso valore:
R = Y, G = Y, B = Y

CAPITOLO 5. OPENCV

5.6

84

Accesso ai pixel

Si possono modificare i valori di intensit dei singoli pixel utilizzando due metodi
classificabili come: metodo indiretto e metodo diretto.

5.6.1

Metodo indiretto

Questo metodo si basa sullutilizzo di due funzioni: cvGet2D e cvSet2D.


1. La prima restituisce il valore di uno specifico pixel
CvScalar cvGet2D(const CvArr* arr, int idx0, int idx1);
Il parametro arr limmagine da modificare, mentre idx0 e idx1 sono
le coordinate relative allo specifico pixel. Per unimmagine con un solo
canale lintensit del pixel di coordinate (i, j) si ottiene come:
CvScalar scalar = cvGet2D(img, i, j);
scalar.val[0];
scalar.val[1];
scalar.val[2];
Ovviamente, per un immagine ad un solo canale ci fermeremo solo al primo
valore dello scalare.
2. La modifica del valore di un pixel si effettua invece tramite la funzione
void cvSet2D(CvArr* arr, int idx0, int idx1, CvScalar value);
dove value rappresenta il nuovo valore da assegnare al pixel. In definitiva,
per assegnare uno specifico valore al pixel di coordinate (i, j) si fa:
CvScalar scalar; scalar.val[0] = valore pixel; cvSet2D(img, i, j, scalar);

5.6.2

Metodo diretto

Questo metodo consiste nella manipolazione diretta di alcuni campi della struttura IplImage. Unimmagine pu essere rappresentata come una matrice di
dimensioni width x height: OpenCV la gestisce come un array monodimensionale, ossia le righe sono allineate una dopo laltra. Per poter indicizzare larray
immagine si utilizza il campo widthStep (che contiene le dimensioni in bytes relative al passo con il quale le righe sono allineate). Il campo widthStep contiene
quindi il numero di bytes necessari per passare dal pixel di coordinate (R, C)
al pixel (R + 1, C) della matrice. Per unimmagine ad un solo canale lindice
dellarray dato da:
i widthStep + j
con i [0, height 1] e j [0, widht 1]
Ad esempio considerando unimmagine a toni di grigio di ampiezza width = 3
e altezza height = 4, larray immagine sar del tipo:

CAPITOLO 5. OPENCV

85

In questo modo il valore 7, che corrisponde allelemento contenuto in posizione


(2, 1) nella matrice di ordine 3 x 4, individuato dallindice di valore 2 4 + 1
nellarray immagine. Inoltre, essendo ogni riga della matrice allineata con passo
widthStep si possono avere dei gap (P) tra la fine della riga i-esima e linizio
della riga (i+1)-esima. Per unimmagine multicanale lindice dellarray diventa:
i widthStep + j nChannels + k
dove k [0, nChannels 1]
Ad esempio, per unimmagine a 8 bit unsigned e con un solo canale conveniamo
nellassegnare i seguenti campi
i n t h e i g h t = img>h e i g h t ;
i n t width = img>width ;
i n t s t e p = img>widthStep ;
uchar data = ( uchar ) img>imageData ;
( p u n t a t o r e a l v e t t o r e che c o n t i e n e i d a t i )

( byte p e r una r i g a )

Laccesso ai pixel (i, j) si ottiene come


f o r ( i n t i = 0 ; i < h e i g h t ; i + +)
f o r ( i n t j = 0 ; j < width ; j + +)
data [ i s t e p + j ] =p i x e l _ v a l u e ;
Nel caso di unimmagine multicanale necessario utilizzare, oltre ai campi
precedenti, anche il campo nChannels:
i n t c h a n n e l s = img>nChannels ;

( e s . 0 p e r Red , 1 p e r Green , 2 p e r Blu )

e laccesso ai pixel si ottiene come:


f o r ( i n t i = 0 ; i < h e i g h t ; i + +);
f o r ( i n t j = 0 ; j < width ; j + +);
f o r ( i n t k = 0 ; k < nChannels ; k + +);
data [ i s t e p + j c h a n n e l s + k ] =p i x e l _ v a l u e ;

Potrebbero piacerti anche