Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
12
12
13
14
15
15
16
16
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
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
2. Quantizzazione: ogni campione ottenuto dallimmagine ha una profondit di colore che continua. Tramite la quantizzazione rappresentiamo i
6
CAPITOLO 2. ACQUISIZIONE
2.2
Aliasing
2.3
Risoluzione
CAPITOLO 2. ACQUISIZIONE
2.4
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.
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
Capitolo 3
Introduzione
..
..
..
..
..
..
..
.
.
.
.
.
.
.
..
..
..
..
..
..
..
.
.
.
.
.
.
.
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
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
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.
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
255
Gmax Gmin
Pout
3.2.4
Gmin
= (Pin Gmin )
0
Gmax
14
G0min
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.
3.2.5
15
Modificare la luminosit
3.2.6
Thresholding
(
Ibinaria (x) =
16
3.3
3.3.1
Operatori Locali
Operatori Morfologici
17
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
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.
1 1 1
1 1 1
1 1 1
Consideriamo sempre il kernel precedente, possiamo notare gli effetti della
dilatazione si un immagine binaria:
19
20
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:
22
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.
23
1 1
1 0
1 0
1 1
0 1
0 1
Iterando 100 volte loperatore otteniamo:
24
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.
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
K12
K22
K13
K23
26
1
9
1
9
1
9
1
9
1
9
1
9
..
.
. . .
. . .
. . .
..
.
..
..
..
.
.
.
124 126 127
120 150 125
115 119 123
..
..
..
.
.
.
.
. . .
. . .
. . .
..
.
..
27
Figura 3.2: Effetto del filtro di media con kernel 3x3 sullimmagine degradata
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
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 .
G(x) =
x
1 e 22
2
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;
30
1
kmin
k2 = round(k1 ) k2 =
1
sum(k)2 k2
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
31
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:
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
33
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]
DoG(x, , 1 , 2 ) =
e
2
(x)2
2
21
34
e
2
(x)2
2
22
35
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.
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
Capitolo 4
Sogliatura
4.1.1
38
#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.
39
40
4.1.2
41
Evidenziare listogramma
4.1.3
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
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
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
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
4.2.3
1
1
1
1
8
1
44
1
1
1
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
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.
46
4.2.4
..
..
..
..
.
.
.
.
. . . 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.
0
1
1
0
0
1
47
48
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.
49
50
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
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.
51
q
G2x + G2y
= 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 :
52
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
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.
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
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
55
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
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
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.
57
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
4.3.3
59
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).
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
61
4.4
62
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.
63
4.4.1
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:
64
x,y
Ix Ix
Ix Iy
Ix Iy
Iy Iy
u
v
In questo modo abbiamo ottenuto, per piccole variazioni di [u, v] una approssimazione lineare:
65
u
v
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)
67
4.5
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.
68
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
69
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
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:
70
4.6.1
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
71
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.
72
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
73
74
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.
75
4.6.2
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.
76
77
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.
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
Capitolo 5
OpenCV
5.1
Introduzione
5.2
79
CAPITOLO 5. OPENCV
80
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
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
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
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
( byte p e r una r i g a )