Università degli Studi di Padova - Facoltà di Ingegneria - Corso di Laurea in Ingegneria Elettronica Elaborato: |
||
La tesi verte sulla costruzione della mappa di ambienti
indoor a partire da immagini omnidirezionali acquisite da un robot in movimento.
L'idea di base è di valutare la distanza degli oggetti presenti
nella scena a partire dal movimento apparente di essi nella sequenza di
immagini, secondo il principio che un oggetto posto nelle vicinanze del
robot sara soggetto ad un movimento apparente maggiore di uno lontano;
si pensi a quello che succede viaggiando in automobile e osservando il
paesaggio dal finestrino laterale, il bordo della strada sembra muoversi
molto velocemente, mentre gli oggetti lontani dalla strada sembrano quasi
fermi. Si noti che per ottenere una stima fatta in questa maniera è
necessario che gli oggetti considerati non siano soggetti a movimento (ipotesi
di ambiente statico).
Da quanto detto si può quindi suddividere il problema considerato in due sotto problemi:
Si può avere una percezione diretta dell'optical flow mentre ci si muove ad una certa velocità come di un "flusso" nel campo visivo che ha origine in un punto (solitamente posto all'orizzonte) e che si espande verso i lati del campo visivo stesso.
Esso viene utilizzato da molte specie animali e dall'uomo per ricavare informazioni
sul moto rilevabile nel campo visivo e per la navigazione. Allo stesso
modo viene utilizzato nella computer vision a partire da sequenze di immagini,
e in questo ambito esso assume la forma di campo vettoriale nello spazio
dell'immagine, associando ad ogni punto (o solamente ad alcuni, secondo
l'algoritmo) un vettore di velocità. Alternativamente, l'optical
flow può essere rappresentato da un vettore di spostamento (o
corrispondenze tra i punti delle immagini) se vengono considerate solamente
due immagini per volta.
In letteratura sono presenti un gran numero di algoritmi per la rilevazione dell'optical flow, per le più disparate applicazioni, che possono essere suddivisi in linea di massima in base al principio di funzionamento (Barron):
Osservando le immagini acquisite dal robot in un corridoio
possiamo osservare come l'informazione sia contenuta nella parte centrale
di esse.
Se in particolare consideriamo che quanto detto relativamente alla relazione
distanza-moto possiamo notare come l'informazione sull'ambiente utile ai
nostri fini sia quella riguardante i muri e le porte presenti nell'immagine.
Sfruttiamo una peculiarità del visore omnidirezionale, quella di mappare le linee vericali presenti nell'ambiente in linee radiali nelle immagini, che insieme ad alcuni vincoli sul movimento del robot (generalmente soddisfatti in questa applicazione) permette di restringere il campo della ricerca dell'optical flow alla sola componente azimutale all'interno dell'immagine.
Questa può essere ottenuta prendendo in considerazione solamente la parte dell'immagine evidenziata in figura. Recuperando i valori RGB della regione di interesse (ROI) e mediandoli lungo le linee radiali otteniamo una immagine unidimensionale (di dimensioni 1 x 1024). Le informazioni sul movimento apparente delle strutture nelle immagini sono calcolate sui punti dell'immagine unidimensionale che presentano variazioni rilevanti nella derivata spaziale dC /dx, che sono di solito associate a zone dove si ha una variazione della struttura spaziale dell'ambiente (bordi delle pareti) oppure variazioni di colore.
L'utilizzo di un'immagine unidimensionale permette di limitare il numero di calcoli da effettuare ed ottenere una veloce esecuzione dell'algoritmo.
L'optical flow viene calcolato in modo gerarchico, stimandolo prima su versioni a bassa risoluzione delle immagini originali ed raffinandolo successivamente sulle immagini ad alta risoluzione. Tale tecnica permette di rilevare ampi valori dell'optical flow senza incorrere nei problemi dovuti all'aliasing temporale, che pregiudicherebbe altrimenti l'affidabilità dei risultati.; L'optical flow constraint equation applicata alle immagini unidimensionali riesce (scomparendo una delle incognite) a determinare univocamente l'optical flow .
Per ridurre l'influenza del rumore e gli errori dovuti ai fenomeni di occlusione utilizziamo le informazioni derivate dal colore in due modi: abbiamo utilizzato una riformulazione dell'OFCE che fa riferimento alle varianzioni di colore piuttosto che di luminosità; inoltre abbiamo posto una soglia sul prodotto interno dei gradienti spaziali nello spazio RGB, escludendo nel calcolo dell'optical flow quei valori che nelle due immagini portavano ad associare punti aventi variazione di colore troppo diverse.
Il sistema di calcolo dell'optical flow è stato implementato in C++, utilizzando le librerie QT della Trolltech. Le classi principali implementate sono state:
L'algoritmo risulta abbastanza veloce e ne è stato misurata la varianza dell'errore su immagini reali.
Le osservazioni delle posizioni degli edges permettono di risalire alla distanza degli oggetti dal robot a meno di un fattore determinato dal movimento effettuato tra due osservazioni. In Nelson viene fornita una formula approssimata (nel caso in cui lo spostamento M del robot sia piccolo rispetto alla distanza ri dell'edge) che collega queste grandezze all'optical flow.
Tralasciando le formule mostriamo la forma dell'optical flow nel caso di traslazione pura, caratterizzato dalla presenza di un fuoco di espansione e da uno di contrazione (nelle cui vicinanze l'immagine appare espandersi e contrarsi per effetto prospettico). Il grafico dell'optical flow appare così costituito da una sinusoide la cui ampiezza dipende dalla distanza degli oggetti osservati alla quale va sommata una costante nel caso in cui il movimento del robot presenti una componente rotazionale.
![]() |
![]() |
Per costruire la mappa (costituita dalle coordinate dei punti rilevati) utilizziamo il metodo proposto in Yagi: dato che le equazioni che legano le osservazioni ai punti sono non lineari

Il sistema risultante presenta sensibilità all'errore molto alta nella direzione del moto (dove l'optical flow è nullo a prescindere dalla distanza degli oggetti) e minima in direzione perpendicolare al moto.
L'algoritmo per la mappa è stato implementato come script SCILAB, un ambiente open-source simile a MATLAB. Gli script principali sono contenuti nei files
Abbiamo applicato l'algoritmo ad una sequenza di immagini acquisite dal robot in un corridoio del Dipartimento di elettronica e informatica, ottenendo la mappa mostrata in figura.

L'algoritmo risulta inaffidabile riguardo la percezione delle distanze nella direzione del moto, ma a questo è possibile ovviare evitando di percorrere lunghi tratti nella stessa direzione, ma muovendosi lungo linee spezzate o curve (a questo riguardo sono state eseguite delle prove nell'ambiente simulato).
Un problema non risolto è stato quello della gestione dell'apparizione e scomparsa di edges.
L'algoritmo dipende per il suo funzionamento da una stima del moto del robot. Negli esperimenti effettuati si è supposto che il robot si muovesse di 10 cm per frame, sarebbe opportuno inserire nel sistema una stima più precisa del movimento, basata per esempio sul calcolo dell'optical flow sul piano di terra, dal quale estrarre i parametri del moto (in particolare, l'algoritmo si è dimostrato sensibile agli errori sulla stima della rotazione).