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 unpixel 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