universit`a degli studi di parma algoritmi ottimizzati per la
Transcript
universit`a degli studi di parma algoritmi ottimizzati per la
UNIVERSITÀ DEGLI STUDI DI PARMA FACOLTÀ DI INGEGNERIA CORSO DI LAUREA IN INGEGNERIA INFORMATICA ALGORITMI OTTIMIZZATI PER LA LOCALIZZAZIONE DI OSTACOLI IN AMBIENTI NON STRUTTURATI MEDIANTE VISIONE STEREO Relatore: Chiar.mo Prof. ALBERTO BROGGI Correlatori: Dott. Ing. CLAUDIO CARAFFI Dott. Ing. PAOLO MEDICI Candidato: PAOLO ZANI ANNO ACCADEMICO 2004–05 ancora una volta, a Francesca Indice Premessa 1 Introduzione 3 1 2 3 4 Inquadramento del problema . . . . . . . . . . . . . . . . . . . . . . . . . 6 Principi guida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Letture consigliate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 I principi alla base della visione stereoscopica 12 1.1 La V-disparity image . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.2 La disparity space image . . . . . . . . . . . . . . . . . . . . . . . . 22 Il sistema stereo a bordo del Terramax 24 2.1 Disposizione e parametri principali delle telecamere . . . . . . . . . . 24 2.1.1 Meccanismi di sincronizzazione . . . . . . . . . . . . . . . . 27 2.1.2 Altri problemi . . . . . . . . . . . . . . . . . . . . . . . . . 28 Vibrazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Sporco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Costruzione della V-Disparity image 30 3.1 33 Ottimizzazioni al codice . . . . . . . . . . . . . . . . . . . . . . . . Costruzione della disparity space image 41 4.1 43 Ottimizzazioni al codice . . . . . . . . . . . . . . . . . . . . . . . . ii Indice iii 5 Individuazione degli ostacoli 54 5.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.2 Falsi negativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3 Falsi positivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.4 Mappatura nel mondo reale . . . . . . . . . . . . . . . . . . . . . . . 62 6 7 Risultati 66 6.1 66 Analisi dei tempi di elaborazione . . . . . . . . . . . . . . . . . . . . Conclusioni 71 7.1 Valutazione degli algoritmi . . . . . . . . . . . . . . . . . . . . . . . 71 7.2 Sviluppi futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.2.1 V-Disparity image . . . . . . . . . . . . . . . . . . . . . . . 72 7.2.2 disparity space image . . . . . . . . . . . . . . . . . . . . . . 72 7.2.3 Rilevamento degli ostacoli . . . . . . . . . . . . . . . . . . . 73 Bibliografia 75 Ringraziamenti 79 Elenco delle figure 1 L’Oshkosh MTVR . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Sensori a bordo del Terramax . . . . . . . . . . . . . . . . . . . . . . 2 3 Il Terramax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4 Esempio di immagini stereo . . . . . . . . . . . . . . . . . . . . . . 3 5 Esempio di V-disparity image . . . . . . . . . . . . . . . . . . . . . . 4 6 Esempio di disparity space image . . . . . . . . . . . . . . . . . . . 5 7 Sistema di riferimento per il Terramax . . . . . . . . . . . . . . . . . 5 8 Esempio di ostacoli rilevati . . . . . . . . . . . . . . . . . . . . . . . 6 9 Operazione di tipo SIMD . . . . . . . . . . . . . . . . . . . . . . . . 9 1.1 Disparità di alcuni ostacoli . . . . . . . . . . . . . . . . . . . . . . . 13 1.2 Modello pinhole box . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3 Sistema di telecamere stereo . . . . . . . . . . . . . . . . . . . . . . 15 1.4 Proiezione di un punto del mondo reale . . . . . . . . . . . . . . . . 16 1.5 Piani ad uguale disparità . . . . . . . . . . . . . . . . . . . . . . . . 17 1.6 Schema della disposizione di una coppia di telecamere stereo . . . . . 19 1.7 Superfici ad uguale disparità e terreno . . . . . . . . . . . . . . . . . 19 1.8 Immagini stereo sintetiche . . . . . . . . . . . . . . . . . . . . . . . 20 1.9 Abbinamento tra righe dell’immagine . . . . . . . . . . . . . . . . . 21 1.10 V-disparity image . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.11 Disparity space image . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1 Baseline del sistema di acquisizione . . . . . . . . . . . . . . . . . . 25 2.2 Telecamera e relativo supporto regolabile . . . . . . . . . . . . . . . 26 iv Elenco delle figure v 2.3 Dettaglio delle viti di regolazione . . . . . . . . . . . . . . . . . . . . 27 2.4 Il SyncBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.5 Il fissaggio del sistema di visione al Terramax . . . . . . . . . . . . . 28 2.6 Dettaglio delle protezioni per le telecamere . . . . . . . . . . . . . . 29 3.1 Immagini stereo di una strada asfaltata . . . . . . . . . . . . . . . . . 30 3.2 Immagini di Sobel di una strada asfaltata . . . . . . . . . . . . . . . . 31 3.3 Immagini di Sobel ternarizzate di una strada asfaltata . . . . . . . . . 32 3.4 V-disparity image di una strada asfaltata . . . . . . . . . . . . . . . . 32 3.5 Elaborazione svolta dall’istruzione psadbw . . . . . . . . . . . . . . 35 3.6 Calcolo della correlazione tra due righe omologhe . . . . . . . . . . . 36 4.1 Immagini stereo di un centro abitato . . . . . . . . . . . . . . . . . . 41 4.2 Immagini di Sobel di un centro abitato . . . . . . . . . . . . . . . . . 42 4.3 disparity space image di un centro abitato (106x80 pixel) . . . . . . . 43 4.4 disparity space image di un centro abitato (320x240 pixel) . . . . . . 44 4.5 Rappresentazioni in memoria di un’immagine . . . . . . . . . . . . . 46 4.6 Calcolo della correlazione tra due finestre . . . . . . . . . . . . . . . 47 4.7 Caricamento ottimizzato della finestra sinistra . . . . . . . . . . . . . 49 5.1 Rilevazione di ostacoli ai bordi della carreggiata . . . . . . . . . . . . 56 5.2 Rilevazione di ostacoli in presenza di ombre . . . . . . . . . . . . . . 56 5.3 Rilevazione di una staccionata . . . . . . . . . . . . . . . . . . . . . 57 5.4 Rilevazione di un veicolo sopraggiungente . . . . . . . . . . . . . . . 57 5.5 Rilevazione di una recinzione . . . . . . . . . . . . . . . . . . . . . . 58 5.6 Rilevazione di bidoni in lontananza . . . . . . . . . . . . . . . . . . . 58 5.7 Rilevazione di bidoni vicini . . . . . . . . . . . . . . . . . . . . . . . 59 5.8 Rilevazione di un ponte . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.9 Rilevazione di cespugli . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.10 Oggetto che appare in modo diverso nelle due immagini . . . . . . . 61 5.11 Falso positivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.12 Mappa di una recinzione . . . . . . . . . . . . . . . . . . . . . . . . 64 Elenco delle figure vi 5.13 Mappa di alcuni bidoni . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.14 Mappa di un viale alberato . . . . . . . . . . . . . . . . . . . . . . . 65 5.15 Mappa di un campo . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Elenco delle tabelle 3.1 Sostituzione sui valori del filtro di Sobel ternarizzato . . . . . . . . . 34 3.2 Nomi dei più comuni raggruppamenti di bit . . . . . . . . . . . . . . 37 6.1 Tempi di esecuzione sulla prima macchina di test . . . . . . . . . . . 67 6.2 Tempi di esecuzione sulla seconda macchina di test . . . . . . . . . . 68 vii Elenco degli Algoritmi 1 Algoritmo di base per il calcolo della VDI . . . . . . . . . . . . . . . 33 2 Algoritmo ottimizzato per il calcolo della VDI (versione 1) . . . . . . 38 3 Algoritmo ottimizzato per il calcolo della VDI (versione 2) . . . . . . 40 4 Algoritmo di base per il calcolo della DSI . . . . . . . . . . . . . . . 45 5 Algoritmo ottimizzato per il calcolo della DSI (Versione 1, Parte 1) . . 50 6 Algoritmo ottimizzato per il calcolo della DSI (Versione 1, Parte 2) . . 51 7 Algoritmo ottimizzato per il calcolo della DSI (Versione 2, Parte 1) . . 52 8 Algoritmo ottimizzato per il calcolo della DSI (Versione 2, Parte 2) . . 53 viii Premessa L’8 Ottobre 2005 si svolgerà la seconda edizione della Grand Challenge, una gara in cui veicoli autonomi si affronteranno su un percorso di 175 miglia1 nella zona desertica che collega Los Angeles a Las Vegas, tra sterrati, corsi d’acqua, sabbia e rocce, ostacoli naturali (come fossati, massi e vegetazione di ogni tipo) e artificiali (pali, reti metalliche, costruzioni in cemento armato e cavalli di frisia). Vincitrice del premio di due milioni di dollari sarà la squadra il cui mezzo avrà completato il percorso stabilito nel minor tempo (e comunque entro il limite massimo di dieci ore), senza aver recato danni all’ambiente circostante. Anche quest’anno il team Terramax, di cui il Laboratorio di Visione Artificiale del Diparitmento di Ingegneria dell’Informazione dell’Università di Parma2 fa parte, assieme ad Oshkosh Truck Corporation e Rockwell Collins Inc., parteciperà alle fasi finali della competizione, dopo averne superato le selezioni, tenute nella primavera del 2005; il veicolo utilizzato, un Oshkosh MTVR3 (visibile in figura 1), è stato equipaggiato con un sistema di acquisizione video formato da cinque telecamere MicroPix C-640, e con un laserscanner IBEO ALASCA (figura 2): questa strumentazione, assieme al software sviluppato dal VisLab, lo ha reso capace di ricostruire l’ambiente circostante, pianificare una traiettoria che eviti gli ostacoli presenti4 , e seguirla, grazie al sistema drive-by-wire installato; il risultato finale è il Terramax, ritratto in figura 3. In questo contesto si è sviluppato il lavoro presentato in questa tesi. 1 281,6 Km qui in avanti, VisLab 3 Medium Tactical Vehichle Replacement 4 Il path-planner è stato realizzato da Rockwell Collins, Inc. 2 Da 1 Premessa 2 Figura 1: L’Oshkosh MTVR (a) Telecamera MicroPix C-640 (b) Laserscanner IBEO ALASCA Figura 2: Sensori a bordo del Terramax Figura 3: Il Terramax Introduzione In questa tesi si è trattato il problema della rilevazione di ostacoli in un ambiente non strutturato, attraverso un sistema di telecamere stereo montate su un veicolo, rivolgendo una particolare attenzione al contenimento dei tempi di elaborazione. Una corretta percezione dello spazio circostante un mezzo richiede diversi tipi di elaborazione sulla coppia di immagini stereo acquisite (delle quali si può osservare un esempio in figura 4) per poter ricavare, dalla grossa mole di informazione che queste contengono, la disposizione degli eventuali ostacoli presenti. (a) Immagine sinistra (b) Immagine destra Figura 4: Immagini stereo, acquisite nello stesso istante dalle telecamere di sinistra e di destra La prima operazione da svolgere consiste nello stimare l’andamento del terreno, attraverso un metodo (detto della V-disparity image), introdotto da Raphael Labayrade e Didier Aubert [24, 20, 21, 23, 22], e ripreso all’interno del VisLab da Rean Isabella Fedriga [10] e Claudio Caraffi [6, 7] (figura 5). A partire da questa approssimazione iniziale si costruisce una immagine di dispa3 Introduzione 4 Figura 5: V-disparity image; nel paragrafo 1.1 si vedrà come sia possibile ricavare da questa l’andamento del terreno rità, o Disparity Space Image (DSI) (visibile in figura 6), che permette di associare ai pixel delle immagini acquisite le coordinate dei punti del mondo reale che li hanno generati, rispetto ad un sistema di riferimento solidale col veicolo, illustrato in figura 7. L’ultima fase consiste nell’individuare, all’interno della ricostruzione tridimensionale appena ottenuta, gli insiemi di punti che si configurano come ostacoli da evitare5 , e di questi creare una mappa, che sarà poi integrata con quelle generate dagli altri sensori, e utilizzata per pianificare il moto del mezzo; i risultati ottenibili sono illustrati in figura 8. 5 In questa categoria ricadono, ad esempio, pali, cespugli e recinzioni Introduzione 5 Figura 6: Disparity Space Image Le tonalità più scure (blu e viola) rappresentano punti del mondo lontani, quelle più chiare (arancione, giallo e verde) punti vicini Figura 7: Sistema di riferimento per il Terramax Inquadramento del problema (a) Immagine degli ostacoli 6 (b) Mappa Figura 8: Esempio di ostacoli rilevati Nell’immagine di sinistra le macchie rappresentano le zone della DSI classificate come ostacoli (il colore è stato attribuito utilizzando la stessa codifica impiegata per la DSI), mentre in quella di destra ogni poligono ne rappresenta, secondo una vista dall’alto, la posizione nel mondo Inquadramento del problema A poco più di sei mesi dalla gara, e nell’imminenza delle prime eliminatorie, era importante pianificare con attenzione la strada da intraprendere per realizzare una nuova versione, con maggiori prestazioni ed una più grande versatilità, del software esistente6 , mentre questo era ancora in fase di sviluppo. La scelta fu di produrre una libreria di oggetti del tutto nuovi, che portassero i 6 Si tratta dei moduli per GOLD (Generic Obstacle and Lane Detection, il framework utilizzato nel VisLab per lo sviluppo degli algoritmi) scritti da Claudio Caraffi in occasione della prima edizione della Grand Challenge [7] Principi guida 7 miglioramenti desiderati, pur mantenendo la compatibilità col sistema già presente, di modo che fosse possibile via via integrarli al suo interno, nell’attesa di una più ampia ristrutturazione della funzionalità principale. Una volta deciso come procedere, restavano comunque da affrontare i problemi tipici dell’elaborazione di immagini stereo, inevitabilmente emersi durante la prima stesura del codice: la notevole quantità di dati da trattare, ed i tempi occorrenti per farlo, che nel nostro caso dovevano essere contenuti, viste le esigenze di pianificazione del moto. La frequenza di aggiornamento minima era stata stabilita in 5Hz, e l’obiettivo poteva considerarsi raggiunto, a costo, però, di utilizzare per la DSI una risoluzione effettiva di soli 106x80 pixel; il primo passo fu, dunque, cercare di portarla a 320x240 pixel, senza aumentare in proporzione i tempi di elaborazione. Visti i risultati ottenuti, si passò in seguito ad accelerare anche il calcolo della V-disparity image, anch’esso particolarmente oneroso. Mentre la linea da seguire per le due attività appena descritte era apparsa fin da subito ben definita, sia per l’esperienza maturata nel corso della prima edizione della Grand Challenge, sia per la presenza, in letteratura, di algoritmi consolidati che le affrontano 7 , il processo di obstacle detection 8 restava un argomento dibattuto: si scelse, dunque, di tentare un approccio differente da quello seguito fino a quel momento, e confrontare le prestazioni dei due diversi sistemi. Principi guida Durante tutto il processo di sviluppo del software i requisiti fondamentali sono stati la modularità (in modo da rendere semplici integrazione e riuso di quanto veniva via via prodotto), e l’efficienza (visti i vincoli, in termini di prestazioni, cui bisognava far fronte): la scelta è caduta subito sul C++, linguaggio che permette di lavorare ad un alto livello di astrazione nella fase di progettazione delle interfacce, pur mante7 La loro applicazione, comunque, ha richiesto una particolare attenzione, date le peculiarità del caso in esame (le baseline utilizzate sono molto larghe, e si affrontano per lo più ambienti non strutturati) 8 Rilevamento di ostacoli Principi guida 8 nendo la possibilità di realizzare implementazioni molto veloci (è possibile addirittura mescolare, come è accaduto nel nostro caso, codice assembly e C++). Quando sono necessarie prestazioni elevate, comunque, la flessibilità del linguaggio utilizzato da sola non basta: occorre un’attenta analisi del problema che si sta affrontando, in modo da riuscire a valutarne tutti i diversi aspetti. La prima cosa da fare, in questi casi, è cercare un algoritmo più efficiente: tentare di migliorare le prestazioni ottenibili, ad esempio, è uno spreco di tempo, quando la complessità della soluzione analitica adottata è comunque esponenziale. Il secondo livello a cui si può intervenire è quello dell’implementazione: la stesura del codice, infatti, deve tener conto anche delle caratteristiche della macchina su cui questo dovrà girare (processore, memoria, dischi) e del compilatore utilizzato (certi costrutti sintattici, ad esempio, vengono più facilmente riconosciuti e ottimizzati, quindi, se è il caso, è preferibile utilizzarli). L’ultima possibilità è l’ottimizzazione a basso livello, che mette sı̀ a disposizione del programmatore tutte le risorse del sistema, ma che presenta anche notevoli difficoltà, dal momento che spesso il codice prodotto risulta poco leggibile (e quindi scarsamente manutenibile), e la probabilità di introdurre errori è molto alta. Interventi di questo tipo, dunque, vanno limitati alle parti più critiche del codice, ovvero i punti in cui la CPU spende la maggior parte del tempo9 : quelli, cioè, dove risparmiare un ciclo di clock vuol dire evitare che questo sia ripetuto inutilmente milioni o miliardi di volte. Nel nostro caso, l’algoritmo è ben definito, e la sua complessità deriva, come si vedrà in seguito, dall’elevato numero di confronti necessari per abbinare i punti omologhi in una coppia di immagini: siamo in una di quelle situazioni in cui anche un’ottima implementazione non può essere di grosso aiuto. La soluzione a questo problema esiste, ma è particolare, dal momento che coinvolge contemporaneamente almeno due dei tre i livelli di ottimizzazione appena esposti: si tratta, infatti, di modificare parte dell’algoritmo, per poter utilizzare le capacità di 9 Tali sezioni sono solitamente dette innermost loop Principi guida 9 calcolo parallelo SIMD (Single Instruction Multiple Data) dei processori moderni, e di implementare queste operazioni direttamente in linguaggio macchina. Molte attività comuni nel mondo dell’informatica, come la codifica e decodifica audio e video, l’elaborazione di immagini, la compressione dati e la crittografia richiedono di ripetere le medesime operazioni su un numero elevato di elementi: queste ragioni hanno spinto, nel tempo, le case produttrici di microprocessori general purpose ad estendere i set di istruzioni esistenti, in modo che fosse possibile accelerare i processi appena elencati, eseguendo la stessa operazione su più dati in parallelo (questo principio è illustrato in figura 9). Figura 9: Operazione di tipo SIMD L’elaborazione di tipo SIMD consiste nell’applicare l’operatore op in parallelo sugli operandi contenuti nei registri A e B; il tempo di calcolo risulta idealmente ridotto di un fattore n (dove n indica il numero di operandi per registro) rispetto alla versione sequenziale della medesima operazione, anche se, come si vderà in seguito, le prestazioni ottenibili vengono limitate dalla lentezza degli accessi alla memoria, necessari sia al caricamento dei dati da elaborare che al salvataggio dei risultati. La difficoltà maggiore nell’utilizzare questo tipo di istruzioni risiede nel fatto che, al giorno d’oggi, i compilatori sono in grado di parallelizzare solo pattern di codice Letture consigliate 10 molto semplici10 , rendendo pressochè indispensabile l’intervento umano. La nostra scelta, dunque, è stata quella di sfruttare gli instruction set MMX ed SSE R R messi a disposizione dai processori Intel a partire dalla famiglia Pentium III per velocizzare le operazioni di calcolo del costo di abbinamento tra i punti delle coppie di immagini acquisite. Il risultato finale è un sistema che, per le sue prestazioni, può essere considerato soft real-time, dato che i tempi di elaborazione non possono essere garantiti, ma risultano comunque, in media, abbastanza contenuti da poter permettere una adeguata interazione tra il Terramax e l’ambiente che lo circonda. Letture consigliate Qui di seguito vengono presentate alcune letture che possono risultare interessanti per chi voglia approfondire i temi relativi alla visione stereoscopica, all’ottimizzazione del codice o anche solamente alla Grand Challenge: • Questa tesi • La tassonomia di Daniel Scharstein [28], che contiene una accurata comparazione di molti sistemi stereo presenti in letteratura • Gli articoli di Takeo Kanade [17, 16], che propongono un’approfondita analisi degli aspetti teorici ed implementativi legati ad un calcolo efficace ed efficiente dell’immagine di disparità • Il manuale di Agner Fog [11], che si occupa con un notevole grado di dettaglio degli aspetti legati alla stesura di codice ottimizzato per i processori della R R famiglia Intel Pentium • La tesi di laurea di Claudio Caraffi [7], che ha tratta l’originaria implementazione del sistema di visione stereo ripreso in questo lavoro 10 Ad esempio, il GCC (GNU Compiler Collection) dalla versione 4 inizia a presentare un’unità dedicata all’autovettorizzazione del codice Letture consigliate 11 • La tesi di laurea di Pier Paolo Porta [27], che presenta gli aspetti legati all’integrazione dei diversi sensori presenti a bordo del veicolo che parteciperà alla seconda edizione della Grand Challenge Capitolo 1 I principi alla base della visione stereoscopica Ogni giorno i nostri occhi ci guidano con sicurezza all’interno di un mondo a tre dimensioni molto complesso, e ci riescono perchè uno stesso oggetto è visto, da ciascuno di loro, sotto angoli appena diversi; allo stesso modo, nella visione artificiale stereoscopica, un punto dello spazio appare, nelle due immagini, in posizioni differenti: la distanza tra tali posizioni viene detta disparità. Nella figura 1.1 si può notare come gli oggetti presentino disparità sempre minori via via che questi si trovino ad una maggiore distanza dal punto di osservazione; tale fatto ci induce a concludere in modo intuitivo che: note le caratteristiche del sistema di acquisizione che si sta utilizzando, e la disparità con cui un oggetto appare, è possibile ricavare la sua posizione nel mondo Per dare una giustificazione rigorosa a questa affermazione è necessario introdurre un modello geometrico, detto pinhole box 1 , che approssimi il fenomeno fisico che porta alla formazione dell’immagine acquisita dalla telecamera; tale modello è riprodotto in figura 1.2. 1 Alla lettera, scatola su cui è stato praticato un foro con uno spillo 12 Capitolo 1. I principi alla base della visione stereoscopica Figura 1.1: Disparità di alcuni ostacoli L’immagine superiore è stata acquisita con la telecamera di sinistra, mentre quella inferiore con la telecamera di destra; si può notare come la disparità del fanale posteriore sinistro del veicolo parcheggiato sia maggiore di quella del traliccio visibile sullo sfondo (e ciò è del tutto naturale, dal momento che il primo oggetto è più vicino del secondo al punto di osservazione) 13 Capitolo 1. I principi alla base della visione stereoscopica 14 f f Punto di fuoco Immagine Piano dell’immagine Piano dell’immagine simmetrica Figura 1.2: Modello pinhole box I raggi luminosi provenienti dall’esterno attraversano il piccolo foro sulla scatola, e penetrano al suo interno, andando a formare l’immagine rovesciata sul lato opposto. Nella realtà, i raggi luminosi vengono concentrati sul sensore della telecamera dalle lenti ottiche, che determinano anche la distanza tra il punto di fuoco e il piano dell’immagine, contrassegnata in figura 1.2 con la lettera f, detta lunghezza focale; bisogna, comunque, tenere conto del fatto che tali lenti introducono delle distorsioni: esiste un metodo, proposto da Tsai [32], che permette di costruire una LUT (Look Up Table) con cui effettuare un’operazione, detta rettificazione, grazie a cui è possibile rimuoverle dalle immagini acquisite2 . La piramide centrata sul punto di fuoco, e contenente i punti del mondo che possono essere proiettati sull’immagine, rappresenta il campo visivo, e la sua apertura determina l’angolo di vista della telecamera, che diminuisce all’aumentare della lunghezza focale; le dimensioni e le proporzioni dell’immagine, infine, vengono determinate dall’estensione della matrice di sensori della telecamera. Come è stato già accennato, l’immagine acquisita risulta essere capovolta; prima di subire ulteriori elaborazioni deve, dunque, essere raddrizzata, attraverso un processo hardware (interno alla telecamera), o software. Per maggiore chiarezza nella trattazione successiva ci si riferirà ad un piano, det2 All’interno di GOLD è già presente uno strumento, denominato ImageLUT, in grado di eseguire questo tipo di elaborazione Capitolo 1. I principi alla base della visione stereoscopica 15 to piano dell’immagine simmetrica, su cui viene proiettata una immagine virtuale corrispondente all’immagine reale già raddrizzata. Si consideri ora il particolare sistema stereoscopico presentato in figura 1.3: in esso sono stati posti in evidenza gli assi ottici delle telecamere, ovvero le perpendicolari ai piani delle immagini passanti per i punti di fuoco, e la distanza tra di loro, detta baseline, indicata col simbolo Ty 3 ; le due immagini risultano essere complanari, e i loro bordi superiori e inferiori risultano allineati. Punto di fuoco telecamera sinistra im elle od Pian ini mag Asse ottico sinistro Asse ottico destro Punto di fuoco telecamera destra Ty Figura 1.3: Sistema di telecamere stereo Nella figura 1.4 è illustrata, vista dall’alto, la proiezione di un punto del mondo sui piani delle immagini simmetriche nel sistema appena presentato. In queste ipotesi (che rispecchiano la configurazione delle telecamere installate sul Terramax), risulta semplice dare prova dell’affermazione con cui si è aperto questo capitolo. Osservazione 1 Punti del mondo reale posti su uno stesso piano parallelo al piano delle immagini presentano la stessa disparità Questo principio può essere dimostrato provando che, al variare della posizione del punto del mondo reale all’interno del piano indicato in figura 1.4 dalla linea tratteggiata, e perpendicolare al foglio, la distanza tra le proiezioni di tale punto sul piano dell’immagine simmetrica non cambia. 3A seconda delle applicazioni, questa può variare da pochi centimetri a diversi metri Capitolo 1. I principi alla base della visione stereoscopica 16 X Punto del mondo reale Asse ottico destro Asse ottico sinistro d Piano dell’immagine simmetrica Punti dell’ immagine Y Punto di fuoco sinistro Ty f 0 Punto di fuoco destro Figura 1.4: Proiezione di un punto del mondo reale sul piano delle immagini Capitolo 1. I principi alla base della visione stereoscopica 17 Quando il movimento considerato avviene in una direzione perpendicolare al foglio si può immediatamente considerare l’osservazione verificata, mentre nel caso lo spostamento venga effettuato lungo la linea tratteggiata, bisogna ricorrere alla similitudine tra i triangoli con vertici uno il punto del mondo reale e i punti di fuoco, e l’altro ancora il punto del mondo reale e le sue proiezioni sul piano dell’immagine simmetrica. Detta similitudine sussiste in quanto un angolo è in comune tra di essi, mentre i relativi lati opposti sono paralleli, e non viene meno al muoversi del vertice superiore lungo la linea tratteggiata. La lunghezza del lato inferiore del triangolo interno (che rappresenta la disparità del piano in esame) non può dunque variare, in quanto proporzionale a Ty (che è fisso) secondo il rapporto di similitudine esistente tra i due triangoli. In figura 1.5 sono rappresentati i piani a disparità costante appena trattati. Figura 1.5: Piani ad uguale disparità, perpendicolari agli assi ottici Osservazione 2 La disparità con la quale un punto del mondo reale è proiettato nelle due immagini è inversamente proporzionale alla distanza tra il punto reale e il piano delle immagini simmetriche (prolungato all’infinito), e può essere espressa secondo la formula: d= f · Ty x (1.1) Capitolo 1. I principi alla base della visione stereoscopica 18 dove Ty è la distanza tra i punti di fuoco delle due telecamere, f è la lunghezza focale e x la distanza del punto reale dal piano delle immagini. Osservando il triangolo verde in figura 1.4, si può notare come questo sia simile a quello che ha per vertici il fuoco sinistro, l’intersezione tra l’asse ottico sinistro e il piano dell’immagine simmetrica, e l’intersezione tra la linea obliqua che congiunge il punto del mondo reale col fuoco sinistro e il piano dell’immagine simmetrica. Il cateto parallelo all’asse Y del secondo triangolo descritto rappresenta la disparità d del punto del mondo reale considerato, dal momento che questo si trova sull’asse ottico destro, mentre quello parallelo all’asse Y rappresenta la lunghezza focale f ; vale quindi la proporzione x : Ty = f : d (1.2) da cui si ricava l’enunciato. 1.1 La V-disparity image Si consideri la figura 1.7: essa rappresenta, secondo una visuale laterale, la scena inquadrata da una coppia di telecamere disposte come in figura 1.6; al suo interno sono evidenziati ed etichettati alcuni dei piani a disparità costante già presentati in figura 1.5; il terreno, supposto perfettamente orizzontale, corrisponde al piano Z = 0. Tenendo presente queste considerazioni, si può facilmente capire come, nelle immagini sintetiche presentate in figura 1.8, generate simulando il comportamento della coppia di telecamere appena descritte, la riga inferiore derivi dalla proiezione dell’intersezione tra il piano S3 ed il terreno. Conoscendo la disparità d che caratterizza S3, e tenendo conto della baseline Ty e della lunghezza focale f è possibile risalire, tramite la proporzione 1.2, alla sua distanza dal punto di fuoco. Da questo risultato si può ricavare, tramite opportune formule trigonometriche che tengano conto dell’angolo di pitch delle telecamere, la coordinata dell’intersezione tra il piano S3 e l’asse X. Capitolo 1. I principi alla base della visione stereoscopica 19 Z Y X Figura 1.6: Schema della disposizione di una coppia di telecamere stereo Immagine simmetrica z S6 S4 S5 S3 S1 S2 Pitch Asse ottico x 0 Figura 1.7: Superfici ad uguale disparità e loro intersezioni col terreno (rappresentato dall’asse x) Capitolo 1. I principi alla base della visione stereoscopica Immagine sinistra 20 Immagine destra Figura 1.8: Immagini stereo sintetiche Basandosi su queste considerazioni si può calcolare il costo di abbinamento [28], per diversi valori di disparità, tra due righe di pixel corrispondenti nelle due immagini, secondo un approccio introdotto da Labayrade [24], e illustrato in figura 1.9 (in cui viene evidenziato, per la coppia di righe in esame, il valore di disparità per cui il costo di abbinamento risulta minimo). Riportando in un grafico i costi di abbinamento, in funzione della riga dell’immagine (coordinata V ) e della disparità (coordinata D) per cui sono stati calcolati, si ottiene la cosiddetta V-disparity image, o immagine di correlazione (come quella in figura 1.10), dove la luminosità di ciascun pixel è proporzionale alla bontà del match corrispondente. Osservando questa immagine si può notare una serie di punti più luminosi allineati, corrispondenti alle disparità per cui si ha, riga per riga, un buon abbinamento tra gli elementi del terrreno; ci sono, poi, due segmenti verticali: quello più alto corrisponde al cielo, che, essendo a distanza infinita, assume una disparità nulla, mentre il secondo viene generato dal pedone, che si configura come un elemento verticale di una certa dimensione, e che quindi dà origine ad un tratto a disparità costante. Capitolo 1. I principi alla base della visione stereoscopica 21 Figura 1.9: Individuazione della disparità a minimo costo di abbinamento tra righe dell’immagine U 0 0 V V Immagine sinistra Immagine destra Figura 1.10: V-disparity image V-disparity image D Capitolo 1. 1.2 I principi alla base della visione stereoscopica 22 La disparity space image La V-disparity image riesce a mettere in evidenza le principali caratteristiche del terreno, ma l’approccio utilizzato per la sua costruzione è di tipo globale, e risulta dunque poco adatto quando si tenta di analizzare aspetti locali dell’immagine, quali possono essere gli ostacoli in essa presenti. Questo genere di problematica risulta più facile da trattare se si utilizza la cosiddetta disparity space image (DSI), in cui si cerca di determinare un valore di disparità per ciascuno dei suoi elementi, in modo che sia poi possibile ricostruirne la posizione all’interno del mondo, secondo la proporzione 1.2. La costruzione della DSI, nel caso il sistema stereo utilizzato sia quello illustrato in figura 1.6, avviene abbinando ciascun pixel dell’immagine destra con quelli dell’immagie sinistra presenti sulla stessa riga4 , e scegliendo come valore di disparità quello per cui il costo di questa operazione sia minimo. In figura 1.11 si può osservare come ai pixel dell’immagine originale destra vengano assegnati i valori di disparità che meglio li caratterizzano. Immagine originale destra Immagine di disparità Figura 1.11: Esempio di immagine di disparità: differenti colori contraddistinguono differenti valori di disparità. 4 Ciò è corretto, dal momento che il sistema utilizzato prevede telecamere allineate, con angoli di pitch identici, e di roll e yaw nulli, in modo che i loro assi ottici risultino paralleli ed i piani dell’immagine congruenti; in un caso più generale la retta su cui eseguire la ricerca, detta retta epipolare, risulterà obliqua Capitolo 1. I principi alla base della visione stereoscopica 23 I criteri per l’abbinamento dei pixel sono senza dubbio l’aspetto più delicato del calcolo della DSI, dal momento che devono soddisfare esigenze contrastanti: accuratezza dei risultati, velocità, assenza di artefatti, robustezza. In letteratura sono stati seguiti diversi approcci [28], pensati per far fronte ai problemi appena citati, ma nessuno è ancora in grado di dare una risposta soddisfacente a tutti nello stesso momento. La situazione affrontata nella Grand Challenge ha reso necessaria una scelta, e questa è ricaduta sulla classe di metodi che garantisce le prestazioni migliori in termini di velocità: la correlazione basata su finestre. Gli assunti che stanno alla base di questo tipo di algoritmi sono che le superfici trattate siano Lambertiane (ovvero che non cambino aspetto al variare del punto di osservazione)5 e continue a tratti (caratteristica, questa, tipica delle immagini naturali); sotto queste ipotesi, piccole regioni attorno alla proiezione dello stesso punto del mondo reale appaiono pressochè identiche in entrambe le immagini della coppia stereo, pur se in posizioni leggermente differenti: attraverso un processo iterativo di confronto è dunque possibile accoppiarle, e risalire cosı̀ alla disparità sotto cui viene visto il punto che le ha generate. Esiste, comunque, anche la possibilità che per una finestra non sia possibile trovare alcun abbinamento soddisfacente, ad esempio a causa di fenomeni di occlusione, o perché il contenuto informativo al suo interno è troppo basso (come accade in zone particolarmente prive di tessitura); in questi casi si assegna un valore convenzionale per indicare una disparità sconosciuta. 5 Come si vedrà in seguito, tale ipotesi non sempre risulterà rispettata, in particolar modo quando la baseline impiegata sarà grande Capitolo 2 Il sistema stereo a bordo del Terramax Le ragioni di natura teorica fin qui introdotte non sono state le uniche a determinare i requisiti tecnici del sistema di visione a bordo del Terramax; vedremo ora come anche altri aspetti, di natura più pratica, abbiano influito sulla sua messa a punto, e quale sia stata la configurazione finale risultante. 2.1 Disposizione e parametri principali delle telecamere Quando si vuole realizzare un sistema di acquisizione stereo uno degli aspetti fondamentali da considerare è la distanza tra le telecamere, ovvero la baseline; questo parametro, infatti, influenza sia le dimensioni del campo visivo analizzabile, sia l’accuratezza dei risultati forniti. In robotica i sistemi stereo sono molto studiati, ma le baseline utilizzate sono spesso piccole (pochi centimetri) [30, 31, 13]: in questo modo, infatti, è possibile produrre una mappa molto dettagliata della regione di spazio più prossima al robot1 , che è quella di interesse maggiore, dal momento che le velocità in gioco sono in genere basse. Nel caso in esame, invece, il veicolo deve muoversi sia a velocità sostenute che a basse velocità, durante le operazioni di manovra; nella prima situazione il pianificatore 1I range considerati vanno di solito dai 3 ai 7 metri di distanza 24 Capitolo 2. Il sistema stereo a bordo del Terramax 25 di moto deve poter disporre di una mappa che copra una regione di spazio abbastanza ampia, per consentirgli di elaborare in tempo utile una traiettoria in grado di evitare gli ostacoli presenti, mentre nella seconda il range visivo va ridotto a favore di un maggior grado di dettaglio nella ricostruzione dell’ambiente circostante il mezzo. Per far fronte a queste esigenze contrastanti si è scelto di utilizzare il sistema visibile in figura 2.1, formato da tre telecamere, disposte in modo tale da formare baseline di dimenisoni differenti. Figura 2.1: Baseline del sistema di acquisizione Come si può osservare la disposizione dei sensori è asimmetrica, dato che in questo modo è possibile disporre di tre baseline differenti; la dimensione della maggiore è stata fissata in 1.5 m, mentre per le altre si era pensato di rispettare la cosiddetta ”proporzione aurea” 2 , poi arrotondata3 arrivando ad avere due baseline intermedie di 0.5 m e 1.0 m. Le lenti ottiche utilizzate sono da 6mm, una misura in grado di fornire agli oggetti un ingrandimento adatto nei range visivi in esame, senza introdurre eccessive distorsioni. 2 Secondo cui, dette a e b le parti di cui si compone un segmento, queste sono legate alla sua b a lunghezza totale (a + b) dalla relazione = b a+b 3 I valori esatti sarebbero stati a = 0.57 m, b = 0.93 m, a + b = 1.5 m Capitolo 2. Il sistema stereo a bordo del Terramax 26 Gli algoritmi per il calcolo della V-Disparity image e della disparity space image sono stati progettati per funzionare nell’ipotesi di avere rette epipolari orizzontali: questo vincolo riduce il carico computazionale del sistema, dal momento che il problema trattato risulta di complessità inferiore, ma richiede anche una calibrazione molto accurata. Per semplificare questa operazione i supporti delle telecamere sono stati dotati di viti di regolazione, in modo da poter intervenire in maniera indipendente sugli angoli di roll, pitch e yaw; nelle figure 2.2 e 2.3 si possono vedere alcuni particolari del sistema di acquisizione installato sul Terramax. Figura 2.2: Una delle telecamere del Terrmamx, e il relativo supporto regolabile Analizzando più nel dettaglio le regolazioni da effettuare, si osserva che l’angolo di roll deve essere portato il più possibile vicino allo zero, ad esempio utilizzando una livella; l’angolo di pitch, invece, deve risultare identico per tutte le telecamere: a questo scopo è utile visualizzare le immagini acquisite sovrapponendole, cosı̀ da poter controllare che alcuni elementi caratteristici (come la linea dell’orizzonte) compaiano sempre alla stessa altezza. Al momento di fissare l’angolo di yaw si è scelto di tenere gli assi ottici delle telecamere leggermente convergenti, in modo da aumentare la regione di campo visivo che queste condividono: tale configurazione tende a produrre una rotazione delle rette epipolari (che comunque può essere trascurata), e, cosa più importante, fa comparire Capitolo 2. Il sistema stereo a bordo del Terramax 27 Figura 2.3: Dettaglio delle viti di regolazione gli oggetti oltre una certa distanza con una disparità negativa (e di questo si è dovuto tenere conto al momento della stesura del codice). 2.1.1 Meccanismi di sincronizzazione Perchè l’intero sistema funzioni correttamente è necessario che sia le telecamere che il sensore laser installati sul Terramax acquisiscano i dati nello stesso momento: a tale scopo viene utilizzato un dispositivo (denominato SyncBox, e visibile in figura 2.4) in grado di generare i segnali di attivazione per i vari sensori a bordo del veicolo; una analisi dettagliata del suo funzionamento si trova in [27]. Figura 2.4: Il SyncBox Capitolo 2. Il sistema stereo a bordo del Terramax 28 Il meccanismo di sincronia appena descritto permette di risolvere i problemi legati ad acquisizioni non simultanee verificatisi col veicolo impiegato nella prima edizione della Grand Challenge, presentati in [7]. 2.1.2 Altri problemi Vibrazioni Il sistema di visione è stato posizionato nella parte frontale del veicolo, e risulta solidale col telaio, essendo fissato ad una grossa barra d’acciaio, come si può vedere in figura 2.5; questa configurazione, pur necessaria, ha lo svantaggio di trasmettere alle telecamere notevoli vibrazioni, soprattutto quando il motore gira a bassi regimi: le sollecitazioni che si producono purtroppo tendono a modificare le impostazioni delle telecamere (come gli angoli di pitch, roll e yaw o l’apertura del diaframma), rendendo necessario il ricorso ad appositi liquidi per il fissaggio delle viti di regolazione. Figura 2.5: Il fissaggio del sistema di visione al Terramax Capitolo 2. Il sistema stereo a bordo del Terramax 29 Sporco Nell’ambiente in cui si trova ad operare il Terramax sono comuni tratti di strada sterrati o sabbiosi, dove fango, schizzi e polvere possono rapidamente rendere inservibili le telecamere; per evitare questo tipo di inconvenienti sono state realizzate le scatole protettive visibili in figura 2.6, che integrano un sistema di pulizia automatico dell’obbiettivo. Figura 2.6: Dettaglio delle protezioni per le telecamere Capitolo 3 Costruzione della V-Disparity image Ricavare la V-disparity image da una coppia di immagini stereo come quelle presentate in figura 3.1, tenendo conto delle considerazioni già esposte sull’approccio da seguire per contenere i tempi di esecuzione, richiede essenzialmente di confrontare regioni delle immagini di destra e di sinistra, misurandone la somiglianza secondo una qualche metrica. Immagine sinistra Immagine destra Figura 3.1: Immagini stereo di una strada asfaltata In quest’ottica, utilizzare direttamente le immagini acquisite dalle telecamere può dare luogo a risultati scadenti, sia per le differenze di luminosità che talvolta sono presenti tra i due fotogrammi, sia, soprattutto, per il fatto che zone di colore partico- 30 Capitolo 3. Costruzione della V-Disparity image 31 larmente uniformi possono dare luogo a buoni valori di matching anche per disparità diverse da quella corretta. Mentre al primo problema si può porre rimedio correggendo via software la luminosità, il secondo suggerisce di utilizzare una coppia di immagini, derivate da quelle originali, in cui siano state messe in risalto le zone a più alto contenuto informativo, ovvero i bordi, tramite una operazione di filtraggio, ad esempio utilizzando la maschera di Sobel, il cui risultato è visibile in figura 3.2. Immagine sinistra Immagine destra Figura 3.2: Immagini di Sobel di una strada asfaltata Risultati migliori si possono ottenere considerando solo la componente verticale dei bordi, e il loro segno; in [6, 7] sono esposte in dettaglio le considerazioni che hanno infine portato ad applicare alle immagini acquisite, prima di utilizzarle per il calcolo della V-disparity image, un tipo di filtraggio derivato da quello appena descritto, in cui però i possibili valori di intensità assunti dai bordi sono soltanto tre (-1, 0, 1), come è stato fatto in figura 3.3; il principale effetto di questa operazione è di mettere in risalto i tratti caratteristici della V-disparity image, da cui ricavare l’andamento del terreno; il risultato ottenuto è quello presentato in figura 3.4. All’interno di GOLD esiste un modulo per gestire i tipi di filtraggio descritti, ed è stato utilizzato per generare le immagini su cui calcolare la V-disparity image: ciò ha facilitato il confronto tra i risultati prodotti dal software esistente e quello nuovo, dal momento che entrambi hanno potuto utilizzare gli stessi dati in ingresso. Capitolo 3. Costruzione della V-Disparity image Immagine sinistra 32 Immagine destra Figura 3.3: Immagini di Sobel ternarizzate di una strada asfaltata I pixel verdi corrispondono ad un bordo positivo, quelli rossi ad uno negativo e quelli neri all’assenza di bordi Figura 3.4: V-disparity image di una strada asfaltata Capitolo 3. 3.1 Costruzione della V-Disparity image 33 Ottimizzazioni al codice La V-Disparity image è costituita da una matrice con un numero di righe pari a quello delle immagini da cui viene ricavata, ed un numero di colonne fissato a piacere1 , che indicheremo con cvdi . Detto dmin il minimo valore di disparità per cui si vuole effettuare il calcolo, l’elemento posto all’intersezione tra l’i-ma riga e la j-ma colonna rappresenterà la correlazione tra l’i-ma riga dell’immagine sinistra e l’i-ma riga di quella destra, traslata in orizzontale di j + dmin posizioni. Algoritmo 1 Algoritmo di base per il calcolo della VDI 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: procedure VDI(immsx , immdx , dmin , cvdi , vdi) r ← num righe(immdx ) for i ← 0, r − 1 do for j ← 0, cvdi − 1 do P ESO E LEMENTOVDI(immsx , immdx , i, j + dmin , p) vdi(i, j) ← p end for end for end procedure procedure P ESO E LEMENTOVDI(immsx , immdx , riga, disparita, peso) peso ← 0 c ← num colonne(immdx ) inizio ← −(min(disparita, 0)) f ine ← (c − (max(disparita, 0))) for k ← inizio, f ine − 1 do peso ← peso + abs(immdx (riga, k) − immsx (riga, k + disparita)) end for peso ← peso/( f ine − inizio) end procedure L’algoritmo 1 mette in evidenza il tipo di criterio utilizzato per valutare la corre- lazione tra una coppia di righe omologhe, per un certo valore di disparità: la somma 1 Tenendo comunque presente che, detto c il numero di colonne di una delle immagini di partenza, deve sempre valere che −c < dmin < c 1 ≤ cvdi ≤ c − dmin Capitolo 3. Costruzione della V-Disparity image 34 (normalizzata) delle differenze in modulo tra i pixel che le compongno; questo tipo di approccio risulta spesso adottato quando si cerca di realizzare sistemi con prestazioni elevate [18], e si è scelto di impiegarlo anche in questa occasione dal momento che, R tra le istruzioni del set Intel SSE, ne esiste una in grado di calcolare in parallelo tale costo di abbinamento. Per poter comprendere come sia possibile applicare il modello computazionale SIMD al problema in esame occorre, però, conoscere prima più in dettaglio come le immagini da elaborare vengano memorizzate all’interno del calcolatore e come sia R possibile accedervi tramite le istruzioni Intel MMX ed SSE. Per prima cosa dalle immagini acquisite dalle telecamere viene estratta l’informazione sulla luminanza, codificata come una serie di valori compresi tra 0 e 2552 (dove 0 rappresenta il nero, e 255 il bianco); viene quindi applicato su di esse il filtraggio che produce le immagini di Sobel ternarizzate, operando, però, la sostituzione illustrata nella tabella 3.1 rispetto ai valori in uscita originariamente previsti dal filtro. Valori in uscita dal filtro originale nuovo -1 0 0 127 1 254 Tabella 3.1: Sostituzione sui valori del filtro di Sobel ternarizzato A questo punto in memoria sono presenti due immagini filtrate, costituite da una serie di pixel contigui, ciascuno dei quali occupa un solo byte, e assume uno tra i tre valori positivi (0, 127, 254). Come si è visto, nel corso dell’elaborazione, fissate la riga e la disparità in esame, si deve procedere calcolando i valori assoluti delle differenze pixel a pixel tra le due porzioni di immagini sovrapposte, sommandoli, e dividendo il risultato per il numero di elementi analizzati; l’istruzione cui si faceva riferimento poc’anzi, il cui opcode3 è psadbw, effettua con un buon grado di parallelismo gran parte delle operazioni richieste, dal momento che, agendo su 64 bit per volta, computa le differenze in valore 2 Dunque 3 Ossia rappresentabili tramite log2 (256) = 8 bit, ovvero 1 byte, ciascuno lo mnemonico utilizzato per invocarla all’interno del codice assembly Capitolo 3. Costruzione della V-Disparity image 35 assoluto byte a byte tra le porzioni corrispondenti dei suoi operandi e le somma, secondo o schema riportato in figura 3.5: ciò significa che è possibile suddividere ciascuna riga in finestre di 8 pixel, e per ciascuna calcolare un unico contributo di correlazione, pari alla somma di quelli dei suoi elementi. Figura 3.5: Elaborazione svolta dall’istruzione psadbw L’impiego di questa istruzione richiede, comunque, alcuni accorgimenti, dal momento che vengono fatte in modo implicito almeno due ipotesi sui dati trattati, ovvero che questi siano costituiti da una serie di interi senza segno di lunghezza 1 byte, e che tutti gli 8 byte presenti in ciascun registro vadano elaborati. La sostituzione presentata in tabella 3.1 risolve il primo problema, mentre per quanto riguarda il secondo si deve tener conto che, nella rappresentazione in memoria utilizzata per le immagini, l’ultimo pixel di ciascuna riga precede immediatamente il primo di quella successiva: se la differenza tra i valori degli indici denominati nell’algoritmo 1 inizio e f ine non risulta multipla di 8, le finestre su cui eseguire il confronto non possono coprire esattamente l’intera area di sovrapposizione tra le righe (come si può vedere in figura 3.6). Capitolo 3. Costruzione della V-Disparity image Figura 3.6: Calcolo della correlazione tra due righe omologhe Supponendo che le immagini utilizzate siano larghe 13 pixel, si vede come, per una disparità di -2, l’istruzione psadbw possa essere invocata senza ulteriori interventi correttivi una sola volta (pixel azzurri), dato che una sua seconda esecuzione andrebbe ad interessare altri elementi oltre a quelli rossi (gli unici su cui il calcolo debba essere ancora svolto) 36 Capitolo 3. Costruzione della V-Disparity image 37 I dati vengono prelevati dalla memoria sempre a gruppi di 4 od 8 byte, tramite le istruzioni movd (move doubleword) e movq (move quadword), ed inseriti nei registri MMX, dove sono elaborati; dalle considerazioni appena esposte appare evidente come le opzioni disponbili al momento di effettuare il calcolo della correlazione siano due: gestire in qualche modo i casi di bordo, o semplicemente ignorarli, evitando di tenerne conto ai fini del computo del valore di match per la riga in esame. numero bit 4 8 16 32 64 nome nibble byte word doubleword quadword Tabella 3.2: Nomi dei più comuni raggruppamenti di bit La prima strada comporta delle operazioni aggiuntive, e in generale una efficienza leggermente minore, in quanto il flusso di controllo risulta più complesso, mentre la seconda fornisce risultati meno accurati, dal momento che questi vengono in generale ricavati da un numero inferiore di pixel (più precisamente, ( f ine − inizio) mod 8 pixel4 in meno rispetto a quelli disponibili). Sperimentalmente si è potuto osservare che la versione approssimata della V-disparity image risulta comunque pressochè indistinguibile da quella calcolata in modo esatto, con in più il vantaggio che il codice risulta semplice (come si può osservare nell’algoritmo 2, dove l’elaborazione svolta dall’istruzione psadbw è stata indicata con SAD 8) e veloce. R MMX ed SSE è costituito Un aspetto critico nell’utilizzo della tecnologia Intel dalla elevata latenza5 legata alla lettura dei dati in memoria [1]; completare il caricamento di un registro MMX può richiedere fino a 12 cicli di clock, e, se la successiva istruzione lo utilizza, il processore si ritrova in una condizione di stallo, in cui, 4 L’operatore mod indica il resto della divisione tra due numeri interi il numero di cicli di clock che devono trascorrere prima di poter utilizzare il valore contenuto nel registro di destinazione; si definisce invece throughput il numero di cicli di clock che bisogna attendere prima che il processore possa cominciare ad eseguire di nuovo la medesima istruzione 5 Ovvero Capitolo 3. Costruzione della V-Disparity image 38 Algoritmo 2 Algoritmo ottimizzato per il calcolo della VDI (versione 1) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: procedure VDI(immsx , immdx , dmin , cvdi , vdi) r ← num righe(immdx ) for i ← 0, r − 1 do for j ← 0, cvdi − 1 do P ESO E LEMENTOVDI(immsx , immdx , i, j + dmin , p) vdi(i, j) ← p end for end for end procedure procedure P ESO E LEMENTOVDI(immsx , immdx , riga, disparita, peso) peso ← 0 c ← num colonne(immdx ) inizio ← −(min(disparita, 0)) f ine ← (c − (max(disparita, 0))) f ine ← ( f ine − ( f ine%8)) iter ← ( f ine − inizio − 8)%8 for k ← 0, iter do SAD 8(immsx , immdx , riga, inizio + k ∗ 8, disparita, sad) peso ← peso + sad end for peso ← peso/( f ine − inizio) end procedure procedure SAD 8(immsx , immdx , riga, colonna, disparita, sad) sad ← 0 for l ← 0, 8 do sad ← sad + abs(immdx (riga, colonna + l) − immsx (riga, colonna + disparita + l)) 29: end for 30: end procedure Capitolo 3. Costruzione della V-Disparity image 39 cioè, il normale funzionamento di tipo pipeline risulta interrotto, con una conseguente dilatazione dei tempi di esecuzione. Questo problema risulta mitigato se si riesce ad inserire, tra la lettura di un dato dalla memoria e la sua successiva elaborazione, altre istruzioni da esso indipendenti, secondo una tecnica detta instruction pairing: con questo sistema si può tenere occupato il processore, nell’attesa che la prima operazione venga completata. Nel caso in esame si possono migliorare le prestazioni utilizzando finestre di 16 pixel, ciascuna suddivisa in due parti da 8, ed elaborando due righe alla volta, portando cosı̀ il numero di registri impiegati a (2 ∗ 2) ∗ 2 = 8: le operazioni di caricamento dei dati possono essere dunque svolte in parallelo, e gli effetti dovuti agli stalli venire ridotti; l’algoritmo 3 sintetizza questi interventi6 . 6 Nell’ipotesi che il numero di righe dell’immagine sia divisibile per due Capitolo 3. Costruzione della V-Disparity image 40 Algoritmo 3 Algoritmo ottimizzato per il calcolo della VDI (versione 2) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: procedure VDI(immsx , immdx , dmin , cvdi , vdi) r ← num righe(immdx ) for i ← 0, (r/2) − 1 do for j ← 0, cvdi − 1 do P ESO E LEMENTOVDI(immsx , immdx , i ∗ 2, j + dmin , p) vdi(i ∗ 2, j) ← p P ESO E LEMENTOVDI(immsx , immdx , (i ∗ 2) + 1, j + dmin , p) vdi((i ∗ 2) + 1, j) ← p end for end for end procedure procedure P ESO E LEMENTOVDI(immsx , immdx , riga, disparita, peso) peso ← 0 c ← num colonne(immdx ) inizio ← −(min(disparita, 0)) f ine ← (c − (max(disparita, 0))) f ine ← ( f ine − ( f ine%16)) iter ← ( f ine − inizio − 16)%16 for k ← 0, iter do SAD 16(immsx , immdx , riga, inizio + k ∗ 16, disparita, sad) peso ← peso + sad end for peso ← peso/( f ine − inizio) end procedure procedure SAD 8(immsx , immdx , riga, colonna, disparita, sad) sad ← 0 for l ← 0, 8 do sad ← sad + abs(immdx (riga, colonna + l) − immsx (riga, colonna + disparita + l)) 31: end for 32: end procedure 33: 34: procedure SAD 16(immsx , immdx , riga, colonna, disparita, sad) 35: SAD 8(immsx , immdx , riga, colonna, disparita, sad1 ) 36: sad ← sad1 37: SAD 8(immsx , immdx , riga, colonna + 8, disparita, sad2 ) 38: sad ← sad + sad2 39: end procedure Capitolo 4 Costruzione della disparity space image Come per la V-disparity image, anche nel caso della disparity space image utilizzare direttamente le immagini acquisite non porta a risultati soddisfacenti, con la differenza, però, che la soluzione consiste nell’utilizzare un filtraggio di Sobel che faccia risaltare i bordi verticali, dal momento che ciò che va messo in evidenza sono proprio gli aspetti locali (legati alla presenza di ostacoli), e non quelli globali (per i quali solitamente prevale l’informazione legata all’andamento del terreno); nelle figure 4.1 e 4.2 è illustrato questo tipo di preelaborazione. Immagine sinistra Immagine destra Figura 4.1: Immagini stereo di un centro abitato Il tipo di approccio scelto per il calcolo della disparity space image, introdotto nel capitolo 1, prevede che la disparità associata ad un punto sia quella per cui il costo di 41 Capitolo 4. Costruzione della disparity space image Immagine sinistra 42 Immagine destra Figura 4.2: Immagini di Sobel di un centro abitato abbinamento, calcolato su una finestra di pixel, risulti minimo; detto questo, è facile capire come il dimensionamento di tale regione sia piuttosto critico, e meriti alcune considerazioni. Nel caso in cui una finestra si trovi a cavallo di un cambiamento di disparità, come accade, ad esempio, lungo i bordi di un ostacolo che si staglia sullo sfondo, l’abbinamento avviene secondo il valore predominante tra quelli al suo interno: finestre piccole, dunque, meglio si prestano se gli elementi da individuare hanno dimensioni ridotte, dal momento che solo cosı̀ questi possono occuparne una porzione significativa. Il sistema di visione privilegia la localizzazione degli ostacoli paliformi, dal momento che i sensori laser vengono facilmente messi in crisi da questi oggetti, i quali, occupando un angolo di scansione molto ridotto, danno luogo a pochi echi: una caratteristica desiderabile sarà, dunque, che le finestre si estendano prevalentemente in direzione verticale. Anche in questo caso, come per la V-disparity image, la strada seguita per l’ottimizzazione del codice è quella dell’elaborazione SIMD: tale scelta ha posto un ulteriore vincolo sulle regioni da considerare, ed in particolare che una delle loro dimensioni sia multipla di 4 o di 8, in modo da facilitare le operazioni di caricamento dei dati all’interno dei registri. Visti i requisiti da soddisfare, si è infine deciso di impiegare finestre rettangolari larghe 3 pixel e alte 4, che, come si vedrà, hanno rappresentato un buon compromesso. Capitolo 4. Costruzione della disparity space image 43 La risoluzione della disparity space image era stata in origine ridotta per consentire prestazioni accettabili, mentre in questa nuova implementazione si ottengono tempi ragionevoli senza bisogno di alcun sottocampionamento: si è comunque provveduto a mantenere la compatibilità col sistema esistente, lasciando la possibilità di ridurre sia in orizzontale che in verticale il numero di pixel presenti1 ; nelle figure 4.3 e 4.4 sono messe a confronto le disparity space image ottenute alle risoluzioni previste dal vecchio metodo e da quello nuovo, a partire dalla coppia stereo presentata in figura 4.1. Figura 4.3: disparity space image di un centro abitato (106x80 pixel) 4.1 Ottimizzazioni al codice Passiamo ora ad analizzare nel dettaglio come sia possibile ricavare la disparity space image, tenendo conto che per semplicità di trattazione gli algoritmi esposti si riferiscono al caso in cui non siano applicati sottocampionamenti (ossia la risoluzione della DSI risulti identica a quella delle immagini utilizzate per calcolarla). In questa ipotesi, e detti dterr il vettore contenente, riga per riga, le disparità stimate per il terreno2 e dmax 1 Per dare un’idea delle quantità in gioco, un tempo si utilizzavano immagini di 320x240 pixel, e la DSI veniva calcolata per un pixel ogni nove, portando cosı̀ la sua risoluzione effettiva a 106x80 pixel, mentre ora tale sottocampionamento non risulta più necessario 2 Ottenute applicando i principi esposti in [7] alla V-disparity image calcolata sulla stessa coppia stereo Capitolo 4. Costruzione della disparity space image 44 Figura 4.4: disparity space image di un centro abitato (320x240 pixel) la disparità massima per cui effettuare la ricerca, il calcolo dell’immagine di disparità si può svolgere secondo l’algoritmo 4. Il risultato prodotto può essere reso più affidabile cercando di rimuovere i pixel che abbiano dato luogo ad abbinamenti scadenti, attraverso l’introduzione di una soglia sul valore di correlazione del match migliore, e di una sull’intensità dei valori nella finestra di riferimento (in presenza di poca informazione su bordi è difficile ottenere risultati corretti). L’elaborazione svolta dalla procedura C ORRELAZIONE F INESTRA risulterebbe di molto semplificata utilizzando l’istruzione psadbw, già introdotta nel capitolo 3, a condizione, però, di modificare la rappresentazione in memoria delle immagini da elaborare, come mostrato in figura 4.5; in questo modo, infatti, i 24 byte rappresentanti i valori di una coppia di finestre possono essere trasferiti, con sei semplici operazioni di caricamento di doubleword (movd), all’interno di sei diversi registri MMX, per essere poi confrontati secondo lo schema visibile in figura 4.63 . 3 Dove, per semplicità, non è stata indicata l’operazione di normalizzazione Capitolo 4. Costruzione della disparity space image 45 Algoritmo 4 Algoritmo di base per il calcolo della DSI 1: procedure DSI(immsx , immdx , dterr , dmax , dsi) 2: r ← num righe(immdx ) 3: c ← num colonne(immdx ) 4: for all p ∈ dsi do 5: p ← DISPARITY UNKNOW N 6: end for 7: for i ← 0, r − 1 do 8: for j ← 0, c − dterr (i) do 9: normalizzazione(i, j) ← 0 10: for l ← −1, 2 do 11: for m ← −1, 1 do 12: normalizzazione(i, j) ← normalizzazione(i, j) + immdx (i + l, j + m) 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: end for end for end for end for for i ← 0, r − 1 do for j ← 0, c − dterr (i) do cmin ← ∞ d ← DISPARITY UNKNOW N for k ← 0, dmax do C ORRELAZIONE F INESTRA(immsx , normalizzazione(i, j), c) if c < cmin then cmin ← c d←k end if end for dsi(i, j) ← d end for end for end procedure immdx , i, j, k, 32: procedure C ORRELAZIONE F INESTRA(immsx , immdx , riga, colonna, disparita, 33: 34: 35: 36: 37: 38: 39: 40: norm, correlazione) correlazione ← 0 for l ← −1, 2 do for m ← −1, 1 do correlazione ← correlazione + abs(immdx (riga + l, colonna + m) − immsx (riga + l, colonna + m + disparita)) end for end for correlazione ← correlazione/norm end procedure Capitolo 4. Costruzione della disparity space image Figura 4.5: Rappresentazioni in memoria di un’immagine La figura a) illustra il modo più comune di trasformare una matrice di pixel (in questo caso di dimensioni 13x10) in un vettore, concatenando le righe che la compongono; nalla figura b) si può invece osservare come, effettuando la medesima operazione agendo sulle colonne, pixel allineati in senso verticale risultino contigui in memoria. 46 Capitolo 4. Costruzione della disparity space image Figura 4.6: Calcolo della correlazione tra due finestre 47 Capitolo 4. Costruzione della disparity space image 48 Indicando con C ARICAMENTO 4 l’operazione di trasferimento di 4 byte contigui in memoria in uno dei registri MMX (in seguito ci si riferirà all’i − mo di tali registri con registri mmx(i)), e con SAD 8 la somma di differenze di valori assoluti su 8 byte in parallelo si ottiene l’algoritmo 5, in cui il costo di abbinamento è calcolato su gruppi di 4 byte. Le prestazioni fin qui ottenute possono essere ulteriormente migliorate se si osserva che, per calcolare la disparità di un punto dell’immagine destra, si confronta la finestra che lo circonda con quelle ricavate in successione dalla medesima riga dell’immagine sinistra: si può, dunque, evitare di caricare di volta in volta dalla memoria tutti e tre i segmenti che compongono tali finestre (operazione molto onerosa), riutilizzando, invece, i due già presenti nei registri del processore, secondo lo schema presentato in figura 4.7. Impiegare questo accorgimento permette anche di sovrapporre, in parte, le operazioni di calcolo della correlazione per una finestra con quelle di caricamento della successiva, riducendo le situzioni di stallo; il risultato di queste ottimizzazioni è presentato nell’algoritmo 7. Capitolo 4. Costruzione della disparity space image Figura 4.7: Caricamento ottimizzato della finestra sinistra Ad ogni iterazione i valori presenti nei registri 1 e 2 sono salvati (1) nei registri temporanei 6 e 7, quindi copiati rispettivamente nei registri 0 e 1 (2); infine nel registro 2 vengono inseriti, caricandoli dalla memoria, i valori dei pixel che andranno a costituire la colonna più a destra della nuova finestra 49 Capitolo 4. Costruzione della disparity space image 50 Algoritmo 5 Algoritmo ottimizzato per il calcolo della DSI (Versione 1, Parte 1) 1: procedure DSI(immsx , immdx , dterr , dmax , dsi) 2: r ← num righe(immdx ) 3: c ← num colonne(immdx ) 4: 5: for all p ∈ dsi do 6: p ← DISPARITY UNKNOW N 7: end for 8: 9: for i ← 0, r − 1 do 10: for j ← 0, c − dterr (i) do 11: normalizzazione(i, j) ← 0 12: for l ← −1, 2 do 13: for m ← −1, 1 do 14: normalizzazione(i, j) ← normalizzazione(i, j) + immdx (i + l, j + m) 15: end for 16: end for 17: end for 18: end for 19: 20: for i ← 0, r − 1 do 21: for j ← 0, c − dterr (i) do 22: cmin ← ∞ 23: d ← DISPARITY UNKNOW N 24: C ARICAMENTO 4(immdx , i − 1, j − 1), registri mmx(3)) 25: C ARICAMENTO 4(immdx , i − 1, j), registri mmx(4)) 26: C ARICAMENTO 4(immdx , i − 1, j + 1), registri mmx(5)) 27: for k ← 0, dmax do 28: C ARICAMENTO 4(immsx , i − 1, j + k − 1), registri mmx(0)) 29: C ARICAMENTO 4(immsx , i − 1, j + k), registri mmx(1)) 30: C ARICAMENTO 4(immsx , i − 1, j + k + 1), registri mmx(2)) 31: C ORRELAZIONE F INESTRA(registri mmx,normalizzazione(i, j),c) 32: if c < cmin then 33: cmin ← c 34: d←k 35: end if 36: end for 37: dsi(i, j) ← d 38: end for 39: end for 40: end procedure Capitolo 4. Costruzione della disparity space image Algoritmo 6 Algoritmo ottimizzato per il calcolo della DSI (Versione 1, Parte 2) 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: procedure C ORRELAZIONE F INESTRA(registrim mx, norm, correlazione) correlazione ← 0 SAD 8(registri mmx(3), registri mmx(0), sad) correlazione ← correlazione + sad SAD 8(registri mmx(4), registri mmx(1), sad) correlazione ← correlazione + sad SAD 8(registri mmx(5), registri mmx(2), sad) correlazione ← correlazione + sad correlazione ← correlazione/norm end procedure procedure SAD 8(registro1 , registro2 , sad) sad ← 0 for l ← 0, 8 do sad ← sad + abs(registro1 (l) − registro2 (l))) end for end procedure 51 Capitolo 4. Costruzione della disparity space image 52 Algoritmo 7 Algoritmo ottimizzato per il calcolo della DSI (Versione 2, Parte 1) 1: procedure DSI(immsx , immdx , dterr , dmax , dsi) 2: r ← num righe(immdx ) 3: c ← num colonne(immdx ) 4: 5: for all p ∈ dsi do 6: p ← DISPARITY UNKNOW N 7: end for 8: 9: for i ← 0, r − 1 do 10: for j ← 0, c − dterr (i) do 11: normalizzazione(i, j) ← 0 12: for l ← −1, 2 do 13: for m ← −1, 1 do 14: normalizzazione(i, j) ← normalizzazione(i, j) + immdx (i + l, j + m) 15: end for 16: end for 17: end for 18: end for 19: 20: for i ← 0, r − 1 do 21: for j ← 0, c − dterr (i) do 22: cmin ← ∞ 23: d ← DISPARITY UNKNOW N 24: C ARICAMENTO 4(immdx , i − 1, j − 1), registri mmx(3)) 25: C ARICAMENTO 4(immdx , i − 1, j), registri mmx(4)) 26: C ARICAMENTO 4(immdx , i − 1, j + 1), registri mmx(5)) 27: C ARICAMENTO 4(immsx , i − 1, j − 1), registri mmx(0)) 28: C ARICAMENTO 4(immsx , i − 1, j), registri mmx(1)) 29: C ARICAMENTO 4(immsx , i − 1, j + 1), registri mmx(2)) 30: for k ← 0, dmax do 31: registri mmx(7) ← registri mmx(2) 32: registri mmx(6) ← registri mmx(1) 33: C ORRELAZIONE F INESTRA(registri mmx,normalizzazione(i, j),c) 34: C ARICAMENTO 4(immsx , i − 1, j + k + 1), registri mmx(2)) 35: registri mmx(0) ← registri mmx(6) 36: registri mmx(1) ← registri mmx(7) 37: if c < cmin then 38: cmin ← c 39: d←k 40: end if 41: end for 42: dsi(i, j) ← d 43: end for 44: end for 45: end procedure Capitolo 4. Costruzione della disparity space image Algoritmo 8 Algoritmo ottimizzato per il calcolo della DSI (Versione 2, Parte 2) 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: procedure C ORRELAZIONE F INESTRA(registrim mx, norm, correlazione) correlazione ← 0 SAD 8(registri mmx(3), registri mmx(0), sad) correlazione ← correlazione + sad SAD 8(registri mmx(4), registri mmx(1), sad) correlazione ← correlazione + sad SAD 8(registri mmx(5), registri mmx(2), sad) correlazione ← correlazione + sad correlazione ← correlazione/norm end procedure procedure SAD 8(registro1 , registro2 , sad) sad ← 0 for l ← 0, 8 do sad ← sad + abs(registro1 (l) − registro2 (l))) end for end procedure 53 Capitolo 5 Individuazione degli ostacoli Nei capitoli precedenti è stato affrontato il problema di produrre una rappresentazione tridimensionale della scena inquadrata da una coppia di telecamere stereo; si vedrà ora come sia possibile individuare gli ostacoli presenti all’interno della porzione di mondo cosı̀ ricostruita. L’aspetto più delicato del riconoscimento di ostacoli sta nella loro caratterizzazione: occorre definire le proprietà che un insieme di punti deve avere per essere classificato come oggetto da evitare, e quale sia il procedimento da seguire per generare tali raggruppamenti. In [7] si identificano come ostacoli le zone della disparity space image corrispondenti a raggruppamenti di colonne con disparità simile; l’assunto alla base di questo algoritmo è che oggetti fuoriuscenti dal terreno risultino in ogni loro parte ad una distanza pressochè costante dal punto di osservazione, dando cosı̀ luogo, all’interno dell’immagine di disparità, ad una regione contenente valori quasi costanti. Partendo dalla stessa ipotesi, il nuovo metodo cerca di isolare insiemi connessi di pixel che abbiano proprietà tali da far pensare alla presenza di un ostacolo. La prima operazione svolta consiste nel ripulire la disparity space image, eliminando le sequenze di pixel appartenenti alla stessa colonna che presentino valori di disparità progressivamente decrescenti (se li si considera dal basso verso l’alto): tale caratteristica, infatti, è tipica delle regioni che sono proiezione di punti del mondo appartenenti al terreno; di questo procedimento, che sperimentalmente si è dimostrato 54 Capitolo 5. Individuazione degli ostacoli 55 efficace, si iniziano a trovare riscontri anche in letteratura [25]. Completata questa fase iniziale di filtraggio si procede col segmentare l’immagine in regioni in cui la disparità risulti omogenea; in seguito per ciascuna di queste aree si calcolano una serie di parametri caratteristici, ovvero la distanza, le dimensioni, l’altezza stimata dal terreno, il fattore di forma e l’inclinazione rispetto al suolo, ed infine si isolano i gruppi di pixel per cui i valori assunti da tali parametri suggeriscano che si tratti di ostacoli. Analizziamo ora, nel dettaglio, il significato e l’utilità delle proprietà appena elencate: • distanza: è la distanza media (in coordinate mondo) tra i punti della regione e l’origine del sistema di riferimento; oggetti troppo lontani vengono scartati (il range in cui gli ostacoli vengono individuati con sicurezza, infatti, è quello compreso tra i 5 e i 50 m circa). • dimensioni: è il numero di pixel che compongono la regione, normalizzato rispetto alla sua disparità (tale operazione si rende necessaria dal momento che, come è già stato detto in precedenza, sia le dimensioni che la disparità degli oggetti diminuiscono man mano che questi si trovano distanze maggiori rispetto al punto di osservazione); se il valore ottenuto è al disotto di una certa soglia, viene scartato. • altezza dal terreno: è la differenza tra il valore assunto dalla coordinata Z del punto più alto dell’oggetto e quella stimata per il terreno; se risulta troppo ridotta, la regione viene considerata come parte del suolo, e scartata. • fattore di forma: è il rapporto tra l’altezza e la larghezza del bounding box che contiene la regione in esame; l’utilizzo di questo parametro nasce dall’osservazione sperimentale del fatto che le aree della disparity space image in cui la disparità è costante, ma la dimensione orizzontale risulta nettamente prevalente, sono per lo più originate da zone del mondo reale corrispondenti al terreno. • inclinazione rispetto al suolo: questo parametro classifica come ostacolo tutto ciò che il veicolo non potrebbe riuscire a superare, ossia le superfici la cui Capitolo 5. Individuazione degli ostacoli 56 z2 − z1 (dove (x1 , z1 ) sono le coordinate mondo della x2 − x1 proiezione sul piano Y = 0 del punto più basso della regione, e (x2 , z2 ) l’analogo pendenza, calcolata come per quello più alto) risulta troppo elevata. 5.1 Risultati Questa sezione raccoglie i risultati ottenuti con diversi tipi di ostacoli presenti in varie situazioni ambientali; ogni oggetto rilevato è caratterizzato da un colore dipendente dalla sua disparità (e dunque dalla sua distanza). Immagine destra Immagine degli ostacoli Figura 5.1: Rilevazione di ostacoli ai bordi della carreggiata Immagine destra Immagine degli ostacoli Figura 5.2: Rilevazione di ostacoli in presenza di ombre Capitolo 5. Individuazione degli ostacoli 57 Confrontando le figure 5.1 e 5.2 si può osservare come il metodo proposto dia buoni risultati a prescindere dalla presenza di ombre, dato che gli ostacoli vengono individuati a partire da una ricostruzione tridimensionale del mondo in cui queste non compaiono. Immagine destra Immagine degli ostacoli Figura 5.3: Rilevazione di una staccionata Immagine destra Immagine degli ostacoli Figura 5.4: Rilevazione di un veicolo sopraggiungente Nelle figure 5.3 e 5.4 si nota come sia possibile rilevare correttamente anche elementi che occupino una porzione piuttosto ridotta dell’immagine, come la staccionata, confusa tra la vegetazione, o il veicolo nella corsia opposta. Capitolo 5. Individuazione degli ostacoli Immagine destra 58 Immagine degli ostacoli Figura 5.5: Rilevazione di una recinzione La recinzione presente in figura 5.5 costituisce un insieme omogeneo, e quindi privo di quelle forti discontinuità che danno luogo a buoni abbinamenti nella disparity space image; nonostante questo, i paletti che la sostengono vengono perfettamente riconosciuti come ostacoli, facendo sı̀ che la zona venga classificata come non attraversabile. Immagine destra Immagine degli ostacoli Figura 5.6: Rilevazione di bidoni in lontananza Le figure 5.6 e 5.7 mettono in evidenza il comportamento nei confronti di ostacoli di medie dimensioni, quali sono in questo caso i bidoni: la rilevazione risulta molto precisa, grazie anche alle caratteristiche favorevoli della scena, costituite dal terreno, quasi piatto, e dall’aspetto degli oggetti, che risulta ben definito. Capitolo 5. Individuazione degli ostacoli Immagine destra 59 Immagine degli ostacoli Figura 5.7: Rilevazione di bidoni vicini Immagine destra Immagine degli ostacoli Figura 5.8: Rilevazione di un ponte Capitolo 5. Individuazione degli ostacoli Immagine destra 60 Immagine degli ostacoli Figura 5.9: Rilevazione di cespugli Mettendo a confronto le figure 5.8 e 5.9 si osserva come l’algoritmo riesca ad affrontare ugualmente bene sia gli ambienti fortemente strutturati, come il ponte, circoscritto dai due guard-rail, sia quelli dove l’intervento umano si è fatto meno sentire, come il limitare del bosco, caratterizzato da una fitta vegetazione. 5.2 Falsi negativi Non sempre tutti gli ostacoli presenti in una coppia di immagini vengono identificati dall’algoritmo; vedremo ora quali sono le principali cause di tale comportamento indesiderato. Come si è già detto nel capitolo 2, il campo visivo del Terramax deve risultare piuttosto esteso, di modo che sia possibie individuare gli elementi da evitare in tempo utile: ciò è tanto più vero quanto più è alta la velocità a cui il veicolo si sta muovendo; questo vincolo può essere soddisfatto ricorrendo ad una baseline ampia, che, però, in certi casi porta ad avere, per uno stesso oggetto, sfondi differenti, come nel caso della figura 5.10: tale fenomeno si spiega col venir meno del comportamento lambertiano inizialmente ipotizzato. La soluzione di compromesso adottata per il Terramax consiste nell’impiegare due diverse baseline, una larga, per i tratti in cui l’andatura è sostenuta, e una più stretta, per Capitolo 5. Individuazione degli ostacoli 61 Figura 5.10: Oggetto che appare in modo diverso nelle due immagini Il riquadro rosso evidenzia come la zona circostante il faro anteriore sinistro del veicolo abbia nelle due immagini acquisite sfondi differenti (in un caso la strada, nell’altro la fiancata del veicolo, che nell’immagine sinistra risulta invisibile perchè occlusa), e non venga quindi riconosciuta. le fasi di manovra: si riescono cosı̀ a conciliare accuratezza dei risultati e tempestività nei rilevamenti. Il metodo utilizzato per la costruzione della disparity space image è di tipo locale, e dunque non riesce a far fronte a zone prive di tessitura; ostacoli compatti ed estesi possono anche non venire identificati da questo algoritmo, come nel caso della recinzione già presentata in figura 5.5 (dove, comunque, la sola presenza dei paletti è sufficiente a far classificare la regione come non attraversabile): in queste situazioni diventa fondamentale il contributo del sensore laser. Il sistema realizzato, comunque, è stato predisposto in modo tale da poter indicare una maschera di pixel su cui evitare il calcolo dell’immagine di disparità (e, di conseguenza, la ricerca degli ostacoli): in questo modo resta aperta la strada a preelaborazioni volte ad individuare quelle tipologie di oggetti che altrimenti finirebbero per non essere rilevate. Un ultimo aspetto da considerare è la tolleranza da utilizzare nella fase di segmentazione (basata sulla disparità) della disparity space image: una soglia molto rigida porta ad avere un elevato numero di piccole regioni, con valori molto omogenei al loro interno, rendendo pressochè impossibile distinguere gli ostacoli dal rumore di fondo. Capitolo 5. 5.3 Individuazione degli ostacoli 62 Falsi positivi Ancora una volta, il fatto di impiegare un metodo locale per ricavare la disparity space image, può portare dei problemi: il valore migliore per la correlazione potrebbe essere quell prodotto da due finestre che solo casualmente sono molto simili (ciò risulta particolarmente evidente nel caso di immagini contenenti pattern ripetitivi), dando luogo a valori errati di disparità, e alla comparsa di falsi positivi. In letteratura sono trattati alcuni metodi che cercano di mitigare questi problemi: • analisi della funzione di correlazione: in [14] viene mostrato come, tenendo conto di tutto l’andamento di tale funzione, e non solo del suo valore di picco, si riescano più facilmente a riconoscere le situazioni in cui l’abbinamento risulti inaffidabile • controllo di consistenza sinistra-destra: in [12] è stata introdotta una verifica sulla consistenza del match trovato, che risolve, ad esempio, le ambiguità dovute alle occlusioni (in questi casi, infatti, una finestra, la cui omologa risulta non visibile, può trovare comunque una buona corrispondenza). nell’implementazione corrente si è volutamente evitato di inserire questi tipi di controllo, per non appesantire l’elaborazione. Falsi positivi possono comparire anche a causa di una errata stima dell’andamento del terreno: alcune regioni possono essere classificate come ostacoli a causa della loro apparente elevazione dal suolo, come si può vedere in figura 5.11. 5.4 Mappatura nel mondo reale Per ogni punto della disparity space image di cui si conosca il valore della disparità si calcolano le corrispondenti coordinate mondo, utilizzando i parametri di calibrazione delle telecamere, corretti tenendo conto dell’informazione sul pitch istantaneo del veicolo1 ; completata questa operazione, ed isolati gli ostacoli presenti secondo i criteri 1 Ricavato a partire dalla V-disparity image secondo il metodo descritto in [7] Capitolo 5. Individuazione degli ostacoli 63 Figura 5.11: Falso positivo Il riquadro rosso evidenzia un falso positivo dovuto ad una errata stima dell’andamento del terreno appena esposti, viene prodotta una mappa dall’alto dello spazio antistante il veicolo, in cui ogni oggetto è rappresentato da un poligono convesso (convex hull); tale poligono viene ottenuto applicando l’algoritmo gift wrapping alle proiezioni dei punti dell’ostacolo sul piano Z = 0. Nelle figure 5.12, 5.13, 5.14, 5.15 sono presentanti alcuni esempi dei risultati ottenuti2 . 2 Nella mappa il veicolo si trova sempre al centro del lato corto inferiore, rivolto verso l’alto Capitolo 5. Individuazione degli ostacoli Figura 5.12: Mappa di una recinzione Figura 5.13: Mappa di alcuni bidoni 64 Capitolo 5. Individuazione degli ostacoli Figura 5.14: Mappa di un viale alberato Figura 5.15: Mappa di un campo 65 Capitolo 6 Risultati Le considerazioni fin qui esposte hanno illustrato, in termini qualitativi, i risultati prodotti dai vari algoritmi; uno degli aspetti che fin dall’inizio ci si era proposti di curare era, però, anche il contenimento dei tempi di esecuzione: è già messo in luce come tale vincolo abbia influito sulla progettazione e sull’implementazione codice da impiegare nel sistema di visione installato sul Terramax; vedremo ora nel dettaglio quali effetti abbiano avuto gli accorgimenti adottati sulle prestazioni del software realizzato. 6.1 Analisi dei tempi di elaborazione Per avere una misura quantitativa dei miglioramenti ottenuti sono state messe a confronto le prestazioni degli algoritmi esistenti con quelle dei nuovi, in versione ottimizzata e non, su macchine diverse; il compilatore utilizzato è stato in tutti i casi il GCC versione 3.3.5, con le seguenti opzioni attivate: -O3 -finline-limit=1200 -DNDEBUG -maccumulate-outgoing-args -mno-align-stringops -minline-all-stringops -march=pentium4 -momit-leaf-frame-pointer -fforce-addr -falign-functions=4 -mfpmath=sse -funroll-loops -fprefetch-loop-arrays -msse2 -ffast-math 66 Capitolo 6. Risultati 67 come si può vedere, durante la fase di compilazione il codice viene automaticamenR R te ottimizzato per l’esecuzione su Intel Pentium4 , dato che questo è il processore installato a bordo del Terramax, ed anche quello impiegato nei test; le istruzioni utilizzate all’interno della versione ottimizzata manualmente sono comunque supportate R R da altre famiglie di processori (come l’AMD AthlonXP ), anche se con questi non sono state fatte analisi delle prestazioni ottenibili. Le tabelle 6.1 e 6.2 presentano i tempi medi di esecuzione per frame dei vari algoritmi, ottenuti elaborando una sequenza di 1500 immagini stereo, acquisita in ambienti urbani ed extraurbani, con una disparità massima di ricerca di 23 pixel; le macchiR ne utilizzate per i test sono state due: la prima equipaggiata con un processore Intel R Pentium4 Mobile a 2.0 GHz, 512 KB di memoria cache e 700 MB di memoria RAM, R R mentre la seconda con un processore Intel Pentium4 a 3.0 GHz, 1024 KB di me- moria cache e 1 GB di memoria RAM. algoritmo VDI DSI OD totale Versione dell’algoritmo risoluzione originale nuova nuova accelerata 41 ms 38 ms 7 ms 320*240 N/D 51 ms 23 ms 106*80 8 ms 8 ms 5 ms 320*240 N/D 18 ms 106*80 1 ms 2 ms 320*240 N/D 107 ms 48 ms 106*80 50 ms 48 ms 14 ms Tabella 6.1: Tempi di esecuzione sulla prima macchina di test Gli algoritmi analizzati sono quelli per il calcolo della V-Disparity image (VDI), della disparity space image (DSI) e dell’individuazione degli ostacoli (OD); i dati mancanti sono stati identificati con la sigla N/D, mentre le caselle corrispondenti ad incroci non significativi sono state lasciate vuote Una prima analisi dei dati presentati mette in evidenza i benefici portati dall’utilizzo delle istruzioni SIMD messe a disposizione dai processori impiegati; risulta inoltre chiaro come il GCC, che pure è in grado di produrre codice sequenziale altamente ottimizzato, non sia ancora in grado di sfruttare appieno il parallelismo offerto dalle Capitolo 6. Risultati algoritmo VDI DSI OD totale 68 Versione dell’algoritmo risoluzione originale nuova nuova accelerata 22 ms 21 ms 4 ms 320*240 N/D 35 ms 15 ms 106*80 6 ms 5 ms 3 ms 320*240 N/D 10 ms 106*80 1 ms 1 ms 320*240 N/D 66 ms 29 ms 106*80 30 ms 27 ms 8 ms Tabella 6.2: Tempi di esecuzione sulla seconda macchina di test moderne CPU: l’intervento manuale a livello assembly diventa dunque indispensabile, e con ogni probabilità ciò si ripeterà ancora piuttosto a lungo, almeno nell’implementazione di algoritmi complessi, come lo sono il calcolo della disparity space image e della V-Disparity image. Mettendo a confronto i tempi totali di esecuzione delle versioni non ottimizzate manualmente con quelli ottenuti sfruttando in modo esplicito l’instruction set SSE si ottiene, su una stessa macchina, una riduzione del 55% circa nel caso si operi ad una risoluzione di 320x240 pixel, e addirittura del 70% circa alla risoluzone originaria di 106x80pixel (ciò accade perchè i tempi di calcolo della V-Disparity image vengono ridotti circa dell’80% ma, dal momento che questi dipendono soltanto dalla risoluzione dell’immagine acquisita, non sono soggetti a riduzioni dovute a sottocampionamenti, e nel secondo caso finiscono per avere una maggiore incidenza percentuale). Esaminando nel dettaglio le prestazioni dei singoli algoritmi, il calcolo accelerato della disparity space image richiede in media un tempo più piccolo del 50 − 55% rispetto alla versione normale, mentre, come si è appena potuto vedere, nel caso della V-Disparity image tale diminuzione raggiunge l’80%: questo fenomeno è spiegabile se si tiene conto del fatto che il secondo algoritmo risulta meno complesso, e non richiede la presenza di sequenze condizionali nel suo innermost loop, che tendono ad interrompere il funzionamento di tipo pipeline del processore; nel calcolo dell’immagine di disparità, invece, è necessario valutare, per ogni pixel, la posizione del minimo globale della funzione di correlazione, e validare la soluzione ottenuta: in questo modo Capitolo 6. Risultati 69 vengono introdotte istruzioni di salto che, al momento dell’esecuzione, risultano piuttosto problematiche da gestire dall’unità di branch prediction della CPU, dal momento che danno luogo pattern irregolari. Osservando attentamente le tabelle 6.1 e 6.2 si nota come per l’algoritmo di obstacle detection non sia stata prevista una versione ottimizzata: ciò dipende essenzialmente dal fatto che il principio su cui si basa prevede l’individuazione di aree dell’immagine di disparità in cui i valori risultino costanti, e questa operazione non trova una semplice espressione in termini di operazioni SIMD; per l’implementazione si è dunque scelto di affidarsi ad una formulazione ricorsiva del problema, col vantaggio di ottenere codice di più semplice interpretazione; tale scelta è stata giustificata anche dalla quota di tempo di esecuzione liberata grazie al miglioramento degli algorı̀tmi per il calcolo della V-Disparity image e della disparity space image: va comunque tenuto presente che, passando dalla risoluzione di 106x80 pixel ai 320x240 pixel della nuova versione, l’elaborazione risulta nove volte più lenta, sintomo che il GCC non ha modo di parallelizzare alcuna operazione. I test condotti hanno evidenziato che la seconda macchina riesce a ridurre i tempi di elaborazione del 30% circa, e questo è un dato confortante, poichè se cosı̀ non fosse stato ci si sarebbe dovuti addentrare in un’analisi ancora più approfondita dei meccanismi di trasferimento dei dati dalla memoria principale del sistema alla cache: tali operazioni, infatti, risultano decisamente più lente della maggior parte delle attività di puro calcolo, e, se non se ne tiene adeguatamente conto, possono diventare un collo di bottiglia per le prestazioni del sistema. Questo fenomeno è tipico degli elaboratori paralleli, in cui è sempre presente il rischio di trasformare un problema intrinsecamente CPU-bounded in uno I/O-bounded. Nel complesso, si può infine affermare con sicurezza che il nuovo algoritmo riesce, a parità di tempo di esecuzione, a gestire immagini ad una risoluzione di 320x240 pixel, mentre quella originaria era di soli 106x80 pixel; tale risultato è la media pesata tra porzioni di codice notevolmente più veloci (l’immagine di disparità viene calcolata nel 50% del tempo, e quella di correlazione nel 20%), e altre decisamente più lente (il rilevamento degli ostacoli risulta nove volte più lento). Se gli obiettivi in termini di velocità che ci si era inizialmente posti possono dirsi in Capitolo 6. Risultati 70 buona sostanza raggiunti, resta comunque difficile trovare in letteratura misure precise delle prestazioni di sistemi paragonabili a quello sviluppato. Unica eccezione è quella proposta in [15]: in questo articolo viene infatti presentato un sistema software per il calcolo dell’immagine di disparità paragonabile al nostro, sia per il tipo di algoritmo adottato che per la sua implementazione (realizzata impiegando l’instruction set SSE); un confronto diretto resta difficoltoso per la mancanza di dettagli (ad esempio, non sono note le dimensioni delle finestre utilizzate per i confronti), ma i risultati (circa 25 ms per elaborare un fotogramma formato da 320x240 pixel, con una disparità massima R R di ricerca di 32 pixel, il tutto su un processore Intel Pentium4 a 2.26 GHz) non si discostano molto da quelle ottenibili in condizioni analoghe dal nostro codice, che impiega circa 40 ms a completare il medesimo calcolo. Capitolo 7 Conclusioni 7.1 Valutazione degli algoritmi Questo studio ha permesso di realizzare algoritmi efficienti e versatili per il calcolo della disparity space image e della V-Disparity image, e di sperimentare nuove soluzioni per il rilevamento di ostacoli a partire dall’immagine di disparità. Nei primi due casi si sono potuti valutare in modo qualitativo i risultati prodotti, tenendo come punto di riferimento quelli generati dal software esistente, mentre sono stati possibili confronti precsi sui tempi di esecuzione, che hanno anche guidato alcune delle scelte progettuali adottate; il giudizio sul comportamento dell’obstacle detector risulta, invece, per forza di cose più soggettivo: il verificarsi di falsi positivi e falsi negativi nei rilevamenti deve essere valutato manualmente fotogramma per fotogramma, data l’assenza di sequenze con caratteristiche rilevanti per il caso esaminato dotate di ground truth, e l’estrema difficoltà di produrne. L’ostacolo principale alla costruzione di un valido ground truth è legato alla valutazione delle coordinate mondo dei punti nelle immagini, anche solo limitatamente a quelli generati dagli oggetti di dimensioni maggiori: tale operazione non può essere svolta manualmente in tempi ragionevoli, e anche l’utilizzo di sensori in grado di fornire misure dirette, come il laser, risulta non privo di difficoltà. Durante la fase di sviluppo del sistema installato a bordo del Terramax sono state acquisite sequenze contenenti sia le immagini che i dati provenienti dal laser, ma nono71 Capitolo 7. Conclusioni 72 stante questo non è stato possibile alcun controllo diretto sull’immagine di disparità: si è invece scelto di confrontare le mappe degli ostacoli prodotte indipendentemente dai due sensori, controllando che oggetti ben identificabili risultassero posizionati nello stesso punto. Questa procedura ha permesso di capire quanto un’accurata calibrazione sia fondamentale per poter ottenere risultati confrontabili, e soprattutto integrabili, dai vari sensori a bordo del veicolo. 7.2 Sviluppi futuri Gli algoritmi presentati in questa tesi sono tutti funzionali al medesimo obiettivo (ossia l’individuazione di ostacoli in ambienti non strutturati), ma ne affrontano aspetti differenti: le prospettive di sviluppo che si aprono sono dunque molteplici. 7.2.1 V-Disparity image I risultati prodotti da questo algoritmo sono soddisfacenti in termini di qualità dell’immagine di correlazione prodotta, mentre la velocità di esecuzione, che pure è già stata ridotta notevolmente, può essere ancora migliorata; un incremento di prestazioni è infatti pensabile utilizzando per il calcolo i registri SSE, che hanno dimensioni doppie rispetto a quelli MMX utilizzati al momento (128 bit invece di 64): in questo modo diventerebbe possibile effettuare il calcolo su quattro righe per volta, invece che su due. 7.2.2 disparity space image Il calcolo dell’immagine di disparità offre ancora ampi margini di miglioramento, sia a livello algoritmico che implementativo; in letteratura sono presenti molti studi [12, 14, 16, 28] su come migliorare la fase di determinazione della disparità a partire dall’analisi della funzione di correlazione, ed in particolare sarebbe utile indagare i risultati prodotti dalle seguenti tecniche: Capitolo 7. Conclusioni 73 • analisi dei picchi di correlazione: la presenza di picchi vicini o ripetuti nella funzione di correlazione, che si possono ad esempio verificare nel caso di pattern ripetitivi, porta spesso ad errori di abbinamento; in tal caso bisogna rinunciare a fornire un valore per la disparità, per non introdurre informazioni erronee. • controllo sinistra-destra: l’immagine di disparità può contenere, in corrispondenza di occlusioni, abbinamenti spurii; per evitarli si può controllare che la disparità rilevata sia la stessa effettuando il calcolo sia tenendo l’immagine destra come riferimento, sia utilizzando la sinistra: cosı̀ facendo una zona che non sia visibile in entrambe fornisce valori di disparità differenti nei due casi, e può essere classificata come sconosciuta. • subpixel accuracy: il calcolo delle coordinate mondo di un punto può essere reso più preciso se la sua disparità viene misurata con una accuratezza superiore al pixel; per fare ciò si deve interpolare la curva di correlazione, e cercarne il minimo, anche se questo si trova a cavallo di due pixel • dimensionamento finestre di ricerca: finestre di ricerca più grandi possono aprire la strada all’utilizzo del modulo sviluppato per l’individuazione di ostacoli di notevoli dimensioni, e per l’individuazione dello spazio libero antistante il veicolo (di cui si parla in [7]) Per quanto riguarda gli aspetti implementativi, qualche miglioramento può essere introdotto con un’analisi più attenta dell’utilizzo della memoria cache, attraverso opportuni strumenti di profiling. 7.2.3 Rilevamento degli ostacoli In questo campo resta ancora tantissimo da fare, anche se il sistema sviluppato sembra promettente; sarebbe auspicabile provvedere ad un raffinamento progressivo delle regioni identificate, alternando fasi di rimozione a fasi di aggregamento: tale approccio, attualmente sperimentato presso il VisLab nel campo del riconoscimento di pedoni in ambito automobilistico, sta dando risultanti incoraggianti. Capitolo 7. Conclusioni 74 Sarebbe infine utile poter fornire, almeno in modo approssimativo, una classificazione degli ostacoli individuati, cosı̀ da facilitare il compito di pianificazione ai moduli che da questo dipendono. Bibliografia [1] AA.VV. IA32-Intel Architecture Optimization. Intel, 2004. Order Number 248966-011 http://developer.intel.com. [2] M. Baudoin. Impara Latex! (...e mettilo da parte). Supérieure de Techniques Avancées, seconda ed., 1996. Ecole Nationale Trad. A. Cannarsi ftp://ftp.pluto.linux.it/pub/pluto/ildp/misc/impara latex/. [3] M. Bertozzi e A. Broggi. GOLD: a Parallel Real-Time Stereo Vision System for Generic Obstacle and Lane Detection. IEEE Transactions on Image Processing, vol. 7(1):pp. 62–81, gen. 1998. [4] M. Bertozzi, A. Broggi e A. Fascioli. An extension to the inverse perspective mapping to handle non-flat roads. In IEEE Intelligent Vehicles Symp.. 1998. [5] A. Broggi, M. Bertozzi e A. Fascioli. Architectural Issues on Vision-based Automatic Vehicle Guidance: the Experience of the ARGO Project. Real Time Imaging Journal, vol. 6(4):pp. 313–324, ago. 2000. [6] A. Broggi, C. Caraffi, R. I. Fedriga e P. Grisleri. Obstacle Detection with Stereo Vision for off-road Vehicle Navigation. In Procs. Intl. IEEE Wks. on Machine Vision for Intelligent Vehicles. San Diego, USA, giu. 2005. [7] C. Caraffi. Stabilizzazione di immagini ed individuzione di ostacoli mediante visione artificiale stereo in ambienti non strutturati. Tesi di laurea, Università degli Studi di Parma - Facoltà di Ingegneria, 2004. 75 Bibliografia 76 [8] S. Cattani. Tecniche di Visione Artificiale basate su Agenti per l’automatizzazione della guida di un veicolo in ambiente non strutturato. Tesi di laurea, Università degli Studi di Parma - Facoltà diIngegneria, 2004. [9] P. Coulombeau e C. Laurgeau. Vehicle yaw, pitch, roll and 3D lane shape recovery by vision. In IEEE Intelligent Vehicles Symposium, Versailles, pp. 646–651. giu. 2002. [10] R. I. Fedriga. Elaborazione di immagini in ambito automobilistico per la localizzazione di ostacoli con tecniche stereoscopiche. Tesi di laurea, Università degli Studi di Pavia - Facoltà di Ingegneria, 2003. [11] A. Fog. How to optimize for the Pentium family of microprocessors, 2004. [12] P. Fua. A parallel stereo algoritm that produces dense depth maps and preserves image features. Machine Vision and Applications, vol. 6:pp. 35–49, 1993. [13] S. B. Goldberg, M. W. Maimone e L. Matthies. Stereo vision and rover navigation software for planetary exploration. In IEEE Aerospace Conference, Big Sky, Montana, USA, vol. 5, pp. 2025–2036. mar. 2002. [14] H. Hirschmüller, P. R. Innocent e J. Garibaldi. Real-Time Correlation-Based Stereo Vision with Reduced Border Errors, 2004. [15] Z. Hu e K. Uchimura. U-V-Disparity: An efficient algorithm for Stereovision Based Scene Analysis, 2004. [16] T. Kanade e M. Okutomi. A Stereo Matching Algorithm with an Adaptive Window: Theory and Experiment. IEEE Transactions On Pattern Analysis And Machine Intelligence, vol. 16, 1994. [17] T. Kanade, A. Yoshida, K. Oda, H. Kano e M. Tanaka. A Stereo Machine for Video-rate Dense Depth Mapping and Its New Applications. In Proceedings of 15th Computer Vision and Pattern Recognition Conference (CVPR). San Francisco, USA, giu. 1996. Bibliografia 77 [18] K. Konolige. Small vision systems: Hardware and implementation. In Eighth Intl. Symposium on Robotics Research, (Hayama, Japan), pp. 111–116. ott. 1997. [19] R. Kurazume e S. Hirose. Development of image stabilization system for remote operation of walking robots. In ICRA, San Francisco, pp. 1856–1861. 2000. [20] R. Labayrade e D. Aubert. Robust and fast stereovision based road obstacles detection for driving safety asistance. In Machine Vehicle Application 2002, Nara, Japan. dic. 2002. [21] R. Labayrade e D. Aubert. In-vehicle obstacles detection and characterization by stereovision. In IEEE In Vehicle Cognitive Computer Vision Systems, Graz, Austria, pp. 13–19. apr. 2003. [22] R. Labayrade e D. Aubert. A single framework for vehicle roll, pitch, yaw estimation and obstacles detection by stereovision. In Intelligent Vehicles Symposium Proceedings, Columbus. giu. 2003. [23] R. Labayrade, D. Aubert e S. S. Ieng. Onboard road obstacles detection in night condition using binocular CCD cameras. In ESV 2003 Proceedings, Nagoya, Japan. mag. 2003. [24] R. Labayrade, D. Aubert e J.-P. Tarel. Real time obstacle detection on non flat road geometry through V-disparity representation. In IEEE Intelligent Vehicles Symposium, Versailles, pp. 646–651. giu. 2002. [25] P. Lombardi, M. Zanin e S. Messelodi. Unified Stereovision for Ground, Road, and Obstacle Detection, 2004. [26] P. Medici. Tecniche di visione artificiale per l’individuazione del percorso di un veicolo in ambiente non strutturato. Tesi di laurea, Università degli Studi di Parma - Facoltà di Ingegneria, 2004. [27] P. P. Porta. Studio dell’integrazione di un sensore laser con un sistema di visione per la guida automatica in ambiente non strutturato. Tesi di laurea, Università degli Studi di Parma - Facoltà di Ingegneria, 2005. Bibliografia 78 [28] D. Scharstein, R. Szeliski e R. Zabih. A taxonomy and evaluation of dense twoframe stereo correspondence algorithms. In IEEE Workshop on Stereo and MultiBaseline Vision, Kauai, HI. dic. 2001. [29] G. S. Seetharaman e K. P. Valavanis. Modeling of multisensory robotic systems with failure diagnostic capabilities. In An Introduction to Intelligent and Autonomous Control, cap. 14, pp. 349–369. Panos J. Antsaklis and Kevin M. Passino, apr. 1992. http://www.nd.edu/ pantsakl/book1/Download/downloadpage.htm. [30] R. Simmons, L. Henriksen, L. Chrisman e G. Whelan. Obstacle avoidance and safeguarding for a lunar rover. In Annual Robotic Technology Forum, University of Wisconsin, Madison. lug. 1996. [31] S. Singh, R. Simmons, T. Smith, A. Stentz, V. Verma, A. Yahja e K. Schwehr. Recent progress in local and global traversability for planetary rovers. In IEEE International Conference on Robotics and Automation, San Francisco, USA. apr. 2000. [32] R. Y. Tsai. A versatile camera calibration technique for high-accuracy 3D machine vision metrology using off-the-shelf TV cameras and lenses. IEEE Journal of Robotics and Automation, pp. 323–334, ago. 1987. [33] W. van den Mark, F. Groen e J.-C. van den Heuvel. Stereo based navigation in unstructured environments. In IEEE Instrumentation and Measurement Technology Conference Budapest, Hungary. 2001. [34] T. A. Williamson. A High-Performance Stereo Vision System for Obstacle Detection. Tesi di dottorato, Carnegie Mellon University, set. 1998. [35] Z. Zhu, G. Xu e X. Lin. Constructing 3D natural scene from video sequences with vibrated motions. In Virtual Reality Annual International Symposium, p. 105. IEEE Computer Society, 1998. ISBN 0-8186-8362-7. Ringraziamenti Il primo grazie va senz’altro al professor Alberto Broggi, che mi ha permesso di partecipare alla grande avventura della Grand Challenge. Naturalmente, grazie a tutti i ragazzi del laboratorio, a partire dai miei due fantastici correlatori: Claudio (che non si stanca mai di mettere a soqquadro il mio codice, e che giorno per giorno mi ha insegnato cosa vuol dire lavorare per la squadra) e Paolo M (che incredibilmente ha trovato sempre il tempo di rispondere alle mie domande più assurde, e che mi ha fatto apprezzare la sottile soddisfazione d’aver risparmiato un millisecondo), eppoi Stefano G, Guido, il PierPa, Pietro, Stefano C, Paolo G, Mauro, il Bomba e Isabella. Grazie a Mirko, con cui ho condiviso tante tesine, e che in questi mesi ha avuto la pazienza di utilizzare e testare il mio codice, che per molto tempo è stato tutto meno che stabile. Grazie a tutti i professori che ho avuto, ed in particolar modo quelli della Palazzina 1: non è stato sempre facile stare al passo, ma ne è davvero valsa la pena! Un ringraziamento particolare va poi al professor Massimo Bertozzi, che obbliga (e a ragione!) tutti quanti qui al VisLab ad usare il LATEX, e a Monica Reggiani, che mi ha fatto scoprire il magico mondo della Gentoo =) Grazie a tutti i compagni di questi anni, ed in particolare Dario, che ha saputo illuminarmi sui concetti più difficili con una semplicità disarmante, ma soprattutto è stato un amico, Davide, che ora vedo un po’ meno, con cui ho condiviso giorni (e nottate) indimenticabili, e il Bona, Marco, Diego, Andrea, Paolo B, Il Dao, Cristian, Herman, Damiano (non vi ho dimenticato!). Grazie a Paolo, Piero, Edo, Gianni, Ciro, Alessandro, Aurora, Martina, Andrea e Leo, con cui ho condiviso veramente tanto (e in certi momenti si potrebbe dire praticamente tutto) in questi ultimi cinque anni: non sono state sempre rose e fiori, ma 79 Ringraziamenti 80 l’amicizia, se è sincera, è anche cosı̀, e spero che cosı̀ possa restare ancora a lungo. Grazie agli amici di sempre, Francesco, Filippo, Emanuele, Carlo, la già dottoressa Francesca M, Denis, Benedetta, Martino, Sara, Agnese e tutti gli altri, che mi fanno compagnia da oramai tanti anni. Grazie alla mia famiglia, che mi ha sostenuto (anche economicamente) in questa impresa, e che ha saputo essermi sempre vicina, anche in questa estate in cui ho avuto tanto da chiedere, e ben poco tempo per ricambiare. Lo so, pensi che tra tutti questi ringraziamenti mi sia dimenticato proprio di te...e invece no. Solo, mi pareva giusto terminare come ho cominciato, con un pensiero rivolto alla persona più importante della mia vita, e allora grazie, Francesca, grazie perchè le parole non mi bastano più per dirti cosa significa per me averti accanto, e, forse, neanche servono. Finito di stampare il 7 settembre 2005 utilizzando LATEX 2ε