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ε