studio e sperimentazione - Corso di Studi in Ingegneria dell

Transcript

studio e sperimentazione - Corso di Studi in Ingegneria dell
UNIVERSITÀ DEGLI STUDI DI ROMA
TOR VERGATA
FACOLTÀ DI INGEGNERIA
CORSO DI LAUREA IN INGEGNERIA INFORMATICA
AUTOMAZIONE INDUSTRIALE
A.A. 2002/2003
Tesi di Laurea
TELECAMERE LOG-POLAR
STUDIO E SPERIMENTAZIONE
RELATORE
CANDIDATO
Ing. Luca Zaccarian
Riccardo Ceccarelli
2
Indice
I
Telecamere e image processing
8
1 Telecamere e analisi spaziale
9
1.1
La telecamera e l’acquisizione dell’immagine . . . . . . . . . . . . . .
9
1.2
Proprietà delle immagini rettangolari . . . . . . . . . . . . . . . . . .
11
1.2.1
Traslazioni e rotazioni . . . . . . . . . . . . . . . . . . . . . .
12
1.2.2
Connettività . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
La trasformazione di prospettiva . . . . . . . . . . . . . . . . . . . . .
17
1.3.1
21
1.3
Introduzione alla stereoscopia . . . . . . . . . . . . . . . . . .
2 Tecniche di processamento dell’immagine
2.1
2.2
24
Istogramma di una immagine . . . . . . . . . . . . . . . . . . . . . .
24
2.1.1
Cenni sulla tecnica di equalizzazione . . . . . . . . . . . . . .
24
2.1.2
Richiami di calcolo delle probabilità . . . . . . . . . . . . . . .
27
2.1.3
Tecniche di filtraggio . . . . . . . . . . . . . . . . . . . . . . .
29
Riconoscimento di rette . . . . . . . . . . . . . . . . . . . . . . . . . .
33
2.2.1
36
Operatore di Laplace . . . . . . . . . . . . . . . . . . . . . . .
3 Analisi frequenziale
3.1
Rappresentazione nello spazio delle frequenze
3.1.1
INDICE
38
. . . . . . . . . . . . .
38
Trasformata di Fourier . . . . . . . . . . . . . . . . . . . . . .
38
3
INDICE
II
3.1.2
Calcolo della DFT inversa . . . . . . . . . . . . . . . . . . . .
42
3.1.3
Come calcolare la DFT . . . . . . . . . . . . . . . . . . . . . .
43
3.1.4
Analisi di immagini . . . . . . . . . . . . . . . . . . . . . . . .
44
3.1.5
Applicazione della FFT nell’image processing . . . . . . . . .
48
3.1.6
STFT - Short Term Fourier Transform . . . . . . . . . . . . .
49
Telecamere Log-polar
4 Telecamere Retina-Like
63
64
4.1
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.2
Il sensore retina-like
. . . . . . . . . . . . . . . . . . . . . . . . . . .
66
4.3
L’implementazione delle trasformate . . . . . . . . . . . . . . . . . . .
72
4.3.1
Da rettangolare a Log-polar . . . . . . . . . . . . . . . . . . .
72
4.3.2
Da Log-polar a rettangolare . . . . . . . . . . . . . . . . . . .
76
Conclusioni sull’utilizzo degli algoritmi matlab . . . . . . . . . . . . .
77
4.4
5 ROBOT CICLOPE
78
5.1
Descrizione generale
. . . . . . . . . . . . . . . . . . . . . . . . . . .
78
5.2
Le parti costitutive di CICLOPE . . . . . . . . . . . . . . . . . . . .
79
5.3
Algoritmo di riconoscimento e legge di controllo per l’inseguimento del
bersaglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Conclusioni
INDICE
90
103
4
Introduzione
L’attuale ricerca tecnico-scientifica è orientata verso una maggiore interazione tra
macchina e ambiente. Normalmente la capacità di un robot di sapersi districare nel
mondo reale è proporzionale all’informazione che riesce ad avere da quest’ultimo, quindi dalla quantità di sensori che possiede. Con il crescente avanzamento della ricerca,
combinato con tecniche di fabbricazione di telecamere sempre meno costose, un ruolo
fondamentale è rivestito dalla visione e dalla sua elaborazione. Munire un robot di
sensori visivi permette un’interazione con l’ambiente che non prevede il contatto fisico
con quest’ultimo; se, per esempio, supponiamo di dover costruire un automa in grado di muoversi in un ambiente a lui ostile per la presenza di ostacoli, sarà possibile,
grazie all’uso di telecamere, determinare una traiettoria ancor prima di muoversi e
quindi di venire in contatto fisico con gli ostacoli stessi. Come vedremo tra breve la
qualità dell’immagine è proporzionale alla densità di sensori che la telecamera mette
a disposizione. Le telecamere comunemente in commercio presentano la medesima
definizione di tutte le parti della scena ritratta. Questo implica grandi quantità di
dati da dover elaborare, fatto non molto pratico per le applicazioni in tempo reale e
soprattutto per robot mobili caratterizzati da una scarsa capacità computazionale. Si
illustrerà quindi una particolare categoria di sensori ottici chiamati log-polar che ha la
caratteristica di avere una distribuzione dei fotorecettori non uniforme. Quest’ultima
particolarità, nel caso studiato, porta ad avere immagini molto definite in un punto
INDICE
5
INDICE
e sempre meno, a mano a mano che ce ne si allontana. Queste telecamere prendono anche il nome di retina-like. Come il nome stesso suggerisce, riescono a simulare
abbastanza bene il concetto di percezione visiva animale.
Nella prima parte si introdurrà il lettore ai concetti chiave dell’image processing. In
particolar modo si daranno le basi per meglio comprendere le varie fasi di elaborazione
delle immagine da quando sono acquisite a quando vengono processate. In quest’ottica
si darà la definizione d’immagine e la sua formalizzazione matematica. Verranno
poi illustrate alcune operazioni possibili per rendere l’immagine appena acquisita di
più facile utilizzo: equalizzazione e media degli intorni. Anche dette tecniche di
filtraggio. In seguito verranno esposti gli algoritmi di analisi per la ricerca di rette o
più in generale discontinuità cromatiche. Per completare quest’introduzione, è stata
illustrata l’analisi frequenziale applicata all’immagini. Tale capitolo illustra il concetto
di DFT e STFT applicato a segnali monodimensionali e poi, alle immagini.
Nella seconda parte si entrerà nel vivo dell’argomento di questa tesi: le telecamere
log-polar. Si analizzerà la geometria del sensore e le sue proprietà mettendone in risalto
le caratteristiche e i vantaggi rispetto a telecamere “classiche”. Una volta definito come
il sensore è costituito e quali sono le relazioni che legano la rappresentazione classica
a quella log-polar, si spiegherà come implementare un emulatore che acquisisca le
immagini con una comune web-cam e le trasformi nel formato log-polar. Alla stessa
maniera si realizzerà un algoritmo che trasformi l’immagine log-polar, di non facile
interpretazione, in una più comprensibile: Inverse Log-polar Transform. Per mettere
in risalto i vantaggi nell’utilizzo di telecamere retina-like si è riportato, nell’ultima
parte di questa relazione, una descrizione dettagliata delle fasi costruttive e degli
algoritmi implementati per la creazione di un robot che fosse in grado di inseguire,
con lo sguardo, un bersaglio mobile. Particolare attenzione è stata posta nel mettere
INDICE
6
INDICE
in risalto i pregi e i difetti nell’utilizzo di queste telecamere di nuova concezione.
INDICE
7
Parte I
Telecamere e image processing
8
Capitolo 1
Telecamere e analisi spaziale
1.1
La telecamera e l’acquisizione dell’immagine
Al fine di poter rappresentare il mondo circostante attraverso mezzi elettronici, abbiamo bisogno di dispositivi di trasduzione di grandezze reali, la luce, in grandezze
elettriche. Il principio sul quale si basa la telecamera è proprio quello appena esposto:
trasformare attraverso particolari recettori, (fotorecettori), la luce riflessa o emessa
dall’ambiente in segnali elettrici proporzionali.
Definizione 1.1.1 Si definisce immagine la distribuzione spaziale della luminosità.
Approfondendo la struttura del sensore, possiamo pensarlo come una matrice di
fotorecettori ognuno univocamente determinato da una coppia di valori x e y , dove
il primo indica l’ascissa e la seconda coordinata indica l’ordinata che cresce in verso
opposto al verso convenzionale (vd. fig. 1).
Possiamo infine definire l’immagine come una funzione di due variabili nel seguente
modo:
E(x0 , y0 ) = e(ρ)
(1.1)
dove e(ρ) indica l’intensità luminosa-elettrica associata al punto ρ = (x0 , y0 ).
CAP. 1 Telecamere e analisi spaziale
9
§1.1 La telecamera e l’acquisizione dell’immagine
Figura 1.1: Funzionamento di un sensore a fotorecettori
In forma matriciale un’immagine di dimensione m*n può essere scritta:


e(x1 , y1 ) e(x1 , y2 ) . . . e(x1 , yn )
 e(x2 , y1 ) e(x2 , y2 ) . . . e(x2 , yn ) 


E(x, y) = 

..
..
.
.
..
..


.
.
e(xm , y1 ) e(xm , y2 ) . . . e(xm , yn )
Definizione 1.1.2 Il Pixel1 o pel è il singolo elemento della matrice E(x).
Per precisione bisogna ricordare che il pixel non rappresenta un singolo punto dell’immagine , ma una regione alla quale viene associata un valore medio dell’irraggiamento
subìto da un insieme di fotorecettori.Questo indica che l’immagine può essere più o
meno definita a seconda di quanti fotorecettori vengono impiegati per definire ogni
singolo pixel. Supponendo di avere un sensore di 256 × 256 fotorecettori, è possibile
ottenere una foto con risoluzione 256×256 pixel (massima risoluzione) oppure ad ogni
pixel possiamo assegnare un area di 128 × 128 pixel ottenendo così una foto di 2 × 2
pixel (pessima qualità). Questo vorrebbe dire che ad ogni pixel viene attribuita la
media dell’intensità di 16384 fotorecettori, ovvero 128 × 128.
1
Pixel è il diminutivo di picture element.
CAP. 1 Telecamere e analisi spaziale
10
§1.2 Proprietà delle immagini rettangolari
Per il momento non ci siamo occupati di come il segnale luminoso, una volta
trasformato in elettrico, venga poi registrato. Questo problema introduce il concetto
di quantizzazione o discretizzazione del segnale luminoso.
Dovendo registrare l’immagine all’interno di memorie digitali il segnale ottenuto
per trasduzione deve essere quantizzato ovvero i valori che l’intensità può assumere
non appartengono ad un insieme continuo ma possono essere solo alcuni. Generalmente si assegna ad ogni pixel un certo spazio nella memoria;2 tutte le combinazioni
che possono essere formate con quei bit3 rappresentano tutte le possibilità di livelli
d’intensità che possono essere attribuiti al pel. Per chiarire meglio il concetto facciamo un esempio: supponiamo di voler assegnare ad ogni singolo pixel una codifica
di 8 bit. Questo vuol dire che il colore bianco è codificato con la sequenza 00000000
| {z }
8bit
mentre il nero con 11111111
| {z }.
8bit
Queste sono solo 2 delle 256 possibili combinazioni4 ; questo vuol dire che ogni singolo
pixel è in grado di codificare 256 livelli di grigi (nel caso l’immagine sia in bianco e
nero).
Un discorso analogo può essere fatto per le immagini a colori.
Nel resto di questa relazione, se non verrà esplicitamente detto, si farà sempre
riferimento a immagini in bianco e nero.
1.2
Proprietà delle immagini rettangolari
Una volta acquisita l’immagine, ovvero conservata nella memoria, potrebbe essere
necessario doverla modificare in alcune sue caratteristiche. Nei successivi paragrafi
verranno illustrate le tecniche classiche di elaborazione dell’immagine, finalizzate ad
2
Generalmente vengono impiegate potenze di 2
Unità di memoria
4
Le possibili combinazioni sono 28 = 256
3
CAP. 1 Telecamere e analisi spaziale
11
§1.2 Proprietà delle immagini rettangolari
una migliore comprensione delle medesime operazioni nelle immagini log-polar.5
In particolare si vuole portare l’attenzione al concetto di connettività tra pixel ,
spiegato successivamente, non tanto per le applicazioni su foto ricavate da sensori
rettangolari, quanto per l’importanza che esso riveste nelle immagini log-polar.
1.2.1
Traslazioni e rotazioni
Un problema ricorrente in applicazioni robotiche è quello di conoscere le relazioni che
intercorrono tra due sistemi di riferimento in moto relativo, nel caso di applicazioni
visive può essere di fondamentale importanza scoprire quali relazioni descrivono le
coordinate iniziali e finali di un pixel a seguito di una traslazione, rotazione o la
composizione delle due.
Figura 1.2: Rappresentazione grafica delle coordinate di un punto P appartenente ad
un corpo che ha subito una traslazione rispetto ad un sistema di riferimento fisso.
5
È il nome con il quale si designano le immagini acquisite da telecamere retina-like
CAP. 1 Telecamere e analisi spaziale
12
§1.2 Proprietà delle immagini rettangolari
Traslazioni. Scelto un punto di una foto di coordinate (X, Y, Z) (nel nostro caso
Z=0)(1.2) e volendolo traslare rispetto a X di X0 e rispetto a Y di Y0 ,le coordinate
del nuovo punto saranno:
X ∗ = X + X0
Y ∗ = Y + Y0
(1.2)
Z ∗ = Z + Z0
dove (X ∗ , Y ∗ , Z ∗ ) sono le coordinate finali del pixel traslato.
La matrice che lega le coordinate di partenza con quelle traslate è:


1 0 0 X∗
 0 1 0 Y∗ 

T =
 0 0 1 Z∗ 
0 0 0 1
(1.3)
La rappresentazione matriciale appena esposta si basa sull’uso di coordinate omogenee, questo avviene non solo per le note proprietà geometriche degli spazi prospettici
ma anche per una più semplice rappresentazione notazionale, usando in questo modo
solo matrici quadrate. Indicando con q il vettore delle coordinate omogenee finali
e con q quello inerente a quelle iniziali, possiamo scrivere qualsiasi traslazione nel
seguente modo:
q∗ = T q
.
Rotazioni. In maniera del tutto analoga si possono determinare le equazioni che
definiscono le relazioni iniziali e finali di un pixel in rapporto alla rotazione di uno
degli assi(figura 1.3).
Nel caso di un’immagine bidimensionale, può risultare utile conoscere la matrice
di rotazione rispetto all’asse Z, ovvero quello perpendicolare al piano della figura :
CAP. 1 Telecamere e analisi spaziale
13
§1.2 Proprietà delle immagini rettangolari
Figura 1.3: Rappresentazione grafica delle coordiante di un punto P appartenente ad
un corpo che ha ruotato rispetto al sistema di riferimento fisso.


cos θ
sin θ 0 0
 − sin θ cos(θ) 0 0 

R=

0
0
1 0 
0
0
0 1
(1.4)
Indicando con q il vettore delle coordinate omogenee finali e con q quello inerente a
quelle iniziali, possiamo scrivere qualsiasi rotazione nel seguente modo:
q∗ = R q
.
Componendo le matrici T e R è possibile ottenere una qualsivoglia trasformazione
di coordinate.
Un buon modo di operareè quello di scomporre la trasformazione in una sequenza
CAP. 1 Telecamere e analisi spaziale
14
§1.2 Proprietà delle immagini rettangolari
di operazioni elementari (rotazioni e traslazioni), partendo dalla posizione ed orientamento iniziale per arrivare a quello finale e quindi comporre i singoli movimenti
rispettando le regole del prodotto matriciale (non gode di commutatività).
1.2.2
Connettività
Il concetto di connettività è strettamente legato a quello di pixel ovvero ne è una sua
proprietà. Un sinonimo di tale concetto è l’ adiacenza tra pixel. Come vedremo tra
poco, per poter lavorare sulle immagini è necessario saper lavorare su insiemi di pixel.
Questo implica una conoscenza dettagliata su come questi sono interconnessi tra di
loro.
Figura 1.4: (a) Disposizione di pixel. (b) 8-vicini del pixel identificato con “2” . (c)
m-vicini dello stesso pixel.
Se consideriamo un’immagine rettangolare, scelto un generico pixel p = (x, y)
non appartenente al bordo, si possono subito determinare quattro vicini orizzontali e
verticali, le cui coordinate sono
(x + 1, y) (x − 1, y) (x, y + 1) (x, y − 1)
questi vengono chiamati i 4-vicini del pixel (x, y), l’insieme dei quattro elementi si
denota con N4 (p).
CAP. 1 Telecamere e analisi spaziale
15
§1.2 Proprietà delle immagini rettangolari
Analogamente possono essere definiti i quattro vicini diagonali del pixel (x, y), di
coordinate
(x + 1, y + 1) (x − 1, y + 1) (x + 1, y − 1) (x − 1, y − 1)
Possiamo definire allora gli 8-vicini e denominare il loro insieme N8 (p), cioè l’unione
dei dei 4-vicini e i 4-diagonali.
Ora che abbiamo definito i vicini di un pixel, possiamo analizzare il concetto
di connettività. Supponiamo di definire un insieme V che rappresenti i valori di
luminosità di pixel che vogliamo collegare tra loro (es. V = 55, 56, 57, possiamo
collegare tra loro solo i pixel che hanno uno di quei valori). Possiamo quindi definire
tre tipi di connettività:
• 4-connettività. Due pixel p e q di valore tale da appartenere a V sono 4-connessi
se q è nell’insieme N4 (p)
• 8-connettività. Due pixel p e q di valore tale da appartenere a V sono 8-connessi
se q è nell’insieme N8 (p)
• m-connettività(connettività mista).Due pixel p e q con valori da V sono mconnessi se:
– q è in N4 (p), oppure
– q è in ND (p)(4-diagonali) e l’insieme N4 (p)
T
N4 (q) è vuoto. (Questo è
l’insieme di pixel che sono 4-vicini sia di p che di q e i cui valori sono di V.)
Analizzando insieme le definizioni appena date, possiamo fare alcune considerazioni:
CAP. 1 Telecamere e analisi spaziale
16
§1.3 La trasformazione di prospettiva
• Sia la definizione di 4-connettività che quella di 8-connettività indicano semplicemente che il pixel q è interconesso con il pixel p se, nel caso di immagine
rettangolare, si trova negli otto pixel intorno a p
• Il concetto di m-connettività risulta a prima vista di non immediata comprensione. Se analizzato con attenzione, esprime semplicemente una condizione in
più: quella di evitare le connessioni multiple tra pixel.
Risulta a questo punto evidente definire che due pixel sono adiacenti quando sono
connessi fra loro.
1.3
La trasformazione di prospettiva
La trasformazione di prospettiva proietta punti 3D su un piano. Questa operazione è
molto importante perchè ci dice quanto il mondo reale viene approssimato dalla telecamera ovvero quanto incide il concetto di profondità nell’acquisizione dell’immagine
e quanto da quest’ultima è possibile risalire al mondo reale.
Per capire meglio il concetto di trasformazione di prospettiva facciamo un esempio.
Supponiamo di avere (come si vede in figura) il fuoco della lente della telecamera ad
una distanza λ dal piano dell’immagine (piano dei fotorecettori). Definendo i centri
del sistema di riferimento dell’ immagine e quello del mondo circostante coincidenti
nel centro del piano di acquisizione, noteremo che ogni punto dello spazio di coordinate (X, Y, Z) viene proiettato sul piano di formazione della telecamera , per le note
leggi dell’ ottica, attraverso la congiungente che unisce il punto (X, Y, Z) con il centro
della lente fino all’intersezione con i fotorecettori nel pixel (x, y).
La prima cosa che possiamo ricavare è la relazione che lega le coordinate spaziali
CAP. 1 Telecamere e analisi spaziale
17
§1.3 La trasformazione di prospettiva
y, Y
Piano dell' immagine
x, X
(X, Y, Z)
z, Z
Centro della lente
(x,y)
Figura 1.5: Schematizzazione su come un punto spaziale viene acquisito dalla telecamera attraverso il fuoco dell’obbiettivo e successiva proiezione sul piano
dell’immagine.
con quelle dell’immagine; si possono sfruttare le similitudini tra i triangoli per ricavare
che:
Xλ
λ−Z
Y :λ
y=
λ−Z
x=
(1.5)
(1.6)
Definiamo ora “coordinate omogenee” di un punto (X, Y, Z) come (kX, kY, kZ, k),
dove k è una costante arbitraria diversa da zero. Volendo esprimere in maniera
matriciale il tutto, potremmo definire:
CAP. 1 Telecamere e analisi spaziale
18
§1.3 La trasformazione di prospettiva


X
w= Y 
(1.7)
Z


kX
 kY 

wh = 
(1.8)
 kZ 
k
dove w indica le coordinate del punto e wh le coordinate omogenee associate.
Definiamo ora la MATRICE DI TRASFORMAZIONE DI PROSPETTIVA


1 0 0 0
 0 1 0 0 

P =
 0 0 1 0 
0 0 − λ1 1
(1.9)
in questo modo
P wh = c h
; dove ch rappresenta il vettore che ha le coordinate omogenee della telecamera.


kX


kY

(1.10)
ch = 


kZ
+k
− kZ
λ
il quarto elemento di quest’ultimo vettore prende il nome di fattore di scala.
Per ottenere le coordinate reali dividiamo, come facilmente si può vedere dalla
definizione di omogeneità, tutti i termini che lo compongono per il quarto componente
del vettore ch , ottenendo così

 
x
c= y =
z
λX
λ−Z
λY
λ−Z
λZ
λ−Z


che altro non sono che le equazioni (7) e (8) precedentemente ricavate per via geometrica.
CAP. 1 Telecamere e analisi spaziale
19
§1.3 La trasformazione di prospettiva
La terza componente, come vedremo a breve, rappresenta la dipendenza della
trasformazione dalla profondità nell’ambiente 3D. In altre parole, la trasformazione di prospettiva è una funzione NON BIUNIVOCA, ovvero ci permette, noto che
sia un punto nello spazio reale ,di trovare il suo corrispondente punto nel piano
dell’immagine; ma non il suo contrario.
Per dimostrare quest’ultima asserzione supponiamo di avere
 unpixel di coordinate
kx0
 ky0 

(x0 , y0 , z0 ), a questo corrisponde il vettore omogeneo ch = 
 0 
k


x0
e quindi w =  y0  ricordando che w è il vettore che rappresenta il punto nello
0
spazio 3D. Come è facilmente visibile z = 0 per qualsiasi punto 3D.
y, Y
Piano dell' immagine
x, X
retta di tutti i possibili punti che
soddisfano la trasformazione
prospettica inversa
z, Z
Centro della lente
(x0,y0)
Figura 1.6: Rappresentazione del problema connesso alla non unicità della
determinazione della profondità.
Questo vuol dire che il punto dell’immagine (x0 , y0 ) corrisponde all’insieme di punti
3D allineati che giacciono sulla retta che passa per (x0 , y0 , 0) e (0, 0, λ).
Possiamo quindi ricavare le coordinate 3D applicando le relazioni precedentementi
CAP. 1 Telecamere e analisi spaziale
20
§1.3 La trasformazione di prospettiva
trovate:
x0
(λ − Z)
λ
y0
Y = (λ − Z)
λ
X=
dimostrando che, a meno della conoscenza di Z, non è possibile determinare le coordinate spaziali di un punto del piano dell’immagine.
1.3.1
Introduzione alla stereoscopia
Tra le tecniche per ricavare informazioni 3D da immagini bidimensionali, quella “stereoscopica” è una delle più usate e facilmente dimostrabili, viste le relazioni precedentemente dimostrate.
Come abbiamo visto, a meno della conoscenza di Z la trasformazione prospettica
inversa è ad un grado di libertà: ammette cioè infinite soluzioni. Vediamo ora una
tecnica che sfrutta la conoscenza di due punti di vista per lo stesso punto da osservare,
al fine di ricavarne la profondità nello spazio e quindi superare il limite precedentemente dimostrato.
Osservando la figura 1.7 e supponendo che le due telecamere, che osservano lo
stesso punto w abbiano i sistemi di riferimento perfettamente allineati tra di loro
e con quello generale, possiamo osservare il medesimo w rappresentato con i punti
(x1 , y1 ) e (x2 , y2 ) sui due piani dell’immagine. Se adesso volessimo ottenere, rispetto
ai due punti di vista, le coordinate X1 e X2 basterebbe applicare
x1
(λ − Z1 )
λ
x2
X2 = (λ − Z2 )
λ
X1 =
(1.11)
(1.12)
A prima vista sembrerebbe che ci si trovi in un caso del tutto analogo a quello
CAP. 1 Telecamere e analisi spaziale
21
§1.3 La trasformazione di prospettiva
Figura 1.7: Prospettiva di un sistema di visione stereoscopica
Figura 1.8: Vista in pianta di un sistema di visione stereoscopica
precedentemente riscontrato. Osservando la figura (stereo), ci si accorge che, per le
ipotesi precedentemente fatte (linea di base fissa e sistemi di riferimento allineati),
Z 1 = Z2 = Z
CAP. 1 Telecamere e analisi spaziale
22
§1.3 La trasformazione di prospettiva
e
X2 = X1 + B
che permettono di ricavare, con semplicissimi passaggi algebrici,
x2
(λ − Z) e X1 =
λ
λB
Z =λ−
x2 − x1
X1 + B =
x1
(λ
λ
− Z)
(1.13)
(1.14)
Quindi è possibile conoscere la profondità Z a partire dalla differenza di coordinate e
note la linea di base e la lunghezza focale λ.
CAP. 1 Telecamere e analisi spaziale
23
Capitolo 2
Tecniche di processamento
dell’immagine
2.1
2.1.1
Istogramma di una immagine
Cenni sulla tecnica di equalizzazione
L’acquisizone dell’immagine, come abbiamo visto nei primi paragrafi, risulta essere
una discretizzazione del segnale elettrico: quantizzazione o livelli di grigi. Ogni pixel,
compatibilmente con quelli che sono i possibili livelli d’intensità che può raggiungere,
assume un valore r (intensità luminosa) che è una variabile aleatoria: può assumere
diversi valori in maniera del tutto casuale, ovvero seguendo una funzione di densità
di probabilità (PDF). Per chiarire meglio il concetto di PDF si immagini di avere
una funzione che è in grado di fornire la probabilità che un determinato valore sia
assunto dalla variabile aleatoria. Ad esempio se supponiamo il classico “lancio del
dado” sappiamo, a meno che il dato non sia stato truccato, che la probabilità di
ottenere un determinato risultato (da 1 a 6) è uguale per ogni faccia: parleremo in
questo caso di PDF-equiprobabile.
Possiamo quindi ricavare alcune semplici ma fondamentali relazioni; chiamiamo f (r)
la PDF legata alla luminosità di un pixel e sappiamo che la probabilità che esso assuma
CAP. 2 Tecniche di processamento dell’immagine
24
§2.1 Istogramma di una immagine
un determinato valore di grigio (si suppone sempre un’immagine in bianco/nero con
una quantizzazione a 8 bit : Q = 256 livelli di grigi) è l con l < 1 dove l’unità
rappresenta la certezza della riuscita di trovare il valore atteso.
F (r) =
Q
X
f (r)
1 < Q < 256
(2.1)
r=1
F (r) è chiamata distribuzione.
Risulta quindi evidente che la probabilità che la variabile aleatoria r assuma uno di
tutti i possibili valori che può assumere è proprio l’unità:
F (r) =
Q
X
f (r) = 1
Q = 256.
(2.2)
r=1
È evidente come la distribuzione non sia nota a priori, ma sia normalmente ottenuta
attraverso delle misure. Ora se consideriamo la distribuzione della luminosità all’interno di un’immagine, bisognerà tener conto sia del valore assunto da r che dalla sua
posizione nella matrice. Possiamo quindi avere due casi ben distinti:
• una distribuzione così detta omogenea e in quel caso non c’è nulla di cui preoccuparsi; sappiamo che ritroveremo quel determinato valore di r con la stessa
probabilità in qualsiasi regione dell’immagine considerata.
• se invece la distribuzione dipende dalla posizione del pixel, in questo caso per
calcolare la PDF si ricorre ad un metodo semplificato ma molto efficace che è
quello della rappresentazione con istogramma.
Di questo ultimo metodo ci interesserà capire il suo funzionamento al fine di capire
qualche strategia per la risoluzione di alcune tipiche problematiche legate alla preelaborazione dell’immagine.
Un istogramma di un’ immagine è un vettore che ha una componente per ogni livello
CAP. 2 Tecniche di processamento dell’immagine
25
§2.1 Istogramma di una immagine
di quantizzazione. Ogni componente corrisponde al numero di pixel che hanno come
valore di luminosità quello che rappresenta tale elemento del vettore.
L’istogramma è quindi un modo per visualizzare come sono distribuite le varie
Figura 2.1: Istogramma di una foto scura e di una chiara
tonalità di grigio all’interno dell’immagine. Come esempi riportiamo due casi limite
(vd. fig. 2.1): il primo vorrebbe dire che l’immagine è sicuramente scura ed ha molte
sfumature del nero; il secondo rappresenta unìmmagine chiara con molte sfumature
sul bianco. Quello che a noi interessa, ai fini delle applicazioni robotiche, è riuscire
ad avere immagini che abbiano istogrammi il più possibile bilanciati. Usando una
terminologia fotografica potremmo dire che vogliamo evitare fotogrammi “sparati” o
“controluce” o “bui”.
CAP. 2 Tecniche di processamento dell’immagine
26
§2.1 Istogramma di una immagine
Questa necessità è dettata dal fatto che sono poche le applicazioni robotiche che
usano telecamere in condizioni di luminosità pressocchè stazionarie, quindi l’esigenza di migliorare l’immagine è una necesità per poter lavorare su quest’ultima con
successivi algoritmi (es. ricerca delle rette).
Tralasciando l’analisi statistica ed in particolare quella legata alle funzioni di variabili aleatorie, portiamo l’attenzione su una trasformazione dell’immagine che lega
ogni rk (Intensità luminosa del k-esimo pixel) della figura di partenza in un sk = T (rk )
definito nel seguente modo:
sk = T (rk ) =
k
X
nj
j=0
n
=
k
X
f (rj )
(2.3)
j=0
indicando con nj il numero di volte che questa intensità appare nell’immagine e con n
il numero complessivo di pixel. La funzione appena definita prende il nome di EQUALIZZAZIONE o LINEARIZZAZIONE DELL’ISTOGRAMMA.
Vediamo ora di analizzare la trasformazione appena vista. Si tratta di sostituire il
pixel k-esimo di partenza con quello ottenuto sommando tutte le stime probabilistiche
dell’intensità dei pixel precedenti: consiste nel ridistribuire la luminosità nell’immagine. In virtù della sommatoria nel calcolo di T (rk ), l’equalizzazione viene anche
chiamata FUNZIONE CUMULATIVA.
2.1.2
Richiami di calcolo delle probabilità
Spesso nell’image processing si ricorre all’uso di algoritmi basati sull’ analisi statistica e sulla probabilità. Riporteremo ora alcune nozioni basilari, rimandando a testi
specifici per eventuali approfondimenti.
Una volta definito cos’è una variabile aleatoria e la sua funzione di distribuzione,
analizziamo alcuni importanti indicatori che possono tornare utili: media, varianza e
momento.
CAP. 2 Tecniche di processamento dell’immagine
27
§2.1 Istogramma di una immagine
• MEDIA: è definita come
µ=
K
X
rk fk (r)
(2.4)
k=1
ed indica il valore più probabile intorno al quale la variabile aleatoria assume
maggiormente i valori.
• VARIANZA: definita come
2
σ =
K
X
(rk − µ)fk (r)
(2.5)
k=1
ed indica in maniera assoluta quanto vale la dispersione della variabile aleatoria
dal valor medio. Più è grande σ 2 più la variabile è in grado di assumere valori
molto diversi e distanti dal valor atteso (media).
• MOMENTO: è una generalizzazione della varianza, infatti si ottiene
µn =
K
X
(rk − µ)n fk (r)
(2.6)
k=1
e si dice MOMENTO DI ORDINE n-esimo. Da notare che il momento del 2◦
ordine è la varianza e quello del 3◦ viene chiamato fattore di skewness.
L’importanza di quest’ultimo indicatore sta nella capacità di misurare l’asimmetria della PDF rispetto al valor medio. Quindi se il PDF è simmetrica, tutti
i momenti di ordine superiore al secondo saranno uguali a zero.
Ricordandoci che lo scopo di questa trattazione sono le immagini, è evidente come
queste siano caratterizzate nella maggior parte dei casi da più variabili aleatorie (posizione del pixel, intensità, luminosa, colore...); può quindi risultare utile sapere che
esistono alcuni strumenti per misurare la “tendenza comune di queste variabili. Un’ulteriore generalizzazione della varianza è la COVARIANZA che misura la relazione o
CAP. 2 Tecniche di processamento dell’immagine
28
§2.1 Istogramma di una immagine
similarità tra due variabili aleatorie (x, y); definita come segue:
Cor(x, y) = µ((x − µ(x))(y − µ(y)))
= µ(x y − x µ(y) − y µ(x) − µ(x) µ(y))
= µ(x y) − µ(x) µ(y)
Possiamo a questo punto definire un nuovo indicatore che chiameremo coefficiente di
correlazione
rxy =
Corx y
σx σy
(2.7)
dove |r| ≤ 1; si dice che due variabili aleatorie sono incorrelate quando Corxy = 0
corxy = 0 ↔ rxy = 0.
2.1.3
Tecniche di filtraggio
Tutte le tecniche di filtraggio sono procedure atte all’eliminazione di disturbi durante
l’acquisizione dell’ immagine: quantizzazione, disturbi ambientali, campionamento, et
cetera.
Vadiamo ora alcuni di questi algoritmi che permettono di essere realizzati on-board
per la semplicità di calcolo, requisito particolarmente richiesto nelle applicazioni robotiche.
Prima di analizzare la prima tecnica , bisogna definire quello che viene indicato come nucleo ovvero kernel dell’operatore della funzione filtrante. Essendo l’immagine,
come ormai ben noto, una matrice, l’operatore deve agire su ogni singolo elemento
(vd. fig. 2.2) tenendo conto, ad esempio, di determinati punti limitrofi (si pensi di
voler calcolare il gradiente). Per far ciò, si definisce kernel una matrice n × n che ha
nei suoi elementi i diversi pesi che si vogliono attribuire ai singoli pixel che in quel
momento concorrono al calcolo del filtraggio. Parlando in termini più matematici, il
kernel non è nient’altro che la rappresentazione bidimensionale della convoluzione di
un’immagine.
CAP. 2 Tecniche di processamento dell’immagine
29
§2.1 Istogramma di una immagine
Figura 2.2: Esempio di applicazione di un generico kernel 3 × 3.
Ovviamente quanto qui detto vale anche per immagini a colori dove l’operatore, anziché essere una matrice, sarà un cubo (ad esempio nelle immagini RGB).
Media degli intorni
La prima tecnica che analizzeremo consiste nel sostituire, data un’immagine f (x, y),
in ogni punto (x, y) un’intensità che è uguale alla media dei valori di quella dei pixel
di f (x.y) contenuti in un intorno predefinito di (x, y). In formula,
g(x, y) =
1 X
f (n, m)
P
(2.8)
(n,m)S
dove g(x, y) è l’immagine ottenuta dopo il filtraggio e P è il numero di pixel considerati
nell’intorno.
CAP. 2 Tecniche di processamento dell’immagine
30
§2.1 Istogramma di una immagine
Figura 2.3: Immagine disturbata e risultati dell’applicazione di filtraggi applicando
l’algoritmo della media degli intorni con diverse dimensioni del kernel.
Filtraggio mediano
L’algoritmo precedentemente visto ha come difetto quello di non riuscire a definire
bene i contorni degli oggetti. Per ovviare a questo problema si ricorre al filtraggio
mediano che sostituisce l’intensità di ogni singolo pixel con la mediana dell’intensità
di un intorno predefinito di quel punto, ricordando che la mediana M di un insieme
corrisponde a quel valore che rende metà dei valori maggiori di M e l’altra metà
CAP. 2 Tecniche di processamento dell’immagine
31
§2.1 Istogramma di una immagine
Figura 2.4: (a) Immagine originale. (b)Immagine alterata da disturbiimpulsivi. (c)
Risultato della media degli intorni 5 × 5. (d) Risultato del filtraggio mediano 5 × 5
minori. Ad esempio, supponendo di avere un Kernel 3∗3, ogni volta che lo applichiamo
dovremo considerare 9 valori possibili il quinto più alto. I risultati di questo tipo di
filtro sono evidenziati nella figura 2.4.
Media dell’immagine
Quest’ algoritmo, l’unico che vedremo di questo tipo, serve ad eliminare disturbi
dall’immagini. Supponiamo di avere un fotogramma disturbato,
g(x, y) = f (x, y) + n(x, y)
(2.9)
dove n(x, y) è il disturbo non correlato.1
Si può dimostrare che è sempre possibile ottenere un’ immagine “migliore” facendo
1
Vuol dire che non esiste nessuna relazione tra dove si manifesta il disturbo e l’immagine f (x, y).
CAP. 2 Tecniche di processamento dell’immagine
32
§2.2 Riconoscimento di rette
una media di K immagini disturbate:
K
1 X
g(x, y) =
gi (x, y)
K i=1
(2.10)
E{g(x, y)} = f (x, y)
(2.11)
1 2
σ (x, y)
K
(2.12)
infatti la media di g(x, y)
e la varianza
σ 2 (x, y) =
Questo implica che, aumentando il numero K d’ immagini prese in esame, possiamo ridurre σ 2 , e quindi l’errore a zero ricostruendo così la figura originale priva del
disturbo n(x, y).
2.2
Riconoscimento di rette
La rivelazione dei contorni, quindi delle rette è una procedura di preelaborazione
dell’immagine molto importante che prelude a successive tecniche ampliamente usate
nella robotica per il riconoscimento della forma degli oggetti. Si intuisce che un
segmento su sfondo bianco, ovvero dove tutti i pixel sono stati posti inizialmente uguali
a zero, è di facile individuare; sarà sufficiente scansire l’immagine fino ad ottenere uno
step cromatico: si passerà da una sequenza di zeri ad un “1” e poi da una serie di “1”,
quanto è larga la retta, a zeri (vd. figura 2.5).
Volendo graficare questo concetto:
Lo strumento più utile per determinare questi “ step è il gradiente che permette di
valutare la tendenza, la crescita dei valori d’ intensità dell’ immagine. Denominando
con f (x, y) l’immagine
G [f (x, y)] =
Gx
Gy
CAP. 2 Tecniche di processamento dell’immagine
=
δf
δx
δf
δy
(2.13)
33
§2.2 Riconoscimento di rette
Figura 2.5: Ricerca dei contorni. A sinistra: Oggetto chiaro su sfondo scuro. A destra:
Oggetto scuro su sfondo chiaro.
e il modulo è
1
G [f (x, y)] = G2x + G2y 2
(2.14)
ma per motivi di convenienza si è soliti approssimarlo a
G [f (x, y)] = |Gx | + |Gy |
(2.15)
Dove questa approssimazione introduce pochissimo errore e può essere facilmente
CAP. 2 Tecniche di processamento dell’immagine
34
§2.2 Riconoscimento di rette
implementata “on-board” al robot. Per calcolare le derivate parziali si usano, essendo
f (x, y) una funzione discreta, differenze del primo ordine tra pixel adiacenti.
Gx =
δf
= f (x, y) − f (x − 1, y)
δx
(2.16)
Gx =
δf
= f (x, y) − f (x, y − 1)
δy
(2.17)
e
Un algoritmo che si basa su questo tipo di ragionamento è quello chiamato dell’ OPERATORE o MASCHERA DI SOBEL.
Questo operatore sostituisce alla derivata parziale monodirezionale, che considera
solamente un pixel alla volta, la seguente funzione:
Gx =
δf
δx
= [f (x + 1, y − 1) + 2f (x + 1, y) + f (x + 1, y + 1)] +
−[f (x − 1, y − 1) + 2f (x − 1, y) + f (x − 1, y + 1)]
= (g + 2h + i) − (a + 2b + c)
Gy =
δf
δy
= [f (x − 1, y + 1) + 2f (x, y + 1) + f (x + 1, y + 1)] +
−[f (x − 1, y − 1) + 2f (x, y − 1) + f (x + 1, y − 1)]
= (c + 2e + i) − (a + 2d + g)
che vuol dire che al posto di calcolare le derivate come semplice differenza tra pixel
adiacenti, le ottiene come differenza tra due medie pesate, dando maggiore importanza ai pixel effettivamente appartenenti all’ asse di derivazione (figura 2.6).
CAP. 2 Tecniche di processamento dell’immagine
35
§2.2 Riconoscimento di rette
Figura 2.6: Operatori per il calcolo delle derivate parziali.
Una volta calcolato il gradiente, si può aumentare ulteriormente il contrasto eliminando tutte le sfumature generando un’ immagine binaria.
1 se G [f (x, y)] > T
g(x, y) =
0 se G [f (x, y)] ≤ T
dove T è un intero non negativo usato come soglia di riferimento per il contrasto.
2.2.1
Operatore di Laplace
Si basa sul calcolo della derivata seconda:
L [f (x, y)] =
δ2f
δ2f
+
δx2
δy 2
(2.18)
che nel caso discreto diviene
L[f (x, y)] = [f (x + 1, y) + f (x − 1, y) +
+f (x, y + 1) + f (x, y − 1)] − 4f (x, y)
CAP. 2 Tecniche di processamento dell’immagine
36
§2.2 Riconoscimento di rette
Figura 2.7: Operatore di Laplace per la determinazione di rette.
che è uguale a zero nelle aree costanti e sulle parti a rampa di un contorno,in figura
2.7 è riportato l’operatore sotto forma matriciale.
CAP. 2 Tecniche di processamento dell’immagine
37
Capitolo 3
Analisi frequenziale
3.1
3.1.1
Rappresentazione nello spazio delle frequenze
Trasformata di Fourier
L’analisi di Fourier è una tecnica matematica basata sulla scomposizione dei segnali in
somme di sinusoidi. Spiegheremo il concetto per segnali monodimensionali, ma tutto
quello che esporremo sarà valido anche per funzioni a più dimensioni: le immagini. La
prima domanda che ci si pone è: perchè studiare un segnale come somma di sinusoidi?
Quali sono i vantaggi?
L’analisi di Fourier non ha una reale applicazione nell’image processing ovvero, come
abbiamo già visto, esistono algoritmi basato sul dominio spaziale che assolvono perfettamente ai loro compiti.
Spesso però quest’ultimi sono onerosi e richiedono un tempo computazionale molto
elevato. Si ricorre quindi a sistemi che possano velocizzare l’elaborazione quali appunto la FFT (Fast Fourier Transform).
Nella trattazione qui esposta si farà riferimento ad una particolare trasformata, la
DFT (Discrete Fourier Trasform), che è applicabile a segnali discreti, quali possono
essere i fotogrammi che dobbiamo elaborare. Iniziamo da un esempio. Si supponga
di avere una sequenza finita di valori
CAP. 3 Analisi frequenziale
38
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.1: Sequenza ottenuta per campionamento di un segnale continuo
possiamo osservare, ancora non ci interessa come, è possibile scomporla in una
somma di nove sinusoidi e nove cosinusoidi Questo vuol dire che se la somma di tutti
Figura 3.2: Sinusoidi che compongono la sequenza
questi 18 segnali sarà proprio la sequenza di partenza.
Il primo problema da risolvere è che i segnali sinusoidali sono illimitati mentre il segnale che vogliomo scomporre è finito. Come è possibile ovviare a tale problema?
CAP. 3 Analisi frequenziale
39
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.3: Coseni che compongono la sequenza
Si ricordi la definizione del teorema di Fourier : ogni segnale periodico è sempre scomponibile in una somma di sinusoidi.
Questo vuol dire che si deve in qualche modo periodicizzare la sequenza limitata che
si ha in ingresso.
Il modo più semplice è quello di ripetere infinite volte la sequenza stessa lungo tutto l’asse temporale in modo tale da ottenere un segnale periodico. Normalmente la
trasformata di Fourier viene espressa attraverso numeri complessi, per una maggiore
chiarezza espositiva nel resto della trattazione si farà riferimento solo ed esclusivamente alle funzioni di seno e coseno perchè di più facilmente comprensione.
Indicheremo con le lettere minuscole x[·] le sequenze nel dominio temporale, con le
rispettive maiuscole X[·] le loro trasformate nel dominio della frequenza. Sempre per
rigore notazionale indicheremo con ReX[·] (parte reale di X) e ImX[·] (parte immaginaria di X). I valori di ReX[·] sono le ampiezze della funzione coseno, mentre ImX[·]
sono quelle dei seni. Quindi se nel dominio di partenza, ad esempio quello tempora-
CAP. 3 Analisi frequenziale
40
§3.1 Rappresentazione nello spazio delle frequenze
le, abbiamo una sequenza da x[0] a x[N − 1], nel dominio frequenziale avremmo da
ReX[0] a ReX[ N2 ] e da ImX[0] a ImX[ N2 ].
Facendo riferimento all’esempio iniziale ove si dimostrava la necessità di novi seni
e nove coseni per sintetizzare una sequenza di sedici punti, ci si domanda come mai
servano due frequenze in più. Si considerino le due espressioni seguenti
ck [i] = cos (2πKi/N )
(3.1)
sk [i] = sin (2πKi/N )
(3.2)
chiamate funzioni base della DFT, dove ck [] è il coseno di ampiezza uguale a quello
inscritto nel vettore ReX[K] e in maniera duale sarà sk [] il seno di ampiezza ImX[K].
Il parametro Kindica la frequenza di ogni sinusoide, ovvero il numero di cicli contenuti
in N punti.
Torniamo ora alla domanda iniziale: perché quando si scompone un segnale con la
DFT appaiono due frequenze in più? Per rispondere a questa domanda in maniera
semplice ed intuitiva è sufficiente osservare i grafici di s0 [·] che è uguale a zero per ogni
N e in maniera analoga s N [] che corrisponde ad una sinusoide a frequenza
2
N
-esima
2
ma campionata in N punti dove vale solo zero. Quindi queste due sequenze esistono
ma non contribuiscono alla composizione del segnale di partenza.
Osservando invece c0 [·] ci si accorge che questo vale +1 per ogni N e quindi l’ampiezza
associata a questa particolare frequenza sarà offset del segnale alternato, quella comunemente chiamata componente continua di un segnale. A titolo puramente esemplificativo, riportiamo il grafico di alcune altre frequenze corrispondenti alle funzionisk []
e ck [·].
CAP. 3 Analisi frequenziale
41
§3.1 Rappresentazione nello spazio delle frequenze
3.1.2
Calcolo della DFT inversa
Una volta ottenuta la scomposizione, magari elaborata attravero opportuni filtri, ci di
può chiedere come ricostruire il segnale originale. Questa operazione prende il nome
di Sintesi o Calcolo inverso della DFT ; si ottiene applicando la seguente formula di
sintesi:
x[i] =
n
n
2
X
2
X
ReX[K] cos(2πki/N ) +
k=0
ImX[K] sin(2πki/N )
k=0
ATTENZIONE: Non si confondano gli X con X, infatti le ampiezze da associare ad
ogni sinusoide non sono esattamente uguali a quelle che si ottengono durante la fase
di scomposizione.
Infatti
ReX[K]
N/2
ImX[K]
ImX = −
N/2
ReX[K] =
(3.3)
(3.4)
eccetto per due casi particolari:
ReX[0]
N
ReX[ N2 ]
N
ReX[ ] =
N
2
ReX[0] =
(3.5)
(3.6)
Queste formule sono state riportate nel caso si voglia implementare un programma
di sintesi della DFT e quindi sarebbe facile sbagliare non ricordandosi di questi due
casi particolari.
La particolarità sopra citata può essere dimostrata (rif alle dispense) ricordando che il
dominio frequenziale è definito secondo una densità spettrale che rappresenta quanto
un segnale (ampiezza) è presente per unità di larghezza di banda.
CAP. 3 Analisi frequenziale
42
§3.1 Rappresentazione nello spazio delle frequenze
3.1.3
Come calcolare la DFT
Il metodo che qui si riporta non è l’unico ma il più facilmente intuibile: la CORRELAZIONE.
Come abbiamo visto nel paragrafo sugli strumenti del calcolo delle probabilità, la
correlazione misura la tendenza, di due segnali ad essere simili tra di loro. Senza voler
entrare nel dettaglio quello che si fa è misurare l’indice di correlazione tra il segnale
da scomporre e le funzioni base di seno e coseno.
Questa operazione viene ripetuta per ogni frequenza e per ognuna viene misurata la
correlazione per diversi sfasamenti delsegnale sinusoidale al fine di capire per quale
“ritardo quella frequenza approssima meglio la sequenza in ingresso.
La domanda che ci si può porre è̀: perchè usare proprio come funzioni base i segnali
sinusoidali? Per praticità !
Andrebbe bene qualsiasi segnale che risponda al requisito di essere ortogonale ovvero
tutti quei segnali incorrelati tra di loro. Si ricorda che due vettori-segnali sono ortogonali se il loro prodotto scalare è uguale a zero.
Le funzioni sinusoidali oltre a rispondere a tale requisito si sono dimostrate essere
le più versatili sia per la manipolazione algebrica (si pensi al prodotto di convoluzione) ma anche la loro facilità implementativa al livello elettronico. Bisogna, per
completezza, ricordare che le funzioni seno e coseno, quando un sistema è LTI (Lineare Tempo Invariante), di godere di un’ ulteriore proprietà: se introduciamo una
sinusoide con frequenza f0 assegnata, all’uscita del sistema otteremo un segnale con
medesima frequenza ma solamente con un ritardo e un’ ampiezza diversa.
CAP. 3 Analisi frequenziale
43
§3.1 Rappresentazione nello spazio delle frequenze
3.1.4
Analisi di immagini
Nel caso di segnali monodimensionali la trasformata di Fourier permette di estrarre
informazioni utili par l’elaborazione del segnale stesso. L’uso della trasformata, applicata ad un’immagine è pressocchè identico al caso di segnali semplici con l’unica
differenza, nel caso di figure, che l’informazione viene deteriorata. Chiariamo quanto
detto con un esempio: si supponga di avere un segnale audio contenente la registrazione di una musica, a prima vista questo segnale si presenta come una forma d’onda
di difficile comprensione e manipolazione (riferendo il nostro interesse alle frequenze).
Attraverso l’uso della trasformata di Fourier otteniamo, da quel segnale apparentemente “disordinato”, uno spettro di facile interpretazione.
Nel caso d’immagini è il contrario, infatti la trasformata di Fourier non fa nient’altro
che convertire una chiara informazione descritta nel dominio spaziale in una forma
incomprensibile nel dominio della frequenza. In parole più semplici, non bisogna
aspettarsi che la trasformata aiuti nella compressione delle informazioni codificate
nell’immagine.
Per quanto detto in precedenza, l’interesse nel trasformare immaginii dal dominio
spaziale a quello frequenziale è strettamente legato alla facilità di elaborazione e ad
un minor uso della memoria.
Vediamo ora il modus-operandi per ottenere la trasformata di Fourier di un’immagine usando la tecnica precedentemente illustrata della FFT.
Il requisito fondamentale è che le immagini siano quadrate N × N e che i lati siano
potenze di due.1 Se l’immagine originaria non fosse una potenza di due, saranno
aggiunti un numero di pixel, con valore zero, fino a raggiungere il volore desiderato.
1
Ad esempio: 256, 512, 1024, etc.
CAP. 3 Analisi frequenziale
44
§3.1 Rappresentazione nello spazio delle frequenze
Definiremo inoltre due matrici, delle stese dimensioni dell’immagine, che conterranno
la parte reale e la parte immaginaria della trasformata, per questo motivo esse prendono il nome di matrice reale e matrice immaginaria. Il procedimento vero e proprio
per ottenere la FFT dell’immagine consiste nell’eseguire la trasformata degli N punti
della riga zero della figura e scrivere la parte reale e quella immaginaria della FFT
nelle righe delle rispettive matrici. Una volta ripetuta la seguente procedura per tutte
le altre righe da 1 a N − 1 si saranno state formate due matrici che contengono una
trasformata intermedia dell’immagine di partenza. Successivamente, la stessa procedura viene eseguita su ogni singola colonna delle matrici “intermedie”.
Si prendono gli N punti della colonna zero della matrice reale e gli N punti della
colonna zero della matrice immaginaria e si calcola la FFT. Il risultato sarà a sua
volta scritto nella prima colonna delle rispettive matrici. Ovviamente il tutto sarà
ripetuto per tutte le colonne delle matrici (vd. esempio fig. 3.4). L’ordine con il quale viene eseguto l’algoritmo (righe-colonne) è indifferente: la FFT di immagini gode
della proprietà COMMUTATIVA.
Si ricordi, per le note proprietà della trasformata di Fourier, di un segnale reale ha
spettro d’ampiezza pari e spettro di fase dispari e che inoltre un segnale reale finito
(nel tempo) ha spettro frequenziale periodico e infinito. Da queste due considerazioni, tenendo presente quanto già detto nei capitoli precedenti, al fine di rappresentare
un’immagine N × N sarebbero necessarie N righe (indicate con r) e N/2 + 1 colonne
(indicate con c), infatti:
<e [r, c] = <e X[N − r, N − c]
=m [r, c] = −=m X[N − r, N − c]
questo vuol dire che nel dominio della frequenza occorre minor spazio per poter im-
CAP. 3 Analisi frequenziale
45
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.4: Prima coppia - Matrice reale e immaginaria generata dalla trasformazione
con DSP di un immagine. Seconda coppia - Informazioni espresse in modulo e fase
con diagramma polare e frequenze alte verso il centro. Terza coppia - Informazioni
espresse in modulo e fase con diagramma polare e frequenza zero al centro.
magazzinare l’immagine. Volendo analizzare quindi le matrici ottenute dalla FFT ci
si accorgerà che la riga N/2 e la colonna N/2 dividono lo spettro in quattro quadranti. Per quanto concerne la parte reale delle ampiezze, il secondo quadrante è uguale
CAP. 3 Analisi frequenziale
46
§3.1 Rappresentazione nello spazio delle frequenze
al quarto e il terzo è uguale al primo. Questo tipo di simmetria viene mantenuta
dalla parte immaginaria ma, come si nota dalle relazioni appena esposte, con il segno
invertito.
Vediamo ora di capire quali relazioni intercorrono tra i singoli punti dell’immagine
trasformata e le corrispondenti frequenze. È noto come, nel caso monodimensionale,
ogni sinusoide sia caratterizzata da frequenza, fase, e ampiezza; nel caso di immagini
occorre un’ulteriore grandezza: la direzione. La frequenza e la direzione di ogni singola
sinusoide bidimensionale è determinata dalla posizione dei punti sulle matrici reali e
immaginarie delle trasformate. Come mostra la figura 3.5, bisogna disegnare le frecce
congiungenti le coppie di punti d’interesse con i punti che rappresentano le frequenze
nulle (il vertice in alto a sinistra e quello in basso a destra): la direzione di tale freccia
rappresenta la direzione della sinusoide mentre la sua lunghezza, per un opportuno
fattore di scala, rappesenta la frequenza.
Per capire quanto affermato si osservi il disegno (fig. 3.6); ogni singola funzione
periodica è caratterizzata da una lunghezza d’onda. La direzione è descritta da un
vettore normale a un fronte dell’onda. Se si associa al vettore k la lunghezza 1/λ
|k| =
1
,
λ
è possibile descrivere la lunghezza d’onda e la direzione in un unico vettore k̂ di
componenti
k̂ = [k1 , k2 ]T .
È possibile anche codificare, usando questo nuovo valore, la fase φ
φ=
CAP. 3 Analisi frequenziale
2 π δx
.
λ
47
§3.1 Rappresentazione nello spazio delle frequenze
3.1.5
Applicazione della FFT nell’image processing
Fino a questo punto ci si è preoccupati delle proprietà della FFT e dei suoi vantaggi
nell’image processing. Di norma si usano procedimenti basati sulla FFT per eseguire
convoluzioni d’immagini con operatori molto grandi; si pensi, a titolo di esempio, che
per eseguire una convoluzione tra una figura di dimensione pari a 512 × 512 con un
operatore di grandezza uguale a 50×50 la FFT è 20 volte più rapida della convoluzione
tradizionale:
y[r, c] =
M
−1 M
−1
X
X
h[k, j] x[r − k, c − j]
k=0 j=0
dove y[r, c] è l’immagine elaborata, h[·] è l’operatore e x[r, c] è l’immagine di partenza.
Vediamo ora un esempio di applicazione della FFT nell’ambito del riconoscimento
di una forma assegnata (pattern-recognition): data una figura di partenza vogliamo
trovare una particolare zona di nostro interesse e della quale sappiamo già come è
fatta. Nel caso specifico ci occuperemo di trovare su una banconota da 1$ la posizione
del volto di George Washington. L’immagine di partenza è di dimensioni 100 × 100 e
il nostro riferimento sarà di dimensioni pari a 29 × 29 (fig. 3.7).
Tra le varie tecniche per risolvere tale problema quella della correlazione risulta la
migliore e può essere implementata come una convoluzione tra l’immagine di partenza
e il target.
Prima di poter applicare la convoluzione, bisogna traformare l’immagine target in
un operatore funzionale: bisogna ruotarla di 180◦ (vd. fig. 3.8).
La prima cosa da fare è quella di rendere possibile la convoluzione ridimensionando
le immagini aggiungendo degli zeri per farle diventare di lato uguale ad una potenza
di due e per poter contenere l’immagine finale. Nel caso specifico, quando l’immagine
CAP. 3 Analisi frequenziale
48
§3.1 Rappresentazione nello spazio delle frequenze
100 × 100 viene convoluta con una da 29 × 29 pixels, l’immagine risultante sarà di
128 × 128 pixels.
Bisognerà quindi aggiungere tanti zeri quanti necessari per far diventare entrambe
le immagini come mostrato in figura 3.9. Come si può notare dalla figura, l’immagine
di partenza e il target vengono trasformati per mezzo della DFT in quattro matrici
che verranno moltiplicate per ottenere le corrispettive matrici reali e immaginarie
dell’immagine convoluta. Ricordandosi che il prodotto di convoluzione nel dominio
della frequanza è:
<e Y [f ] = <e X[f ] · <e H − =m X[f ] · =m H
<e Y [f ] = =m X[f ] · <e H − <e X[f ] · =m H
Il valore di ogni pixel dell’immagine Y è indice di quanto la H sia simile a X in quel
punto (applicata in quel punto). Per saper dove si trova la figura ricercata basterà
ricercare sulla figura Y il pixel più luminoso.
Il rovescio della medaglia nell’uso della FFT in applicazioni di questo tipo è che
il target deve avere la stessa dimensione e lo stesso orientamento dell’immagine di
partenza ricercata.
3.1.6
STFT - Short Term Fourier Transform
La trasformata di Fourier di un segnale, come illustrato nei capitoli precedenti, si
rivela particolarmente utile sia per la compressione in memoria dell’immagini che per
la sua analisi (convoluzioni). Si vuole portare l’attenzione del lettore, attraverso il
prossimo esempio, su come tale trasformata non distingua tra segnali stasionari e non
stazionari.
Si ricordi che un segnale si definisce stazionario quando il suo spettro frequenziale
CAP. 3 Analisi frequenziale
49
§3.1 Rappresentazione nello spazio delle frequenze
non varia nel tempo.
Si supponga di avere nel tempo il seguente segnale:
x(t) = cos(2π · 5t) + cos(2π · 10t) + cos(2π · 20t) + cos(2π · 50t)
rappresentato in figura 3.10, se applichiamo la trasformata di Fourier, otteremo uno
spettro (vedi fig 3.11) caratterizzato da quattro picchi tutti in corrispondenza delle
frequenze componenti la funzione x(t). Si analizzi ora il seguente segnale (chirp signal) a frequenza variabile, ovvero le frequenze che lo formano cambiano nel tempo
(vd. fig. 3.12). Il suo spettro è rappresentato in figura 3.13, si nota che a meno di
piccole fluttuazioni, che possono essere filtrate, lo spettro presenta anche in questo
caso quattro picchi in corrispondenza di 5, 10 20 e 50 Hertz. Questo fa capire come
allo stesso spettro corrispondano due segnali completamente diversi tra loro (vd. figure 3.12 e 3.10).
Qual’è la differenza? Perchè si ha lo stesso spettro?
La differenza principale tra i due segnali presi in esame è che inel primo (fig.
3.10) le frequenze sono presenti in ogni istante (infatti il segnale è periodico) mentre,
nel secondo (fig. 3.12), le frequenze si susseguono una dietro l’altra: ad esempio,
quando il segnale oscilla a 5 Hz nessuna delle altre frequenze è presente (fig. 3.12).
Questo spiega anche il “rumore” presente tra i picchi dello spettro in figura 3.13; il
segnalecambia da una frequenza all”altra e di conseguenza genera tutta una serie di
armoniche inferiori di ampiezza molto contenuta.
Per rispondere al secondo quesito bisogna analizzare nel dettaglio la trasformata di
CAP. 3 Analisi frequenziale
50
§3.1 Rappresentazione nello spazio delle frequenze
Fourier (FT):
Z
+∞
X(f ) =
x(t) · exp−2jπf t dt
−∞
+∞
Z
x(t) =
x(t) · exp+2jπf t dt
−∞
Si analizzi la prima tra queste, il segnale x(t) è moltiplicato per un termine esponenziale nel quale figura una certa frequenza “f ” e poi integrato lungo tutto l’asse temporale.
Ricordando che l’esponenziale complesso che figura nella relazione di analisi può essere
scritto
expj2πf t = cos(2πf t) + j sin(2πf t)
nota anche come relazione di Eulero.
Tornando quindi all’analisi della prima eqauzione di Fourier, quella che porta dal dominio temporale a quello frequenziale, si nota che il segnale x(t) viene moltiplicato
per un’espressione complessa che rappresenta il seno e il coseno della stessa frequenza
e poi viene integrato (vengono sommati tutti questi prodotti). Se il risultato di questa
integrazione è molto grande, si dice che il segnale x(t) ha una componente spettrale
dominante per quella frequenza “f. Ovviamente se il risultato dell’integrazione fosse
piccolo vorrebbe dire che quella frequenza poco contribuisc nella costruzione del segnale; come caso limite si ricorda che nel caso |X(f )| = 0 allora quella frequenza non
è correlata con il segnale che stiamo analizzando.
Si osserva che, essendo l’integrazione eseguita da −∞ a +∞, il valore di tale integrale non dipende da dove tale frequenza è presente nel segnale; la FT determina
quanto quella frequenza è presente ed è per questo motivo che i due spettri dei segnali
(fig. 3.10 e fig 3.12) sono molto simili tra loro.
CAP. 3 Analisi frequenziale
51
§3.1 Rappresentazione nello spazio delle frequenze
In conclusione possiamo dire che la FT non è particolarmente utile per lo studio
di segnali a frequenza variabile nel tempo.
Per ovviare a tale problema si procede con una variante della FT: Short Term
Fourier Transform (STFT).
Analizzando la figura 3.12 si nota che se osservassimo il segnale ogni 250 ms, il segnale
è pressocche stazionario. In questa maniera si può ragionare nel seguente modo: un
qualunque segnale se analizzato in intervalli temporali molto piccoli si può considerare
stazionario; è evidente che tanto più piccola sarà la finestra d’osservazione, tanto
migliore sarà la sua risoluzione temporale.
In pratica la STFT altro non fa che dividere il segnale in tanti intervalli temporali di
ugual durata e ne esegue, per ognuno di questi, la FT. Applicando quanto detto ad
un esempio, si consideri un segnale con una frequenza che varia: 250 Hz, 200 Hz, 100
Hz e 50 Hz (vd. fig. 3.14). Dividendo il segnale in tante finestre ognuna da 250 ms
otteniamo il grafico di figura 3.15 che ci permette di sapere quali frequenza concorrono
alla formazione del segnale x(t) in ogni intervallo di tempo.
Come si fa a scegliere la durata della finestra temporale? Nel caso dell’esempio
era evidente ma in generale difficilmente ci si troverà di fronte a segnali tanto regolari.
Vediamo di analizzare un pò meglio la STFT.
La formula di sintesi della STFT
Z
Xω (t, f ) =
0
[x(t) · ω ∗ (t − t )] · exp−j 2πf t dt
t
dipende da tre parametri: il tempo, la frequenza e la forma della finestra temporale.
Senza scendere troppo nei particolari, si intuisce come tanto più è grande lo spazio
d’osservazione tanto maggiore sarà l’accuratezza in frequenza ma tanto peggiore sarà
quella nel tempo (vd. fig. 3.16), mentre tanto più la ω (vd. fig. 3.17) è una funzione
CAP. 3 Analisi frequenziale
52
§3.1 Rappresentazione nello spazio delle frequenze
di breve durata, tanto maggiore sarà l’accuratezza nel tempo ma tanto peggiore sarà
quella in frequenza (vd. fig. 3.16). Come caso limite riportiamo il grafico di figura
3.18 che ha risoluzione temporale assolutamente scadente.
Bisogna quindi trovare un buon compromesso nella scelta della durata dell’intervallo
temporale d’osservazione al fine di avere una buona risoluzione sia nel tempo che nella
frequenza.
CAP. 3 Analisi frequenziale
53
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.5: Corrispondenza tra la posizione dei punti della trasformata e corrispettive
caratteristiche spaziali: frequenza, direzione e lunghezza d’onda.
CAP. 3 Analisi frequenziale
54
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.6: Illustrazione della lunghezza d’onda λ, vettore k e la fase di una funzione
periodica in 2-D
Figura 3.7: (a) Immagine in ingresso 100 × 100. (b) Immagine che si vuole trovare:
target.
CAP. 3 Analisi frequenziale
55
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.8: Nella figura (a) viene mostrato la figura “target”. In (b) è ruotata di 180◦
per annullare l’effetto della convoluzione.
CAP. 3 Analisi frequenziale
56
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.9: Diagramma di flusso di una convoluzione usando la FFT. Le immagini
(a) e (b) sono state prima ridimensionate e poi trasformate nel dominio frequenziale
con l’uso della DFT. Queste due spettri frequenziali sono moltoplicati e il risultato è
poi riportato nel dominio spaziale con la Inverse-DFT.
CAP. 3 Analisi frequenziale
57
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.10: Segnale stazionario di frequenze: 5, 10 20 e 50 Hertz.
Figura 3.11: Spettro frequenziale ottenuto con una FT di un segnale stazionario.
CAP. 3 Analisi frequenziale
58
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.12: Segnale a frequenza variabile nel tempo di frequenze:5, 10 20 e 50 Hertz.
Figura 3.13: Spettro frequenziale di un segnale a frequenza variabile.
CAP. 3 Analisi frequenziale
59
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.14: Segnale a frequenza variabile (250 Hz, 200 Hz, 100 Hz, 50 Hz ).
Figura 3.15: STFT del segnale chirp.
CAP. 3 Analisi frequenziale
60
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.16: Spettr.
Figura 3.17: Diverse funzioni ω(·) che comprendono diversi intervalli temporali.
CAP. 3 Analisi frequenziale
61
§3.1 Rappresentazione nello spazio delle frequenze
Figura 3.18: STFT con finestra temporale di analisi molto grande.
CAP. 3 Analisi frequenziale
62
Parte II
Telecamere Log-polar
63
Capitolo 4
Telecamere Retina-Like
4.1
Introduzione
Si è sempre abituati a pensare alle immagini come pixel distribuiti all’interno di una
matrice. In questo tipo di rappresentazione il concetto di connettività e adiacenza,
come già mostrato in precedenza, risulta di gran semplicità: 4-vicini e 8-vicini di ogni
pixel.
Più in generale sia nei sistemi di visione tipicamente biologici (appartenenti al mondo
animale), che in quelli basati su sensori a densità variabile, i fotorecettori del sensore
sono distribuiti in maniera non uniforme su quest’ultimo.
Il concetto di connettività e adiacenza diventa di gran lunga più complicato in
quanto i pixel aventi adiacenza nelle aree di memoria, dove viene registrato il segnale,
non sono vicini nella rappresentazione del segnale ricostruito. Questo tipo di sensori
prendono il nome di retina-like.
Il nome viene suggerito dalla loro stretta relazione con il comportamento della
retina dell’occhio sia esso animale che umano.
Per avere un’idea più concreta s’immagini che la telecamera log-polar (è un altro
modo per chiamare tale sensore) ha la caratteristica di avere una concentrazione di
punti maggiore al suo centro ed una densità minore a mano a mano che ci si allontana
CAP. 4 Telecamere Retina-Like
64
§4.1 Introduzione
verso il bordo.
Questa caratteristica porta ad una definizione dell’immagine molto alta nel centro
ed una sempre più scarsa a mano a mano che ci sposta nella regione periferica. Per
dare un’idea della sua analogia con quello che è il comportamento di un normale
occhio si propone di eseguire un piccolo esperimento.
Tenendo una penna nella mano di fronte a voi, con il braccio ben disteso, provate
a fissare con un occhio solo la punta della penna (mettendola bene a fuoco) quello di
cui vi accorgerete è che riuscirete a vedere perfettamente tutte le caratteristiche della
punta ma avrete tutto quello che la circonda sempre meno definito. Non sarete, per
esempio, in grado di vedere con la stessa precisione quello che si trova a pochi centimetri di distanza dal vostro obbiettivo. Questo è il principio chiave delle telecamere
log-polar.
L’interesse mostrato nei riguardi di questi dispositivi è legato principalmente ad un
tipo di visione attiva. Con quest’ultimo termine si vuole indicare il controllo diretto
e l’utilizzo, da parte dell’osservatore, delle risorse a sua disposizione.
Nell’ambito robotico questo tipo di sistemi è estremamente interessante. Infatti,
oltre a permettere di avvicinarci sempre più allo studio di robot di tipo antropomorfo,
sia nell’aspetto che nel modo di trattare i dati, permette anche notevoli vantaggi dal
punto di vista computazionale.
Quest’ultimo aspetto è di grande interesse quando si parla di robot autonomi,
ovvero autosufficienti. In essi la capacità di avere più informazioni concentrate in una
zona limitata dell’immagine portano ad un migliore velocità di elaborazione del flusso
visivo e, quindi, una minore potenza di calcolo strettamente legata ad un minore
consumo energetico e di memoria; ideale per applicazioni, ad esempio, di telerobotica.
Nella seguente trattazione verrà in primo luogo spiegato il legame matematico che
CAP. 4 Telecamere Retina-Like
65
§4.2 Il sensore retina-like
permette il passaggio da una rappresentazione classica, detta anche televisiva (TV),
ad una log-polar.
Dopo questa breve introduzione si affronterà l’implementazione di algoritmi in
MATLAB, un programma di calcolo numerico, al fine di poter emulare tali classi di
telecamere.
In conclusione verrà riportata l’esperienza di laboratorio con una descrizione dettagliata del robot “CICLOPE” che ha come scopo quello d’inseguire con lo “sguardo”
un bersaglio mobile.
4.2
Il sensore retina-like
Figura 4.1: (a) immagine TV, I(i, j), (b) immagine log-polar inversa L−1 (i, j), (c) immagine log-polar diretta L(u, v). La (c) è una possibile rappresentazione di immagine
log polar diretta.
Osservando la figura 4.1 si possono distinguere tre tipi d’immagine:
• immagini raster convenzionali, video o anche dette TV ;
• immagini log-polar inverse;
• immagini log-polar dirette.
CAP. 4 Telecamere Retina-Like
66
§4.2 Il sensore retina-like
Queste tre immagini sono legate tra di loro da una coppia di tavole di corrispondenze
S e R, che mappano le coordinate dell’immagine TV nella matrice delle coordinate
dell’immagine log-polar.
Formalmente si definisce log-polar l’operazione di mappatura di un’immagine raster TV I(i, j) dove i ∈ {0, . . . , m − 1} e j ∈ {0, . . . , n − 1} in una matrice che
rappresenta l’immagine log-polar L(u, v) con u ∈ {0, . . . , s − 1} e v ∈ {0, . . . , r − 1}.
L’operazione di campionamento della figura è specificata in due tabelle S(i, j) e
R(i, j), i nomi di queste sono stati scelti per motivi mnemonici riferendoci rispettivamente a “Spokes” e “Rings” (raggi e anelli).
Si supponga a(u, v) l’area corrispondente (in figura TV) del pixel corrispondente
nell’immagine log-polar (u, v)
a(u, v) =
X
1 | S(i, j) = u e R(i, j) = v
i,j
che indica il numero di pixel che vengono mappati nell’immagine raster TV.
Per convenzione si assegna ad 1 il valore del pixel TV se e solo se le sue coordinate (i, j) soddisfano: S(i, j) = u e R(i, j) = v. Indicando con L(u, v) i pixels
dell’immagine log-polar, si può definire ogni punto di tale figura nel seguente modo
L(u, v) =
1 X
I(i, j) | S(i, j) = u e R(i, j) = v
a(u, v)
in altre parole, viene messa nel punto (u, v) dell’immagine log-polar il valor medio
della luminosità di tutti i pixel della regione corrispondente, nella figura TV, a tale
pixel.
La formula di trasformazione inversa
L−1 (i, j) = L(S(i, j), R(i, j))
CAP. 4 Telecamere Retina-Like
67
§4.2 Il sensore retina-like
Figura 4.2: Tipo di sensore retina-like. Corrispondenza del punto P1 nell’immagine
TV con il suo punto omologo P2 nella rappresentazione log-polar.
avendo precedentemente definito S(i, j)e R(i, j). La trasformata inversa converte
l’immagine log-polar nel formato inverse log-polar (vd. fig.4.1 (b)).
Si cercherà ora di spiegare, in maniera formale, come creare le tabelle di corrispondenza R e S. Supponiamo di avere un sensore , per semplicità, a doppia simmetria
(sia verticale che orizzontale) come si vede in figura 4.2 e si voglia creare una coppia
di tabelle di corrispondenze riferite ad un solo quadrante, ben sapendo che le altre
tresono determinabili tramite ovvie proprietà geometriche.
Si indicheranno le tabelle inerenti ad un singolo quadrante con i pedici SQ (x, y) e
RQ (x, y).
Gli indici di queste tabelle variano
o
n
o
n
m
n
x ∈ 0, . . . , − 1 e y ∈ 0, . . . , − 1
2
2
ottenute come trasformazione degli indici della matrice dell’immagine in coordinate
cartesiane rispetto ad un sistema di riferimento coincidente con il centro della figura.
L’idea che è alla base della geometria dei sensori retina-like, è quella di trattare ogni
CAP. 4 Telecamere Retina-Like
68
§4.2 Il sensore retina-like
pixel TV di coordinate (x, y) come un numero complesso z = x + j y, quindi poi
calcolarne w = log(z) e poi arrotondarlo all’intero più vicino, ottenendo così gli indici
per SQ e RQ .
z =x+jy
θ = arg(z) = arctan( xy )
p
|z| = x2 + y 2
z = |z| ej θ
e quindi
w1 = log(z) = log |z| + j θ
Per esempio, supponiamo di avere un’immagine raster TV I(x, y) con x ∈ {0, . . . , n}
e y ∈ {0, . . . , m} con m ≺ n (più righe che colonne).
Figura 4.3: Determinazione punti massimi e minimi campionati durante la
trasformazione.
CAP. 4 Telecamere Retina-Like
69
§4.2 Il sensore retina-like
Se calcolassimo la funzione logaritmica, ci accorgeremo che assume un massimo
quando il cerchio più esterno interseca l’asse delle y (vd fig. 4.3)
1
gmax = log |( ,
2
1
gmin = log |( ,
2
Il fattore
1
2
m 1
− )|
2
2
1
)|
2
che compare nelle formule appena riportate serve ad avere la certezza
Figura 4.4: Il fattore
ambiguità.
1
2
serve a campionare il pixel nel suo centro e non generare
di campionare il centro del pixel (vd. fig. 4.4) sul quale si opera e non il bordo,
eliminando così incertezze sul valore della luminosità considerata.
Il valore minimo di angolo di raggio è lungo l’asse y
1 m 1
θmin = arctan( ,
− )
2 2
2
E’ possibile a questo punto formalizzare per un generico punto la trasformata logpolar, generando in maniera univoca le tabelle per la corrispondenza delle coordinate.
CAP. 4 Telecamere Retina-Like
70
§4.2 Il sensore retina-like
Figura 4.5: Esempio di tabella per eseguire il campionamento di una immagine TV
con risoluzione 60 × 64 in una log polar con risoluzione 16 × 20. Di norma il primo
valore indica i raggi e il secondo i cerchi, in questo caso l’immagine ottenuta ha 16
“spokes” e 20 “rings”.
Preso un generico punto di coordinate (x, y), si può definire
1 m 1
− )||
ρ = | log |( ,
2 2
2
così che
r log ρ − gmin
RQ (x, y) = RQ (ρ) =
2 gmax − gmin
dove r è il numero massimo degli anelli del sensore.
Definiamo analogamente
1 m 1
θ = arctan(log |( ,
− )|)
2 2
2
così che
SQ (x, y) =
s(θ − θmin )
π − 2θmin
dove s è il numero massimo dei raggi del sensore. Per facilitare la comprensione,
un’esempio di mappa per il campionamento è riportato in figura 4.5.
CAP. 4 Telecamere Retina-Like
71
§4.3 L’implementazione delle trasformate
4.3
L’implementazione delle trasformate
Come esposto nel paragrafo precedente, è stato necessario creare una coppia di tavole
che descrivessero il “modus-operandi” per mappare l’immagine TV in una log-polar. Il
primo problema è stato la scelta del linguaggio di programmazione nel quale scrivere
tali applicazioni.
Per rispettare vincoli prestazionali elevati, propri di applicazioni robotiche, si era
scelto il C / C++, per la portabilità verso più piattaforme il JAVA, ma si è poi giunti
a scegliere uno pseudo-linguaggio quale il MATLAB.
Tale scelta è stata fortemente influenzata sia dal poco tempo a disposizione per
sviluppare il codice sia per la facilità d’interfacciamento della webcam usata, che per
la gestione della porta parallela.
Si tiene a precisare che il MATLAB non è in alcun modo riduttivo dal punto di vista
dell’efficienza infatti, una volta scritto il codice, è possibile generare in automatico
delle librerie sia C che JAVA da poter poi usare in applicazioni REAL-TIME.
4.3.1
Da rettangolare a Log-polar
Figura 4.6: Effetto della trasformazione COLCONVERTI.M .
CAP. 4 Telecamere Retina-Like
72
§4.3 L’implementazione delle trasformate
La funzione riportata è quella usata per simulare la telecamera con sensore retina-like.
Infatti si occupa di acquisire l’immagine dal frame buffer di Windows98 per poi
trasformarlo nella forward log-polar (vd. fig. 4.6).
L’acquisizione video.
Per quel che riguarda l’interfacciamento con la webcam si
è ricorsi all’uso di VFM, un programma scritto da Farzad Pezeshkpur e scaricabile dal
sito http://www.mathwork.com/matlabcentral/fileexchange/, acronimo di Video
For Matlab.
Nel file scaricabile “vfm.zip” si trovano sia i sorgenti che due files:
• vfm.dll
• vfm.m
che devono essere copiati nella cartella di lavoro di matlab. Da queso momento in
poi, previa installazione dei driver della webcam che si desidera usare, sarà sufficiente
digitare nel prompt di comando di matlab la seguente istruzione
> I=vfm(’grab’);
per acquisire e trasformare in una matrice tridimensionale (corrispondente ai tre colori
RGB di composizione dell’immagine) il contenuto del frame buffer di win98 in quel
momento. Per ulteriori usi del comando vfm.m si rimanda alla guida contenuta nel
file stesso sotto la forma di commento.
La prima volta che viene digitato il comando vfm , da quando si è aperto Matlab,
il programma VFM apre una finestra a parte (vd. figura 4.7) che contiene quello che il
programma ha trovato al momento d’accesso al frame buffer. Importanti sono i menù
che questa finestra mette a disposizione (vd. fig. 4.8), dove è possibile impostare il
CAP. 4 Telecamere Retina-Like
73
§4.3 L’implementazione delle trasformate
Figura 4.7: Fienestra generale di Video for Matlab.
Figura 4.8: Vista dei menù di VFM.
CAP. 4 Telecamere Retina-Like
74
§4.3 L’implementazione delle trasformate
formato, la luminosità e tutte le caratteristiche dell’immagine che si vuole acquisire.
Nel caso in cui il computer disponga di più di una sorgente video (webcam, schede
d’acquisizione TV, ...) da tali menù è sempre possibile scegliere da quale dispositivo
si voglia catturare il frame.
Il codice Si riporta, in maniera integrale, il codice per l’acquisizione e successiva
trasformazione dell’immagine corredato di commento per facilitarne la comprensione.
Figura 4.9: Codice Matlab, file colconverti.m .
si vuole portare all’attenzione l’analogia con la teoria esposta nel paragrafo 4.2.
Sono stati creati due vettori theta e rho, rispetto ai quali vengono mappate le immagini
TV in quelle log-polar.
CAP. 4 Telecamere Retina-Like
75
§4.3 L’implementazione delle trasformate
4.3.2
Da Log-polar a rettangolare
Figura 4.10: Esempio di trasformazione inversa usando il file COLUNCONVERTI.M
.
Per quel che riguarda la trasformata inversa, il procedimento è del tutto analogo a
quanto illustrato in precedenza con la differenza che l’immagine ricostruita perde di
definizione a mano a mano che ci si porta verso il bordo esterno. Non è stato, volutamente, implementato un algoritmo che , in fase di ricostruzione colmasse, con valori
medi, i punti che si sono persi in fase di trasformazione diretta (colconverti.m).
Si riporta il codice commentato:
CAP. 4 Telecamere Retina-Like
76
§4.4 Conclusioni sull’utilizzo degli algoritmi matlab
Figura 4.11: Codice Matlab, file colunconverti.m .
Da notare che l’operazione di ricostruzione dell’immagine è molto onerosa dal
punto di vista computazionale. Si consiglia di usarlo quanto meno possibile e solo per
verificare il corretto funzionamento degli esperimenti che si stanno conducendo.
4.4
Conclusioni sull’utilizzo degli algoritmi matlab
Dai test condotti in laboratorio risulta evidente che i tempi d’acquisizione e conversione da TV a log-polar dipendono, come ci si aspetta, sia dalla potenza di calcolo che
si ha a disposizione, sia dalla risoluzione che si richiede: numero di “rings” e “spokes”.
A seconda dell’uso che se ne deve fare, si consiglia di modificare il codice in maniera
tale da non considerare i colori. Quest’operazione, se fatta per ottenere un’immagine
in bianco e nero, porta ad una riduzione del tempo di oltre il 75%.
CAP. 4 Telecamere Retina-Like
77
Capitolo 5
ROBOT CICLOPE
5.1
Descrizione generale
Il progetto “CICLOPE” è nato come esempio d’applicazione di telecamere retina-like
in ambito robotico. Lo scopo prefisso è quello di potere inseguire un bersaglio in
movimento per mezzo di una telecamera con sensore space-variant.
Per la costruzione di questo robot si è partiti da alcune specifiche iniziali:
• realizzazione di un software per l’emulazione di telecamere retina-like
• realizzazione di un supporto meccanico per la movimentazione della telecamera
• Riutilizzo di materiale di scarto o di basso costo
L’ultima specifica è stato posta sia per motivi economici che, soprattutto per creare
un sistema che fosse realizzabile ovunque con pezzi facilmente reperibili.
Il progetto prende il nome di “CICLOPE” perchè il robot dispone di una sola
sorgente visiva in analogia al personaggio mitico dell’Odissea.
CAP. 5 ROBOT CICLOPE
78
§5.2 Le parti costitutive di CICLOPE
5.2
Le parti costitutive di CICLOPE
Sistema visivo
Figura 5.1: Webcam Philips USB, ToUcam PRO.
La telecamera usata è una webcam Philips ToUcam-Pro con connessione USB. Tale
videocamera viene venduta con i driver d’utilizzo su cd-rom. Per installarli è sufficiente inserire il cd autopartente e seguire le istruzioni suggerite a schermo. Come già
riportato in precedenza, si è usato per l’interfacciamento con Matlab-6 il programma
VFM (vedi paragrafo “Acquisizione video”).
In un primo momento si è pensato di usare il JAVA, ma la Sun1 non ha ancora rilasciato un package per il controllo delle porte USB. Al momento attuale esiste
un’interessante libreria “Java Media Framework” reperibile e scaricabile gratuitamente dal sito della Sun; che dovrebbe permettere, in maniera automatica, di scrivere
programmi che si possono interfacciare in maniera “semplice” a tutte le sorgenti audio
e video.
Il procedimento che la Sun mette a disposizione è il seguente:
• si include il package jmf nel programma che si vuole scrivere
1
http://java.sun.com
CAP. 5 ROBOT CICLOPE
79
§5.2 Le parti costitutive di CICLOPE
• si esegue un particolare metodo che restituisce una lista di periferiche disponibile
(che il package riconosce) con un riferimento d’identificazione (ID)
• Si crea un oggetto di quel tipo (ID) e da quel momento si hanno a disposizione
tutti i metodi per lavorare, ad esempio, sullo streaming audio-video.
Tale strada non è stata seguita perché la webcam usata non era supportata; si è
notato che il package è, in generale, molto attento alle schede di acquisizione audiovideo presenti nel PC e agli streaming provenienti dalla rete, più che a periferiche
esterne quali le webcams.
Scheda tecnica Philips ToUcam Pro
• Produttore: Philips
• Risoluzione video 640 × 480 pixels
• max quadri al secondo 60 fps
• colore 24bits
• peso 110 gr.
• lungrezza cavo 2, 95m
CAP. 5 ROBOT CICLOPE
80
§5.2 Le parti costitutive di CICLOPE
Struttura meccanica
Figura 5.2: Modello della struttura meccanica.
Come richiesto dalle specifiche, è stato creato un supporto che permettesse la movimentazione della telecamera in uno spazio sferico. Questo spazio è più grande di
quelle che sono le reali necessità del robot, ma utile per applicazioni generiche.
Il supporto costruito gode di due gradi di libertà, permettendo alla telecamera due
assi di rotazione: beccheggio e imbardata (pitch e yaw).
CAP. 5 ROBOT CICLOPE
81
§5.2 Le parti costitutive di CICLOPE
Figura 5.3: Foto della struttura meccanica.
Il corpo principale è stato realizzato in plexiglass a forma di “L” sul quale sono
fissati due motori stepper ricavati da alcune stampanti in disuso. Proprio per la loro
diversa origine, tali motori hanno precisioni diverse. Da alcune prove condotte si è
concluso che il motore che regolarizza il moto legato all’angolo di beccheggio ha una
precisione di 1,8 gradi/passo, mentre quello legato all’imbardata ha una precisione di
3, 6 − 4 gradi/passo. Questa differenza di precisione e l’uso di motori passo-passo
portano ad una difficoltà maggiore nel centramento del bersaglio quando questo è
poco distante dal centro in quanto potrebbe trovarsi ad una distanza non raggiungibile
attraverso la movimentazione dei motori. In questi rari ma non improbabili casi si
assiste ad un fenomeno di oscillazione del sistema di puntamento. Per ovviare a tale
problema si è ricorsi alla creazione di una regione di tolleranza che indica al robot, nel
caso in cui il bersaglio vi si trovi, di non muoversi ed attendere l’immagine seguente.
CAP. 5 ROBOT CICLOPE
82
§5.2 Le parti costitutive di CICLOPE
Unità di potenza
Figura 5.4: Foto della scheda che fornisce potenza ai motori.
Dopo la scelta di usare i motori stepper, controllati da una parallela, si è reso necessaria la costruzione di un piccolo dispositivo per fornire la potenza necessaria per
la movimentazione. I motori usati lavorano a +5V , forniti dalla parallela stessa, ma
necessitano di una corrente nettamente superiore a quella fornita dal PC attraverso
la sua scheda.
Il circuito realizzato è quindi un piccolo amplificatore in corrente (vd. figura 5.4).
Figura 5.5: Configurazione emettitore comune.
La configurazione elettronica usata è quella di un transistor montato con emet-
CAP. 5 ROBOT CICLOPE
83
§5.2 Le parti costitutive di CICLOPE
titore comune(vd. figura 5.5). In questo tipo di montaggio sussiste la seguente
relazione
ic = βib
dove ib è la corrente entrante nella base del transistor e corrisponde a quella emessa
dalla porta parallela. La corrente prelevata sul collettore ic è quella che viene fornita
alle fasi dei motori passo-passo. La tensione di polarizzazione del circuito è di circa
+10V
Interfacciamento con il pc
L’interfacciamento dei motori al pc, attraverso la scheda parallela, è stata realizzato
in Matlab.
Per creare un oggetto in Matlab che rappresentasse la porta parallela si è usato il
data acquisition toolbox (DAT) che permette la comunicazione tra il programma
e i dispositivi connessi a valle della porta usata.
Per iniziare è necessario avere qualche informazione in più sulla porta che si vuole
usare, è per questo che il DAT mette a disposizione una funzione che restituisce la
lista e le caratteristiche di ogni porta che Matlab è in grado di gestire. La funzione
necessaria è daqhinfo che deve essere usata nel seguente modo:
Figura 5.6: codice matlab per l’uso del comando DAQHINFO.
Nel caso dell’esempio riportato il computer ha una sola porta parallela, ma il
CAP. 5 ROBOT CICLOPE
84
§5.2 Le parti costitutive di CICLOPE
risultato di tale funzione sarebbe stato molto simile anche se il PC avesse avuto più
porte configurate.
Se fossimo nel caso di scelta tra più porte bisognerebbe guardare alla riga “InstalledBoardId”
Figura 5.7: codice matlab per l’uso del comando InstalledBoardId.
La porta parallela consiste in 17 linee digitali. Queste linee sono divise in tre
gruppi chiamati porte. Queste porte sono:
• Port0 (8 linee)
• Port1 (5 linee)
• Port2 (4 linee)
Queste tre porte possono inviare e ricevere dati contemporaneamente. Port0 e Port2
dovrebbero essere configurate per la trasmissione e ricezione di segnali mentre Port1
può essere solo usata in lettura. Nel programma scritto, le 8 linee della Port0 sono
state configurate per inviare solamente, questo perchè si vuole trasmettere un byte
di dati per volta. La Port1 è stata configurata, anche se non usata, secondo quelle
che sono le necessità di comunicazione imposte dal protocollo Centronics, in sostanza
serve per leggere alcune linee che normalmente vengono usate per sincronizzare la
porta con il dispositivo ad essa connesso. In generale sulla Port1 vengono messi i
segnali di busy e ack.
La Port2 in maniera analoga alla Port1 viene usata invece per emettere segnali che
servono per far comunicare con il dispositivo secondo il protocollo sopra accennato.
CAP. 5 ROBOT CICLOPE
85
§5.2 Le parti costitutive di CICLOPE
Quello che normalmente si fa, una volta capito attraverso il comando daqhwinfo
che sul PC in uso è presente una porta parallela, è creare un oggetto di questo tipo
ed aggiungere ad esso le varie linee che si intendono utilizzare, nonché il modo con
cui devono funzionare.
Figura 5.8: Pin-out della porta parallela.
Si è riportato in figura 5.8 come di norma viene configurata una porta parallela
per usare il protocollo Centronics.
Vediamo ora quanto detto in termini di comandi da usare. Per generare un oggetto
di tipo “porta parallela”
Figura 5.9: codice matlab per generare un oggetto di tipo “Porta Parallela”.
Una volta generato l’oggetto pport si devono aggiungere ad esso, attraverso l’uso
CAP. 5 ROBOT CICLOPE
86
§5.2 Le parti costitutive di CICLOPE
del comando addline, le specifiche sulle porte e quindi le linee. Nel progetto sono
state inizializzate nel seguente modo:
Figura 5.10: Inizializzazione delle linee sulla pport.
Una volta svolto quanto detto, digitando il nome della porta sul prompt di comando (nell’esempio fatto “pport”) dovrebbe apparire un resoconto di quanto fatto
precedentemente.
A questo punto, per scrivere un byte sulla porta, si usa il comando putvalue con
la seguente sintassi: “putvalue(Port0, 255)”. Da notare che la porta mantiene il
proprio stato fino a quando non viene eseguita una nuova istruzione che la modifichi.
Il file per inizializzare la porta è: PARALLELA.M che crea un oggetto di nome
pport.
La necessità di avere un byte a disposizione in output nasce dal fatto che i motori stepper usati sono a quattro fasi ognuno. Quindi, per poterli movimentare contemporaneamente, si rendono necessari otto bits corrispondenti quindi ad altrettante
linee-fasi.
Senza entrare troppo nei dettagli costruttivi dei motori passo-passo, occorre sapere
CAP. 5 ROBOT CICLOPE
87
§5.2 Le parti costitutive di CICLOPE
che questi funzionano come un magnete posto al centro di diversi avvolgimenti, facendo circolare in questi corrente con una opportuna sequenza si induce il magnete (nel
nostro caso rappresenta il rotore del motore) a girare. Attraverso la porta parallela si
vogliono quindi accendere gli avvolgimenti uno alla volta in maniera sequenziale.
Figura 5.11: Schema generico connessione parallela-motore.
Per accendere la fase 1 del primo motore è necessario inviare sulla porta
1 × 20 + 0 × 21 + 0 × 22 + 0 × 23 + 0 × 24 + 0 × 25 + 0 × 26 + 0 × 27
quindi per far fare un giro intero al motore bisognerà inviare alla porta, ad esempio,
un ciclo di quattro istruzioni
1. putvalue (Port0,1);
2. putvalue (Port0,2);
3. putvalue (Port0,4);
4. putvalue (Port0,8);
CAP. 5 ROBOT CICLOPE
88
§5.2 Le parti costitutive di CICLOPE
in maniera del tutto analoga, usando i valori 16, 32, 34, 128, si movimenterà anche il
secondo motore.
Quando si vuole muovere un motore e mantenere l’altro fermo nella sua ultima
posizione, bisogna ricordarsi di continuare a mantenere alimentata l’ultima fase di
quel motore altrimenti perderà la coppia che lo mantiene fermo.
Controllo parallela in Java Per i motivi espressi nell’introduzione di questo capitolo, si è reso necessario usare il Matlab 6 per poter soddisfare, in maniera semplice,
sia l’acquisizione video che la gestione della parallela. In un primo momento si era
comunque sviluppato un codice per la gestione della scheda parallela in Java.
Figura 5.12: Sorgente Java per la gestione della parallela.
Sono da farsi due importanti considerazioni:
• ad uno sguardo attento il procedimento logico con il quale crea l’oggetto porta
parallela risulta identico a quello seguito in Matlab
CAP. 5 ROBOT CICLOPE
89
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
• Il package javax.comm, responsabile dell’interfacciamento con le periferiche pc
(porta seriale e parallela) è stato progettato con il preciso scopo, nel caso della
porta parallela, di avere una stampante collegata ad essa. Questo implica che le
“porte” sono configurate rispetto al protocollo Centronics e quindi il programma
non invia bytes sulla porta se non è sicuro che il dispositivo a valle non è, ad
esempio, busy o che ci sia carta. Per ovviare a tale conveniente è sufficiente
portare allo stato logico di high i piedini inerenti alla Port1 facendo attenzione
alla capacità invertente di alcuni canali della porta (vd. tabella 5.8)
5.3
Algoritmo di riconoscimento e legge di controllo
per l’inseguimento del bersaglio
Una volta acquisita l’immagine log-polar, tramite rasformazione, si pone il problema
del riconoscimento del bersaglio. Nel caso dell’esperimento eseguito, il riferimento che
si vuole inseguire è un piccolo dischetto di colore nero opaco. La forma di questo
è una circonferenza di circa 10 cm di diametro che viene mosso su una superficie di
colore uniforme in netto contrasto con il colore del bersaglio.
Tutto questo è stato fatto per facilitare e soprattutto velocizzare gli algoritmi di
analisi dell’immagine.
Prima di entrare nel merito dell’algoritmo è necessario capire bene come si presenta
il bersaglio nelle immagini log-polar.
CAP. 5 ROBOT CICLOPE
90
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Figura 5.13: Due casi di conversione di immagini in log-polar. A sinistra il caso
di bersaglio centrato e a destra il caso di bersaglio decentrato. Per ogni caso viene
riportato l’immagine TV e al suo fianco la sua conversione log-polar.
Come si vede nella figura 5.13 nel caso in cui il bersaglio è centrato, vista la
simmetria di quest’ultimo, l’immagine log-polar corrisponde ad un rettangolo il cui
lato verticale destro rapppresenta la circonferenza.
Più evidente, quanto appena detto, nell’immagine di destra dove il bersaglio non
risulta centrato e quindi nella trasformazione si ha una deformazione massima del
profilo del rettangolo in corrispondenza della direzione in cui il target si è spostato.
Si ricorda che gli assi dell’immagine log-polar sono, sull’asse orizzontale, la distanza
dal centro (espressa logaritmicamente) e sull’asse verticale i diversi settori o “spokes”
(crescono dall’alto verso il basso, alla riga 1 corrisponde il settore 0 gradi, l’ultima
riga a 359 gradi).
Analisi dell’immagine Da quanto osservato prima, nel caso il bersaglio venga
inizialmente centrato, risulta facile inseguirlo osservando il solo profilo esterno.
CAP. 5 ROBOT CICLOPE
91
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Figura 5.14: Codice per l’analisi delle immagini.
CAP. 5 ROBOT CICLOPE
92
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Figura 5.15: Codice per l’analisi delle immagini.
CAP. 5 ROBOT CICLOPE
93
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Figura 5.16: Codice per l’analisi delle immagini.
Come si vede dal codice riportato, per riconoscere la posizione del bersaglio bisogna
analizzare il profilo verticale destro dell’immagine log-polar.
CAP. 5 ROBOT CICLOPE
94
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Figura 5.17: Profilo dell’immagine nel caso di bersaglio decentrato.
Osservando tale profilo, risulta evidente che se il target si è spostato dal centro
esatto del fotogramma acquisito, troveremo una deformazione del profilo alla riga
corrispondente alla direzione in cui si è mosso (vedi figura 5.17). L’algoritmo implementato analizza la matrice corrispondente all’immagine acquisita da destra verso
sinistra e dall’alto verso il basso. Per ogni riga analizza i singoli pixel e percorre la riga
finchè non trova un pixel nero (la soglia del colore può essere modificata in funzione
delle condizioni operative). A questo punto l’algoritmo memorizza la riga, la distanza
dal centro e passa alla riga successiva ripetendo la ricerca del pixel nero.
Se la distanza di questo nuovo pixel è maggiore di quella precedente, si memorizzano tali nuove coordinate. Operando così su tutte le righe, si otterranno alla fine
dell’algoritmo le coordinate del punto più distante dal bordo sinistro dell’immagine (corrispondente al centro dell’immagine TV). Tali coordinate corrisponderanno al
“ring” e allo “spoke” verso il quale il dischetto si sta muovendo.
Quest’algoritmo non è il migliore, in quanto analizza tutte le righe della figura a
disposizione; sicuramente è molto veloce se lo si confronta con gli algoritmi classici
usati nell’analisi di immagini TV (ad esempio Sobel, Laplace...).
CAP. 5 ROBOT CICLOPE
95
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Infatti, mentre per analizzare immagini TV occorrono almeno m × n × R, dove si
è indicato con m e n le dimensioni dell’immagine e con R la dimensione del Kernel
dell’operatore, nel caso log-polar occorre analizzare in media
m×n
5
punti, questo è
dovuto alle caratteristiche proprie dell’immagine.
Figura 5.18: Immagine TV e log polar quando il bersaglio si trova molto lontano dal
centro.
L’algoritmo mostrato funziona anche quando il bersaglio non è centrato (vd. fig.
5.18). In questo caso l’algoritmo è estremamente dispendioso in termini computazionali perchè analizza comunque tutta l’immagine.
Figura 5.19: Caso bersaglio giace non centrato a cavallo del raggio a 0 gradi.
CAP. 5 ROBOT CICLOPE
96
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Questo è dovuto al caso in cui il bersaglio si trovi non centrato e lungo l’asse
positivo delle x (vedi figura 5.19 ), in questo caso il bersaglio si presenta spezzato
in due parti nel piano log-polar, quindi è necessario analizzare tutta l’immagine a
meno di non avere ulteriori informazioni a priori (ad esempio la conoscenza di alcune
caratteristische del moto del bersaglio: traiettoria, velocità ...).
A completamento dell’algoritmo è stato implementato anche un sistema di ricerca
del massimo del profilo nel caso il bersaglio, tra due acquisizioni, rimanga sempre
molto vicino al centro.
Figura 5.20: Spiegazione grafica dell’algoritmo ottimizzato.
In tale caso è sufficiente eseguire la scansione dall’alto verso il basso e da sinistra
verso destra cercando per ogni colonna il primo pixel nero. L’ algoritmo si ferma
alla prima colonna vuota (vd. figura 5.20). In questa maniera l’algoritmo diventa
estremamente rapido e leggero come carico di lavoro per il processore.
Unendo i due algoritmi illustrati è possibile ricavare informazioni aggiuntive quali le coordinate del centro del bersaglio. Quest’ultime operazioni comportano la
CAP. 5 ROBOT CICLOPE
97
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
conoscenza della distanza del piano sul quale il target si muove rispetto alla telecamera.
Legge di controllo
La legge scelta è di tipo proporzionale: si analizzeranno di seguito i motivi di tale
scelta. Attraverso l’analisi dell’immagine log-polar è possibile sapere la direzione e
la distanza, espressa in pixel, della posizione del bersaglio rispetto al centro. Non
conoscendo la distanza del target dalla telecamera, non è possibile quantificare la
distanza di decentramento di quest’ultimo e quindi non si è in grado di calcolare il
numero di passi che i motori devono fare per portare il bersaglio al centro del campo
visivo.
Da quest’ultima considerazione nasce la necessità di muovere il robot con una
velocità variabile a seconda della distanza espressa in pixel dal centro nella direzione
determinata in precedenza. Quindi si è scelto di determinare la velocità con cui
muovere i motori in maniera proporzionale all’errore di posizione stimato
vmotori = vmin × errposizione
Movimentazione dei motori L’implementazione del codice per la movimentazione dei motori è stata non semplice visto che il Matlab non gestisce processi in parallelo.
La necessità di tale requisito nasce dal dover muovere i motori passo-passo contemporaneamente al campionamento dell’immagini. Altro problema è stato quello di dover
gestire gli spostamenti dei singoli motori al fine di poter muovere la telecamera lungo
tutte le possibili direzioni.
Vista l’impossibilità di avere buone precisioni con tali classi di motori, a meno di
ricorrere a tecniche di micro-stepping, si è pensato di scomporre lo spazio visivo in
otto settori
CAP. 5 ROBOT CICLOPE
98
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
Figura 5.21: Mirino visivo. Scomposizione dello spazio visivo in otto settori.
in maniera tale da dover considerare otto possibili movimentazioni molto precise
anche se prodotte con motori stepper:
• Orizzontale destra –> Motore yaw 1 passo
• Orizzontale sinistra –> Motore yaw -1 passo
• Verticale alto –> Motore pitch 1 passo
• Verticale basso –> Motore pitch -1 passo
• Diagonale
π
4
–> Motore yaw 1 passo , Motore pitch 1 passo
• Diagonale − π4 –> Motore yaw 1 passo, Motore pitch -1 passo
CAP. 5 ROBOT CICLOPE
99
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
• Diagonale 34 π –> Motore yaw -1 passo, Motore pitch 1 passo
• Diagonale − 34 π –> Motore yaw -1 passo, Motore pitch -1 passo
Questo vuol dire che una volta determinata la direzione e la posizione del centro del
bersaglio, viene decisa una delle otto direzioni e i motori vengono spostati con velocità proporzionale alla distanza in pixel. Durante lo spostamento viene ricampionata
l’immagine e quindi determinata la “nuova” posizione del target, se si suppone per
semplicità che il corpo sia rimasto fermo, sarà molto vicino al centro del “mirino”.
Essendo più vicino, i settori sono molto più piccoli e questo permette di avere una
maggiore precisione nella scelta della direzione successiva.
Figura 5.22: Differenza di precisione quando il bersaglio è vicino o lontano dal centro
del mirino.
Si può facilmente verificare che se il bersaglio non rimane fermo, purchè il robot
abbia dinamiche molto veloci, è sempre possibile portare il bersaglio al centro con una
buona precisione.
La griglia creata per la determinazione della direzione che devono seguire i motori
può essere infittita se vengono usati motori in corrente continua. Infatti, in tal caso,
è possibile muoversi lungo tutte le pendenze delle rette, perchè al posto di regolare
CAP. 5 ROBOT CICLOPE
100
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
il numero dei passi (discreti) si controlleranno le velocità di rotazione e quindi la
proporzionalità degli spostamenti lungo i due assi y = mx dove y rappresenta lo
spostamento dovuto al motore di pitch, la x a quello di yaw e la m rappresenta il
coeffiente angolare ovvero la direzione lungo la quale ci si vuole spostare.
Si è detto che durante lo spostamento si deve ricampionare l’immagine, quest’operazione prevede l’esistenza di due processi che lavorano contemporaneamente. Il
Matlab non prevede tale situazione e quindi si è ricorsi all’uso di un microcontrollore
pic18f452 esterno a cui di demandano le operazioni di movimentazione.
Figura 5.23: Schema logico di funzionamento della comunicazione parallela-pic18f452.
Per quanto riguarda l’implementazione dei driver e l’interfacciamento del pic con
la parallela si rimanda alla tesi di Giuseppe Boccolato, dove viene affrontata nel
CAP. 5 ROBOT CICLOPE
101
§5.3 Algoritmo di riconoscimento e legge di controllo per l’inseguimento del bersaglio
dettaglio la scelta dei microcontrollori e il linguaggio di programmazione nonchè l’uso
della scheda di test MPLAB ICD2.
CAP. 5 ROBOT CICLOPE
102
Capitolo 6
Conclusioni
La progettazione del robot per l’inseguimento ha dimostrato che è possibile usare
telecamere log-polar anche per scopi robotici. Dal punto di vista delle prestazioni,
nonostante il sensore retina-like fosse emulato, sembrano essere molto buone. Unico
difetto è l’uso per il riconoscimento di profili, in quanto la telecamera tende a deformare e le immagini con estrema facilità a mano a mano che ci allontana dal centro.
Tale inconveniente porta quasi sempre all’utilizzo del solo centro dell’immagine acquisita. Questo implica, nel caso d’inseguimento, di dover centrare almeno in un primo
momento la telecamera sul bersaglio o usare dispositivi esterni (radar, ultrasuoni...)
per aiutare la telecamera a cercare inizialmente il bersaglio. Proprio per questo motivo, nel caso dell’algoritmo implementato, se il bersaglio esce dal campo visivo del
robot quest’ultimo non sa più cosa fare e di default rimane fermo nella speranza che
il bersaglio ripassi davanti a lui.
Un’altro aspetto che si vuole sottolineare è l’uso di un bersaglio di colore nettamente contrastante rispetto al fondale su cui si muove, infatti questo è stato usato solo
per velocizzare l’algoritmo e semplificare il lavoro, ma da un punto di vista operativo,
basterebbe apporre sul target un piccolo marker di colore fucsia. La scelta di questo
colore non è casuale infatti, oltre a non essere un colore molto diffuso, è anche un
CAP. 6 Conclusioni
103
colore che ha una forte componente di rosso e una leggera di blu.
Visto che la telecamera acquisisce in RGB basterà analizzare la matrice del rosso
e come controprova quella del blu, ottenendo così informazioni molto simili a quelle
ricavate in laboratorio. Tale tecnica è quella comunemente usata da alcuni piccoli
robot da compagnia quali, solo per citarne uno dei più famosi, AIBO della Sony.
Per quanto riguarda la movimentazione, si è già detto che i motori stepper non
soddisfano a pieno le necessità richieste. L’ideale sarebbe l’uso di motori in corrente continua, la motivazione è che permettono precisioni maggiori e soprattutto
l’implementazione di leggi di controllo più raffinate quale una PD.
CAP. 6 Conclusioni
104