Politecnico di Milano Facoltà di Ingegneria dei Sistemi Corso di Studi in Ingegneria Matematica Tesi di Laurea Magistrale STIMA DEL MOTO DA SEQUENZE DI IMMAGINI OMNIDIREZIONALI Relatore: Prof. Marco MARCON Correlatore: Dott. Emanuele PLEBANI Tesi di Laurea Magistrale di: Francesco GROSSI Matr. 750680 Anno Accademico 2010-2011 Sommario La tesi è stata sviluppata nell’ambito del progetto europeo Astute, che mira a portare innovazione tecnologica nel campo del mercato automobilistico. Uno degli ambiti di innovazione riguarda la stima degli spostamenti dell’autovettura mediante tecniche di analisi di immagine applicate ai dati forniti da una videocamera a bordo. La ricostruzione tridimensionale a partire da sequenze di immagini, nota anche come Structure from Motion, è un’area di ricerca di grande interesse, grazie alla grande diffusione e ai miglioramenti delle tecnologie di acquisizione di immagini digitali. Per un’applicazione in contesti urbani risulta interessante utilizzare videocamere omnidirezionali, che possono essere realizzate mediante ottiche particolari o incollando fra loro immagini scattate con videocamere tradizionali. La possibilità di estendere il campo visivo a 360° consente infatti di migliorare la qualità della ricostruzione. La tesi propone due metodi di stima del moto di una videocamera omnidirezionale. Il primo metodo utilizza coppie di viste per stimare gli spostamenti a partire dal calcolo della matrice essenziale; il secondo metodo utilizza terzetti di viste per calcolare il tensore trifocale, da cui vengono estratti gli spostamenti. I due metodi sono messi a confronto sia su dati sintetici che sperimentali, utilizzando le viste panoramiche di Google Street View. 2 Abstract The present thesis has been developed in the context of the Astute European Project, which aims at bringing technological innovation in the automotive market. One of the proposed innovations is the estimation of the car movements using image analysis techniques applied to the data collected by an onboard camera. Tridimensional reconstruction from sequences of images, a process called Structure from Motion, is an area of research which has been highly developed in recent years, following the widespread availability and technological improvements of digital image acquisition systems. Applications of SfM in urban contexts could benefit from the use of of omnidirectional images, generated with special optics applied to an image sensor or by stitching together multiple pictures. The large field of view can in fact improve the quality of the reconstruction. The thesis presents two methods for the estimation of the movements of an omnidirection camera. The first algorithm uses pairs of views to estimate the egomotion by calculating the essential matrix; the second uses triplets of views to compute the trifocal tensor, from which the movements are estimated. The two methods are compared in different test cases, using both synthetic and experimental data obtained from Google Street View. 3 Indice Introduzione 6 1 Geometria proiettiva ed epipolare 10 1.1 Geometria proiettiva per videocamere tradizionali . . . . . . . . 10 1.2 Geometria epipolare per videocamere tradizionali . . . . . . . . 14 1.3 Videocamere omnidirezionali . . . . . . . . . . . . . . . . . . . . 23 2 Metodi di stima e algoritmi 2.1 Immagini omnidirezionali . . . . . . . . . . . . . . . . . . . . 2.2 Identificazione dei punti notevoli dell’immagine tramite SIFT 2.3 Stima robusta con RANSAC . . . . . . . . . . . . . . . . . . 2.4 Stima della matrice essenziale . . . . . . . . . . . . . . . . . 2.5 Stima del tensore trifocale . . . . . . . . . . . . . . . . . . . 2.6 Calcolo di R, t e il problema della scala . . . . . . . . . . . . 2.7 Triangolazione dei punti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 36 37 42 44 48 52 3 Risultati sperimentali 56 3.1 Risultati con dati sintetici . . . . . . . . . . . . . . . . . . . . . 56 3.2 Risultati con dati sperimentali . . . . . . . . . . . . . . . . . . . 62 Conclusioni 76 A Codice Matlab 79 A.1 Stima del moto con tre viste su immagini reali . . . . . . . . . . 79 A.2 Stima del tensore trifocale e di R, t . . . . . . . . . . . . . . . . 82 Bibliografia 90 4 Elenco delle figure 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Il piano proiettivo P2 . . . . . . . . . . . . . . . . . . . . . . . Il modello di videocamera di tipo pinhole. . . . . . . . . . . . . Rappresentazione della geometria epipolare tra due viste. . . . Rappresentazione dei vincoli di geometria epipolare per tre viste. Modello di videocamera omnidirezionale. . . . . . . . . . . . . . I cerchi epipolari nel caso di due viste omnidirezionali. . . . . . Cerchi epipolari nel caso di tre viste omnidirezionali . . . . . . . 13 14 15 19 23 27 30 2.1 2.2 Creazione delle viste panoramiche di Google Street View. . . . Particolare di una immagine di Google Street View di bassa qualità. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proiezione stereografica delle immagini di Street View. . . . . Griglia di campionamento della proiezione equirettangolare. . Rettificazione delle proiezioni equirettangolari. . . . . . . . . . . . . . 33 34 36 38 Stima del moto proprio, caso ideale. . . . . . . . . . . . . . . . . Stima del moto proprio, caso solo errori di misurazione. . . . . . Stima del moto proprio, caso con rumore ad alta intensità. . . . Stima del moto proprio, caso false corrispondenze. . . . . . . . . Stima del moto proprio, caso rumore a bassa intensità e false corrispondenze. . . . . . . . . . . . . . . . . . . . . . . . . . . . Stima del moto proprio, caso con rumore e false corrispondenze. Esempio di un outlier non rimosso. . . . . . . . . . . . . . . . . Esempio di tre viste omnidirezionali consecutive del test di stima Via Sforza. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Corrispondenze tra punti notevoli nel test Via Sforza. . . . . . . Corrispondenze tra punti notevoli dopo l’applicazione di RANSAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Percorso stimato per il test di Via Sforza. . . . . . . . . . . . . . Percorso stimato per il test di Piazza Castello. . . . . . . . . . Corrispondenze inlier nel test di Piazza Castello. . . . . . . . . 58 59 61 63 2.3 2.4 2.5 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 5 . 32 64 65 66 68 69 70 72 74 75 Introduzione L’ambito di azione: la Structure from Motion È in larga parte grazie alla vista che l’uomo vive e conosce il mondo circostante. Con il progresso tecnologico anche i computer hanno accesso alle immagini del mondo visibile: fotografie e video digitali sono dati disponibili in enormi quantità e a bassi costi, pronti per essere analizzati e processati. Tra le varie informazioni che l’uomo ottiene tramite la vista c’è il senso dello spazio, che permette di stimare dimensioni, distanze, movimenti. Senza farci caso, semplicemente osservando gli oggetti intorno cambiare grandezza e prospettiva, ognuno è in grado di capire con buona approssimazione di quanto si è mosso. Tutto questo avviene grazie alle informazioni recuperate dal sistema visivo, in cui gli occhi forniscono flussi di immagini da due diversi punti di vista, requisito fondamentale per avere il senso della tridimensionalità, e all’elaborazione dell’esperienza, grazie alla quale siamo in grado di conoscere le dimensioni tipiche degli oggetti comuni. Grazie alle possibilità concesse negli ultimi anni dall’onnipresenza delle videocamere digitali e dall’aumento di potenza di calcolo e memoria, anche i computer sono oggi in grado di mimare alcune funzioni del sistema visivo umano, in certi ambiti anche con migliore precisione. Una delle possibili applicazioni dell’analisi d’immagine è quella della ricostruzione 3D del mondo a partire da fotografie prese da diversi punti di vista, sinteticamente detta Structure from Motion (SfM). Le viste possono arrivare da più apparecchi fotografici o da un singolo flusso video, ad esempio una videocamera che si muove e riprende la scena da diversi punti; tramite queste informazioni è possibile ricostruire il mondo tridimensionale e stimare la posizione della videocamera stessa. Esiste ormai una vasta letteratura sull’ambito, anche formalizzata in libri di testo (a titolo di esempio [8]); i vari metodi che vengono proposti per realizzare la Structure from Motion sono tipicamente modulari, e consistono in diverse fasi: 1. Identificazione di punti notevoli dell’immagine, che possano essere riconoscibili anche cambiando punto di vista. 6 2. Riconoscimento delle corrispondenze, per capire quali punti in un’immagine corrispondano a quali altri nelle diverse immagini, in modo da avere informazioni sullo spostamento dell’osservatore. 3. Calcolo della geometria della scena, per capire da quali punti di vista sono state riprese le immagini. 4. Ricostruzione della scena tridimensionale. La modularità consente un miglioramento focalizzato in uno specifico settore, e la letteratura in ciascun ambito è molto ampia. Per quanto riguarda il punto 1, sono ormai affermati metodi di identificazione di punti notevoli locali, a cui vengono assegnati descrittori, ovvero “codici di identificazione”, che siano il più possibile invarianti a cambi di luminosità, scala, rotazioni e distorsioni prospettiche. Tra i più utilizzati ricordiamo la Scale Invariant Feature Transform (SIFT, [12]) e la Speeded Up Robust Feature (SURF, [1]). Il riconoscimento delle corrispondenze avviene tipicamente in due passi: una prima selezione si basa sull’accoppiamento dei punti notevoli in base alla distanza euclidea dei loro descrittori, visti come vettori di uno spazio ndimensionale (ad esempio SIFT usa descrittori con 128 elementi). Se ad esempio un descrittore è invariante per cambi di posizione e rotazione, lo stesso punto notevole in un’altra immagine avrà un descrittore identico, e quindi distanza euclidea nulla. Naturalmente, essendo il descrittore una semplificazione locale dell’immagine, possono verificarsi casi in cui punti diversi hanno descrittori simili, e che vengono quindi stimati come corrispondenze. Per ovviare a questo problema si ricorre tipicamente a metodi ispirati al RANdom SAmple Consensus (RANSAC, [4]), che cercano di distinguere le corripondenze corrette da quelle non corrette provando molteplici modelli e selezionando quello che meglio descrive l’insieme di punti. Il calcolo della geometria della scena si basa sull’utilizzo dei vincoli generati dalle corrispondenze di punti, la cosiddetta geometria epipolare. A seconda del numero di viste utilizzate esistono diversi metodi, di cui in [8, 21] è possibile trovare una trattazione completa. Infine, la ricostruzione della scena tridimensionale avviene tramite metodi di triangolazione, che stimano la posizione dei punti dello spazio a partire dalle loro proiezioni sulle immagini e da videocamere i cui parametri siano noti. I metodi descritti sono ormai affermati per quanto riguarda le videocamere tradizionali, che hanno angoli di visuale minori di 180°. Esistono però lenti con un campo visivo maggiore, le cosiddette fisheye, ed esistono algoritmi in grado di incollare diverse immagini per generare una vista omnidirezionale, a 360°. Il tipico esempio è Google Street View ([9]), dove all’utente viene proposta la vista panoramica, omnidirezionale, delle strade di quasi tutto il 7 mondo. Sebbene i metodi di generazione di queste immagini possano essere molto diversi, entrambe possono essere descritte con il modello di videocamera omnidirezionale. È possibile usare metodi di Structure from Motion anche con immagini omnidirezionali, che offrono un notevole vantaggio in fatto di quantità di oggetti inquadrati nella scena e aiutare quindi il processo di ricostruzione. Uno dei problemi della ricostruzione da più viste prese lungo un percorso allineato con l’asse ottico è che la prospettiva degli oggetti inquadrati non cambia significativamente in una videocamera tradizionale, cosa che aumenta l’incertezza della ricostruzione; con viste omnidirezionali vengono invece utilizzati anche gli oggetti che compaiono “lateralmente” alla videocamera, quelli per cui la variazione di prospettiva è maggiore. La ricostruzione con videocamere omnidirezionali è stata portata avanti con diversi metodi (vedi ad esempio [6, 2, 17, 5, 18]); parte della letteratura disponibile per le videocamere tradizionali è applicabile o adattabile al caso omnidirezionale, come proposto in [20], anche se manca una sistematizzazione rigorosa. Tra i risultati più interessanti ricordiamo la ricostruzione metrica ottenuta da immagini omnidirezionali non calibrate di Micusik ([13, 14]) e la Structure from Motion ottenuta da Torii e altri ([19]) a partire da coppie di immagini di Google Street View. Finalità della tesi Questa tesi è stata realizzata nell’ambito del progetto europeo Astute [10], Pro-active decision support for data-intensive environments, che mira ad applicare tecnologie avanzate di interazione uomo-macchina come supporto alle decisioni in contesti di sovraccarico di informazioni. Il Politecnico di Milano partecipa al progetto, collaborando con altre aziende italiane, nell’offrire un contributo allo sviluppo di tecnologie di analisi d’immagine da impiegare in ambito automobilistico. Uno degli strumenti più utili per il supporto alle decisioni durante la guida è il navigatore GPS con navigazione turn-by-turn; tuttavia in città vi sono situazioni, dette di canyon urbano a causa della altezza e vicinanza degli edifici a bordo strada, in cui la cattiva ricezione del segnale rende impreciso il posizionamento GPS. Il navigatore inoltre non ha modo di calcolare l’orientamento spaziale dell’automobile, che viene solitamente estrapolato dai movimenti passati. Un aiuto in entrambi i casi può arrivare dall’analisi di immagine: effettuando Structure from Motion da immagini prese da una videocamera presente sull’abitacolo, si può integrare e raffinare il posizionamento stimato da GPS. 8 Utilizzare videocamere tradizionali presenta però diversi problemi: anche utilizzando un buon grandangolo, buona parte dei punti notevoli identificati nei fotogrammi del video è relativa ad oggetti disposti lungo l’asse ottico, con i problemi di precisione di stima prima evidenziati; d’altra parte le zone laterali delle immagini cambierebbero molto rapidamente a causa della velocità dell’automobile, cosa che le renderebbe poco affidabili. Una videocamera omnidirezionale riuscirebbe ad ovviare a questi problemi. Inoltre, una delle aziende coinvolte nel progetto ha sviluppato competenze nella creazione di immagini omnidirezionali a 360° incollando immagini riprese con videocamere tradizionali. Nell’ottica di sfruttare questa tecnologia abbiamo quindi studiato l’uso di queste immagini nell’ambito della Structure from Motion. La tesi ha quindi come obiettivo lo sviluppo di un metodo di stima del moto proprio della videocamera utilizzando immagini omnidirezionali. Una delle scelte che ci si trova ad affrontare è quella del numero di immagini da utilizzare contemporaneamente: la scena 3D può essere ricostruita utilizzando almeno due viste mediante la matrice fondamentale, ma sono stati proposti metodi per un numero maggiore di viste. Questa tesi si propone in particolare di studiare la ricostruzione a partire da tre viste utilizzando il tensore trifocale, e di confrontarne le prestazioni con il caso a due viste nell’ambito di scenari urbani, in vista di un’implementazione prototipale per il progetto Astute. 9 Capitolo 1 Geometria proiettiva ed epipolare In questo capitolo vengono trattate le basi di geometria e di modellizzazione delle videocamere necessarie per la ricostruzione del movimento proprio delle videocamere. La trattazione inizia con una panoramica sulle videocamere tradizionali, sulle quali è presente una ricca bibliografia, per passare poi alle videocamere omnidirezionali. 1.1 Geometria proiettiva per videocamere tradizionali In questa sezione introduciamo gli elementi di geometria proiettiva che verranno usati nella tesi; iniziamo con una trattazione delle videocamere tradizionali in quanto la maggior parte dei metodi a cui si farà riferimento sono stati sviluppati in questo contesto. Rappresentazione omogenea di linee e punti Un retta nel piano (x, y) è identificata da un’equazione del tipo ax + by + c = 0, a, b, c ∈ R; il vettore (a, b, c)> è un rappresentante della classe di equivalenza delle rette del tipo kax + kby + kc = 0, visto che la moltiplicazione per una costante non nulla non cambia l’equazione. La rappresentazione vettoriale delle rette, dotate di tale relazione di equivalenza, viene detta omogenea. L’insieme delle classi di equivalenza dei vettori di R − (0, 0, 0)> forma lo spazio proiettivo P2 . Analogamente anche i punti hanno una rappresentazione omogenea. Un punto x = (x, y)> giace su una retta l = (a, b, c)> se e solo se ax + by + c = 0; esprimendo la relazione in termini di prodotto scalare, (x, y, 1)(a, b, c)> = (x, y, 1)l = 0. I punti di R2 possono quindi essere rappresentati in modo 10 omogeneo aggiungendo una terza coordinata pari a 1. Moltiplicando la rappresentazione omogenea di un punto per una costante non nulla, otteniamo ancora un rappresentante della stessa classe di equivalenza, come nel caso delle rette: un vettore omgeneo generico (x1 , x2 , x3 )> rappresenta il punto ( xx31 , xx23 )> di R2 . I punti nella loro rappresentazione omogenea sono quindi elementi di P2 . Sia per le rette che per i punti la rappresentazione omogenea è in realtà ridondante, in quanto è sufficiente specificare due gradi di libertà per fissare un punto o una retta nel piano, quindi ad esempio i due rapporti {a : b : c}. Punti e rette con la terza coordinata nulla possono essere aggiunti a R2 per completare lo spazio proiettivo P2 . Sono punti ideali, detti punti all’infinito della forma (x1 , x2 , 0)> , ognuno dei quali è definito dal rapporto x1 : x2 , che appartengono a una sola retta, la retta all’infinito, definita dal vettore l∞ = (0, 0, 1)> . Punti e retta all’infinito sono utili per semplificare le proprietà di intersezioni di rette e punti. In notazione omogenea, infatti, • L’intersezione di due rette l e l0 è il punto x = l × l0 . • La retta passante per due punti x e x0 ha l’equazione l = x × x0 . Se abbiamo due rette parallele, della forma l = (a, b, c)> e l0 = (a, b, c0 )> , l’intersezione è x = l × l0 = (c0 − c) (b, −a, 0)> = (b, −a, 0)> a parte il fattore di scala. Nello spazio proiettivo P2 due rette parallele si intersecano quindi in un punto all’infinito. Trasformazioni proiettive Nello spazio proiettivo è possibile definire trasformazioni, esprimibili con l’algebra lineare, che possono essere usate per modellizzare il processo di formazione dell’immagine a partire da una scena 3D. Definizione 1. Una trasformazione proiettiva o omografia è una mappa invertibile h : P2 7→ P2 tale che tre punti x1 , x2 e x3 appartengano alla stessa retta se e solo se h (x1 ), h (x2 ) e h (x3 ) appartengono alla stessa retta. Vale il seguente Teorema 2. Una mappa h : P2 7→ P2 è un’omografia se e solo se esiste una matrice 3 × 3 non singolare H tale che ogni punto x di P2 viene trasformato nel punto h (x) = Hx. Come risultato di questo teorema è possibile definire un’omografia nel seguente modo: 11 Definizione 3. Un’omografia nel piano è una trasformazione lineare su vettori omogenei rappresentata da una matrice non singolare di dimensioni 3 × 3 : h11 h12 h13 x01 x1 0 x2 = h21 h22 h23 x2 h31 h32 h33 x03 x3 o più brevemente x0 = Hx. È da notare che moltiplicando la matrice H per uno scalare non nullo l’omografia rimane invariata, ovvero il risultato è un punto appartenente alla stessa classe di equivalenza del risultato precedente. Per questo la matrice H è anch’essa detta omogenea, dato che come per punti e rette, solo il rapporto tra gli elementi è importante. Dei nove elementi di H solo otto sono indipendenti, per cui H ha otto gradi di libertà. Lo spazio proiettivo P3 Quanto visto nel piano può essere facilmente esteso nello spazio tridimensionale. Un punto omogenero sarà del tipo X = > 2 3 1 , X , X (X1 , X2 X3 , X4 )> , che rappresenta il punto di R3 X = ( X X4 X4 X4 ) , e che in caso X4 = 0 rappresenta un punto all’infinito. Un’omografia in P3 è rappresentata da una matrice non singolare 4 × 4: X0 = HX. La matrice H è omogenea e ha 15 gradi di libertà (16 elementi meno la scala). Se prima un vettore di R3 esprimeva una retta, ora un vettore 1 × 4 rappresenta un piano: π1 X + π2 Y + π3 Z + π4 = 0, sempre in notazione omogenea, che ha tre gradi di libertà. Come nel caso bidimensionale, un punto giace su un piano se vale π > X = 0. Per consistenza di notazione, nel testo i punti di P2 e R2 saranno indicati con le lettere minuscole, mentre i punti di P3 e R3 saranno in maiuscolo. La matrice di proiezione della videocamera In una videocamera tradizionale gli oggetti presenti nella scena vengono proiettati, attraverso ottiche più o meno complesse, sul sensore, che tipicamente è planare. In termini geometrici i punti di R3 vengono proiettati su un piano, che viene chiamato piano immagine. Tralasciando per il momento gli effetti non lineari dovuti all’ottica, questa operazione è una semplice proiezione da R3 a R2 , che può essere comodamente descritta utilizzando gli spazi proiettivi P3 e P2 . Se infatti i punti sono scritti in forma omogenea, la proiezione assume la forma di prodotto matrice per vettore, come vediamo ad esempio nel semplice 12 Figura 1.1: Il modello del piano proiettivo: punti e rette di P2 sono rappresentati da raggi e piani uscenti dall’origine. I punti a coordinata X3 nulla sono i punti all’infinito. modello a pinhole camera, che sta alla base del funzionamento delle prime macchine fotografiche: X Y Z 1 X f 0 fX Y f 0 7→ f Y = Z 1 0 Z 1 (1.1) f , come mostrato in Figura 1.2, è detta lunghezza focale, ed è la coordinata Z del piano immagine. La matrice che effettua la proiezione, che chiameremo P, è detta matrice di proiezione della videocamera (camera projection matrix) e ne contiene tutte le informazioni. I punti xi sul piano immagine sono generati dai raggi passanti per il centro della videocamera, o centro ottico, che è l’origine, e i punti Xi . Nella realtà il piano immagine è al di là del centro ottico, e l’immagine viene ribaltata. Generalizzando il semplice modello pinhole, una videocamera generica può avere una matrice P di questo tipo: P = K [R | t] dove R è la matrice di rotazione della videocamera rispetto alle coordinate e ne rappresenta la traslazione (con C̃ centro della videoglobali, e t = −RC camera nelle coordinate globali). Queste informazioni sono dette estrinseci 13 Figura 1.2: Il modello di videocamera di tipo pinhole. della videocamera perché contengono le informazioni di posizionamento della videocamera nello spazio. K è detta matrice di calibrazione, perché contiene i parametri interni, o intrinseci della videocamera. Una generica videocamera CCD può essere rappresentata da αx x0 αy y0 (1.2) K= 1 dove αx = f mx e αy = f my rappresentano la lunghezza focale della camera in termini di dimensione dei pixel (che potrebbero non avere uguale fattore di forma in x e y), e mx e my rappresentano la densità lineare dei pixel nelle due direzioni. Se chiamiamo asse principale la retta perpendicolare al piano immagine e passante per il centro della camera e punto principale l’intersezione e 0 = (x0 , y0 ) = (mx px , my py ) rappresenta di questo asse con il piano, il punto x la posizione del punto principale in termini di pixel, visto che non è detto che il piano immagine sia centrato rispetto all’asse principale. 1.2 Geometria epipolare per videocamere tradizionali Matrice fondamentale F e matrice essenziale E Se riprendiamo una scena tridimensionale da diversi punti di vista, le immagini ottenute non saranno completamente indipendenti l’una dall’altra, ma mostreranno gli oggetti presenti secondo ben precise regole prospettiche, a seconda 14 Figura 1.3: Rappresentazione della geometria epipolare tra due viste. della calibrazione interna della videocamera e dalla sua posizione nello spazio. La geometria epipolare descrive questi vincoli di geometria proiettiva. Prima di proseguire, introduciamo le seguenti definizioni, iniziando da una geometria epipolare con due viste: la baseline è il segmento che congiunge i due centri delle videocamere; l’epipolo è il punto di intersezione tra la baseline e il piano immagine. Nella prima vista quindi l’epipolo e è l’immagine del centro della seconda videocamera, nella seconda vista il punto e0 è l’immagine del centro della prima videocamera. Un piano è detto epipolare se contiene la baseline; l’intersezione tra un piano epipolare e il piano immagine è detta retta epipolare. Nel caso di due viste, la geometria epipolare può essere algebricamente rappresentata con la matrice fondamentale F, di cui mostriamo brevemente la derivazione. Passo 1: trasferimento di un punto attraverso un piano Sia π un piano non passante per i centri C e C0 delle videocamere come mostrato in Figura 1.3, il punto X è proiettato in x sul primo piano immagine, e in x0 sul secondo: tra x e x0 il passaggio avviene tramite il piano π. Dato che X giace sulla congiungente C − x, il punto proiettato x0 appartiene alla retta epipolare l0 . I punti x e x0 sono quindi entrambi immagini del punto 3D X. Questo ragionamento vale per ogni coppia di punti corrispondenti xi ↔ xi0 . In conseguenza, l’insieme di tutti i punti xi della prima immagine e dei corrispondenti xi0 della seconda sono proiettivamente equivalenti, dato che sono 15 proiettivamente equivalenti all’insieme planare dei punti Xi . Esiste quindi un’omografia Hπ che mappa ogni xi nel rispettivo xi0 . Passo 2: costruzione della retta epipolare Dato un punto x0 , la retta epipolare l0 che passa per x0 e per l’epipolo e0 è l0 = e0 × x0 = [e0 ]× x0 , dove l’operatore [e0 ]× è così definito: 0 −x3 x2 x1 0 −x1 x2 = x3 −x2 x1 0 x3 × e rappresenta il prodotto vettoriale in forma matriciale. Dato che x0 può essere scritto come x0 = Hπ x, abbiamo l0 = [e0 ]× Hπ x = Fx (1.3) avendo definito la matrice fondamentale F = [e0 ]× Hπ . La matrice fondamentale è di rango 2, in quanto rank([e0 ]× ) = 2 e rank(Hπ ) = 3. Gode inoltre delle seguenti proprietà: 1. Corrispondenze di punti: per qualsiasi coppia di punti corrispondenti x, x0 che siano immagine dello stesso punto X, vale x0> Fx = 0 (1.4) 2. Trasposizione: se F è la matrice fondamentale della coppia di videocamere (P, P0 ), allora F> è la matrice fondamentale della coppia di videocamere (P0 , P). 3. Rette epipolari: per ogni punto x della prima immagine, la corrispondente retta epipolare è l0 = Fx. 4. Gli epipoli: per ogni punto x diverso da e, la retta epipolare l0 = Fx contiene l’epipolo e0 . Quindi e0 soddisfa e0> (Fx) = (e0> F)x = 0 per ogni x, ovvero e0 è l’autovettore che genera lo spazio nullo sinistro di F. Analogamente, Fe = 0, quindi l’epipolo e è il vettore nullo destro di F. 5. Gradi di libertà: F ha 7 gradi di libertà, dato che essendo una matrice omogenea è definita a meno della scala; inoltre detF = 0, poiché è di rango 2, cosa che toglie un altro grado di libertà. 16 Estrazione delle matrici delle videocamere dalla matrice F La matrice fondamentale può essere usata per calcolare le matrici delle videocamere corrispondenti, e quindi ottenere, conoscendo la calibrazione K, i parametri estrinseci delle videcamere, e quindi la rototraslazione relativa tra i due punti di vista. Se non è nota la calibrazione, invece, vale il seguente teorema: Teorema 4. Se H è una matrice 4 × 4 che rappresenta un’omografia in R3 , allora le matrici fondamentali corrispondenti alle coppie di videocamere (P, P0 ) e (PH, P0 H) sono uguali. Questo risultato implica che dalla sola matrice fondamentale è possibile estrarre le matrici delle videocamere a meno un una trasformazione proiettiva. Coordinate normalizzate e matrice essenziale Consideriamo la matrice della videocamera decomposta come P = K [R | t], e sia x = PX un punto dell’immagine. Se conosciamo la matrice di calibrazione K possiamo applicare la sua inversa a x in modo da ottenere delle coordinate normalizzate, che non dipendono dalla calibrazione ma solo dalla posizione della videocamera: x̂ = K−1 x, che equivale ad avere punti immagine generati da una videocamera con matrice normalizzata P̂ = [R | t]. Consideriamo la coppia di videocamere con matrici normalizzate P = [I | 0] 0 e P = [R | t]. La matrice fondamentale corrispodente è chiamata matrice essenziale, e ha la forma E = [t]× R = R[R> t]× . Definizione 5. L’equazione che definisce la matrice essenziale è x̂0> Ex̂ = 0 (1.5) che è equivalente a quella della matrice fondamentale, salvo per l’uso delle coordinate normalizzate. Sostituendo x̂ e x̂0 nella 1.5 abbiamo il legame tra matrice fondamentale ed essenziale: x0> K−> EK−1 x = 0 da cui E = K0> FK. La matrice essenziale ha solo 5 gradi di libertà: rotazione e traslazione hanno ognuna tre gradi di libertà, ma la ambiguità di scala, dato che la matrice è una quantità omogenea, li riduce di uno. Rispetto alla matrice fondamentale quindi E soddisfa ulteriori vincoli: è infatti possibile dimostrare la seguente 17 Proposizione 6. Una matrice 3 × 3 è una matrice essenziale se e solo se due dei suoi valori singolari sono uguali, e il terzo è nullo. La scala della matrice essenziale dipende dai due valori singolari uguali, che di solito vengono posti pari a 1, in modo da fissare la scala a un valore convenzionale. Il vantaggio della matrice essenziale è che da essa è possibile estrarre le matrici delle videocamere senza l’ambiguità proiettiva che è presente con la matrice fondamentale. Definite infatti le matrici 0 −1 0 W= 1 0 0 0 0 1 0 1 0 Z = −1 0 0 0 0 1 e vale il seguente risultato: Proposizione 7. Data la matrice essenziale con scomposizione ai valori singolari E = Udiag(1, 1, 0)V> , se la matrice della prima videocamera è P = [I | 0], ci sono quattro possibili scelte per la matrice P0 della seconda videocamera, e sono: P0 = UWV> | +u3 o UWV> | −u3 o UW> V> | +u3 o UW> V> | −u3 h i h i h i h i (1.6) essendo u3 la terza colonna di U. Ricordando che la matrice di una videocamera ha la forma P = [R | t], vediamo che esistono due possibili risultati sia per R che per t, cosa che dipende dalle possibili configurazioni spaziali delle videocamere, in termini di rotazione e traslazione, che producono punti immagine consistenti con quelli misurati. Si tratta sostanzialmente di rotazioni o traslazioni delle videocamere che produrrebbero gli stessi punti sull’immagine. Delle quattro configurazioni una sola è quella reale, in cui i punti ricostruiti sono di fronte ad entrambe le videocamere, ed è possibile selezionarla utilizzando un punto dell’immagine come campione, in modo da scegliere la soluzione in cui C − x − X, rispettivamente centro della videocamera, punto immagine e punto ricostruito, e C0 − x0 − X siano allineati in quest’ordine. Ricordiamo che per costruzione ku3 k = 1, ovvero la scala della ricostruzione è fissata una volta imposto come unitario il valore della baseline. Il tensore trifocale Nel caso di tre viste, il tensore trifocale gioca lo stesso ruolo della matrice fondamentale, ovvero ingloba la geometria epipolare e i vincoli proiettivi che gli oggetti presenti nelle tre viste hanno tra loro. 18 Figura 1.4: Rappresentazione dei vincoli di geometria epipolare per tre viste: i tre piani uscenti dalle videocamere devono incontrarsi in una retta. Supponiamo che una retta nello spazio sia vista da tre videocamere diverse e proviamo a esprimere algebricamente i vincoli geometrici della sua proiezione nelle tre immagini. Siano li ←→ li0 ←→ li00 le tre proiezioni della retta L, e siano P = [I | 0], P0 = [A | a4 ] e P00 = [B | b4 ] le matrici delle videocamere, dove A e B sono matrici 3×3 di cui ai e bi sono le colonne. Il fatto di fissare la prima camera non fa perdere di generalità al procedimento, in quanto, come abbiamo visto nella sezione precedente, è possibile effettuare ricostruzioni 3D solo a meno di una trasformazione proiettiva, in assenza di ulteriori informazioni, esterne alle immagini. Allora: • a4 e b4 sono epipoli, immagini del centro ottico della prima videocamera visualizzati nella seconda e terza immagine rispettivamente, e li indicheremo come e0 = P0 C ed e00 = P00 C • A e B sono le omografie tra la prima e la seconda videocamera, e tra la prima e la terza. Ricordiamo ora un risultato di geometria proiettiva: Proposizione 8. Data una videocamera di matrice P, e una retta l sul piano immagine, il piano generato nello spazio dai raggi passanti per il centro della videocamera e per la retta l ha equazione P> l. Le tre rette sui piani immagine proiettano tre piani che hanno equazioni π=P l= > l 0 ! π =P l = 0 0> 0 A> l0 a4> l0 ! π =P l = 00 00> 00 B> l00 00 b> 4l ! che devono incontrarsi nella retta L, vincolo che si esprime algebricamente richiedendo che la matrice 4×3 M = [π, π 0 , π 00 ] abbia rango 2. Infatti, i punti sulla 19 retta L sono del tipo X = αX1 +βX2 , con X1 e X2 linearmente indipendenti. I punti X appartengono inoltre ai tre piani, dunque π > X = π 0> X = π 00> X = 0. Segue che M> X = 0, quindi M ha uno spazio nullo di dimensione 2, dato che M> X1 = 0 e M> X2 = 0. Dunque le colonne di M sono linearmente dipendenti, ovvero, data M = [m1 , m2 , m3 ] = " l A> l0 B> l00 00 0 a4> l0 b> 4l # si può scrivere m1 = αm2 +βm3. Grazie allo zero presente nella matrice M, 00 vale α = k b> l e β = −k a4> l0 per qualche k. Sostituendo nelle prime tre 4 righe abbiamo, a meno di un fattore di scala 00 l = b> A> l0 − a4> l0 B> l00 = l00> b4 A> l0 − l0> a4 B> l00 . 4l La i-esima coordinata di l sarà quindi 00 0> li = l0> ai b> a4 b> l00 4 l −l i e introducendo la notazione > Ti = ai b> 4 − a4 bi la relazione può essere scritta come li = l0> Ti l00 . Definizione 9. L’insieme delle tre matrici {T1 , T2 , T3 } compone il tensore trifocale in notazione matriciale. Le matrici Ti sono quindi “fette” di un tensore 3×3×3, che esprime i vincoli tra i punti immagine in tre viste. Del tensore trifocale è possibile dimostrare le seguenti proprietà: • Il tensore ha 18 gradi di libertà: ogni videocamera ha 11 gradi di libertà, ma l’ambiguità proiettiva del sistema di riferimento fissato dalla matrice della prima videocamera toglie 15 gradi di libertà, dunque 33 − 15 = 18. • Corrispondenze tra rette: per qualsiasi tripletta di rette corrispondenti l, l0 e l00 che siano immagine della stessa retta L, vale l0> [T1 , T2 , T3 ] l00 = l> 20 (1.7) • Corrispondenze tra punti: per qualsiasi tripletta di punti corrispondenti x, x0 e x00 che siano immagine dello stesso punto X, vale [x ]× 0 ! X x Ti [x00 ]× = 03×3 (1.8) i i • Ogni matrice Ti è di rango 2, e anche la somma ( P i xi Ti ) ha rango 2. • Epipoli: dati ui e vi , rispettivamente i vettori nulli sinistri e destri delle matrici Ti , gli epipoli sono i vettori nulli delle seguenti matrici: e0> [u1 , u2 , u3 ] = 0 e e00> [v1 , v2 , v3 ] = 0 • Matrici fondamentali: dato il tensore trifocale [T1 , T2 , T3 ], le matrici fondamentali tra la prima e seconda, e prima e terza vista sono F21 = [e0 ]× [T1 , T2 , T3 ] e00 e > > 0 F31 = [e00 ]× T> 1 , T2 , T3 e h i • Le matrici delle videocamere, posta P = [I | 0], si trovano, una volta normalizzati gli epipoli, come P0 = [[T1 , T2 , T3 ] e00 | e0 ] e P00 = h h e00 e00> − I i > > 0 00 T> 1 , T2 , T3 e | e i ed è importante notare che le tre matrici sono pari alle effettive matrici di videocamera a meno di una trasformazione proiettiva, come per il caso della matrice fondamentale. Ricostruzione 3D Il nostro scopo è quello di riuscire a ricostruire la struttura 3D di una scena e il posizionamento delle videocamere, problemi che sono strettamente legati tra loro. Infatti, una volta note le matrici delle videocamere e una serie di corrispondenze tra i punti immagine delle diverse viste, è possibile ricostruire i punti nello spazio mediante tecniche di triangolazione. La triangolazione è il procedimento attraverso cui, noti due punti e due vettori uscenti da tali punti, viene calcolato il punto che forma il terzo vertice del triangolo. Il livello di precisione con cui riusciamo a calcolare le matrici delle videocamere determina quindi la precisione nella ricostruzione. Gli elementi che abbiamo a disposizione sono delle corrispondenze xi ←→ 0 xi di punti o rette nelle immagini, per cui non sono noti i punti nello spazio Xi , le matrici delle videocamere e la geometria epipolare. Con un numero sufficiente di corrispondenze è possibile calcolare la geometria epipolare, e come visto nei paragrafi precedenti, estrarre da essa le matrici delle videocamere. Il metodo base utilizzato è come segue: 21 1. Calcolo della geometria epipolare (matrice fondamentale, tensore trifocale) da corrispondenze di punti immagine 2. Calcolo delle matrici delle videocamere dalla geometria epipolare 3. Calcolo dei punti nello spazio Xi mediante triangolazione, proiettando i raggi dei punti xi e xi0 che partono dai centri delle videocamere. I metodi per il calcolo della geometria epipolare a partire da corrispondenze saranno trattati nel capitolo successivo, mentre in questo paragrafo ci concentriamo sul livello di precisione che è possibile raggiungere nella ricostruzione. Ambiguità di ricostruzione Senza qualche informazione del posizionamento della scena rispetto a un sistema di riferimento, è innanzitutto chiaro che la scena può essere ricostruita al più con un’ambiguità di rototraslazione ad esempio, a partire da due fotografie di un corridoio non è possibile conoscere latitudine e longitudine, né orientamento del corridoio stesso. Nemmeno la scala può essere ricostruita, in quanto dalle foto non è possibile sapere se il corridoio sia alto 3 metri o 3 centimetri. Nell’esperienza comune, il senso della vista ci restituisce il senso delle dimensioni solo quando nella scena è presente qualche oggetto noto, di cui quindi conosciamo l’altezza approssimativa e con cui possiamo “fissare la scala”. Senza conoscere la matrice di calibrazione K abbiamo visto che è possibile ricostruire le matrici delle videocamere a meno di una trasformazione proiettiva, a partire dalla sola matrice fondamentale. Questo implica che le videocamere e quindi anche la scena ricostruita saranno soggette ad un’ambiguità proiettiva. Questo risultato è generalizzabile al caso di più viste. È possibile migliorare questo risultato aggiungendo ulteriori informazioni, come la matrice K o conoscendo dimensioni o posizionamento reciproco di punti nella scena, per arrivare ad una ricostruzione metrica della scena, in cui sia cioè possibile misurare distanze, angoli e aree. L’obiettivo nel nostro caso, in cui vogliamo ricostruire il movimento di una videocamera, è proprio quello della ricostruzione metrica. Qualora sia nota la matrice essenziale è possibile, come visto nei paragrafi precedenti, calcolare le matrici delle videocamere, e di conseguenza anche la scena 3D, a meno dell’ambiguità di scala: ci troviamo quindi già in ambito metrico. Rimane naturalmente l’ambiguità di scala, che è necessario fissare utilizzando informazioni esterne che forniscano la distanza reale tra punti nello spazio. Nel caso di coppie di videocamere, la baseline fornisce questa scala; nel caso invece di una videocamera che si sposti nello spazio, è possible fare ricorso a dati GPS che misurino la posizione della videocamera. 22 Figura 1.5: Il modello di videocamera omnidirezionale, per semplicità visualizzato sul piano: il sistema di riferimento locale è identificato da (R, t) rispetto al sistma di riferimento globale. Il punto X è proiettato sulla sfera mediante normalizzazione. 1.3 Videocamere omnidirezionali Il modello di videocamera omnidirezionale Parliamo di camere omnidirezionali quando l’angolo di visuale supera i 180° ([13]). In questo caso il modello a pinhole camera non è più adeguato per descrivere la formazione dell’immagine, in quanto al massimo i raggi uscenti dal centro della videocamera e passanti per il piano immagine possono coprire un emispazio. La proiezione nel modello tradizionale è formalizzabile come ∃α : αx = PX con P ∈ R3×4 è una trasformazione proiettiva, X ∈ R4 −0 è un punto omogeneo dello spazio e x ∈ R3 − 0 è un punto omogeneo sul piano immagine. Il modello di camera omnidirezionale, con angolo di visuale a 360°, è visualizzato in Figura 1.5: il centro della videocamera è il punto C, centro di una sfera di raggio unitario, e i raggi partono dal centro e incontrano la superficie S 2 della sfera, che è l’equivalente del piano immagine. I punti dello spazio vengono quindi proiettati sulla superficie della sfera, e i raggi sono semirette. 23 Formalmente, la proiezione avviene come ∃α : αx = PX dove P e X sono gli stessi di prima e x è un vettore di R3 , vincolato sulla superficie S 2 che rappresenta un punto sull’immagine. Se C è l’origine degli assi, l’equazione della proiezione è semplicemente x= 1 X. kXk È importante notare che x non è in notazione omogenea, anche se in realtà ha gli stessi gradi di libertà di un punto sul piano. Se passiamo in coordinate sferiche, infatti, un punto x è identificato da due angoli, ad esempio inclinazione dal piano verticale 0 ≤ ϕ ≤ π, che corrisponde alla latitudine e azimuth 0 ≤ θ ≤ 2π, che corrisponde alla longitudine: x cos θ sin ϕ x = y = sin θ sin ϕ . z cos ϕ Il modello sferico centrato nell’origine degli assi può essere generalizzato separando il sistema di riferimento locale, della sfera, da quello globale. Una videocamera omnidirezionale sarà quindi caratterizzata da una terna cartesiana, identificate da una matrice di rotazione R e da un vettore di traslazione t che esprimono il cambio di coordinate tra il sistema di riferimento globale e quello locale. Per passare dal sistema globale S a quello locale S 0 basta effettuare quindi il cambio di coordinate X0 = R (X − t) , con analoga formula inversa X = R−1 X0 + t. Essendo le videocamere omnidirezionali prive di uno specifico orientamento, la matrice R è sostanzialmente legata a come viene salvata l’immagine in formato digitale; il vettore t esprime la posizione della videocamera nello spazio. Geometria proiettiva sulla sfera Con il modello di camera omnidirezionale viene definita una geometria proiettiva basata sulla dualità tra cerchi massimi e punti sulla sfera, analogamente a come nella geometria proiettiva sul piano la dualità è tra punti e rette. 24 Data una retta L nello spazio, esiste un piano π passante per L e per il centro C, che definisce un cerchio massimo C sulla sfera, ovvero un cerchio di diametro massimo. Il vettore definisce a sua volta lo stesso cerchio massimo è definibile anche a partire dal vettore n ∈ S 2 normale a questo piano; anche il vettore −n definisce lo stesso piano, per cui esiste una corrispondenza biunivoca tra i punti sull’emisfero positivo della sfera S+2 e i cerchi massimi sulla sfera. Possiamo quindi dare la seguente definizione: Definizione 10. Dato un vettore n ∈ S+2 e x ∈ R3 , un cerchio massimo C è definito come n o C = x | n> x = 0, kxk = 1 . Formalmente, le funzioni che mappano punti in cerchi massimi e viceversa sono: x×y , x, y ∈ C, λ ∈ {−1, 1} f (C) = λ kx × yk f −1 (n) = x | n> x = 0, kxk = 1, n ∈ S+2 n o dove λ è scelto in modo che f (C) ∈ S+2 . Analogamente è possibile definire una corrispondenza tra rette su un piano e punti sulla superficie sferica: g (l) = λ ξ×η , ξ = x> , 1 , η = y> , 1 , x, y ∈ l kξ × ηk g −1 (n) = ξ | n> ξ = 0, ξ = x> , 1 , n ∈ S+2 n o Geometria epipolare per due viste Siano C e C0 i centri di due camere, e siano R e t matrice di rotazione e vettore di traslazione che definiscono la trasformazione delle coordinate tra la prima camera e la seconda. Assumiamo per semplicità C = 0. La proiezione dei punti dello spazio sulle sfere è rispettivamente, per la prima e la seconda videocamera: λx = X, λ ∈ R λ0 x0 = X0 = RX + t λ0 ∈ R. Abbiamo quindi l’equazione λ0 x0 − RX − t = 0. I vettori che compongono la somma dell’equazione formano un piano, per cui come visto nel caso della matrice fondamentale è possibile scrivere il vincolo epipolare per camere omnidirezionali: x0> Ex = 0, E = [t]× R. 25 Osserviamo che ci troviamo già nel caso di matrice essenziale, in quanto il modello omnidirezionale di videocamera non ingloba informazioni quali la lunghezza focale o la dimensione dei pixel, ma si limita a tenere conto del solo posizionamento spaziale della videocamera. I punti x ∈ S 2 sono quindi interpretabili come coordinate immagine normalizzate, e forniscono vincoli sufficienti a calcolare la matrice essenziale. La ricostruzione delle matrici delle videocamere e della scena 3D nel caso di videocamere omnidirezionali è dunque in ambito metrico. I cerchi epipolari È utile vedere come cambia la retta epipolare nel caso sferico. La dualità tra punti sulla sfera e cerchi massimi implica che due punti x e x0 individuano due cerchi massimi corrispondenti l e l0 , appartenenti ai piani π e π 0 di R3 . L’intersezione di questi due piani, che passano per i centri delle videocamere, è la retta L, come visualizzato in Figura 1.6. Chiamiamo X0 il punto di intersezione di questa retta con il piano epipolare che contiene x, x0 e X, e anche i due centri C, C0 , dato che i punti C, x e X e gli analoghi C0 , x0 e X sono allineati. Notiamo che X0 è anche il punto di intersezione tra la retta s, passante per C e perpendicolare a x − C, e la retta r, passante per C0 e perpendicolare a x0 − C0 . Abbiamo quindi due triangoli rettangoli identificati dai punti XCX0 e XC0 X0 , che condividono la stessa ipotenusa e quindi anche lo stesso cerchio circoscritto, che è chiamato cerchio epipolare. Il cerchio epipolare ha centro e0 = 21 (X + X0 ) e raggio er = 21 kX + X0 k. Geometria epipolare per tre viste Anche per le videocamere omnidirezionali è possibile derivare il tensore trifocale seguendo la traccia vista nel caso di videocamere tradizionali ([20]). Siano C = 0, C0 e C00 i tre centri delle videocamere, R0 e t0 e R00 e t00 le trasformazioni di coordinate tra il sistema di riferimento della prima sfera e la seconda e tra la prima e la terza. Sia L una retta nello spazio, e siano L0 e L00 l’equazione della retta vista nei sistemi della seconda e terza sfera. La retta L viene proiettata sulle tre sfere sotto forma di cerchi massimi l, l0 , e l00 , che possono essere espressi dualmente con i punti a, a0 , e a00 ∈ S 2 . La relazione tra le rette L, L0 e L00 e i punti a, a0 , e a00 può essere espressa come a> L = 0 a0> L0 = a0> (R0 L + t0 ) = 0 a00> L00 = a00> (R00 L + t00 ) = 0 Le tre equazioni possono essere riunite nella matrice M ML̃ = 0 26 Figura 1.6: I cerchi epipolari nel caso di due viste omnidirezionali. 27 con a> 0 M = a0> R0 a0> t0 a00> R00 a00> t00 > e L̃> = L> , 1 . Come nel caso tradizionale L, L0 e L00 sono la stessa retta se e solo se rankM = 2, ovvero se è possibile esprimere la prima colonna di M come combinazione lineare delle altre due: m1 = αm2 + βm3 , da cui si ottiene l’equazione a = a00> t00 R0> a0 − a0> t0 R00> a00 che espressa elemento per elemento diventa 00 ai = a0> R0> a00 − a0> t0 R00> a00 i t i dove R0i che è la i-esima riga della matrice di rotazione della seconda videocamera. 00 Il tensore trifocale è quindi la tripletta {T1 , T2 , T3 } definita da Ti = R0> i t − 0 00> t Ri , che soddisfa le equazioni ai = a0> Ti a00 (1.9) a> = a0> [T1 , T2 , T3 ] a00 . Come nel caso tradizionale, la corrispondenza tra punti sulle tre sfere soddisfa l’equazione 1.8: ! [x0 ]× X xi Ti [x00 ]× = 03×3 . i È da sottolineare il fatto che i punti di cui stiamo parlando nel caso omnidirezionale non sono in notazione omogenea, ma sono punti nello spazio. Cerchi epipolari e ricostruzione 3D Una tripletta di punti corrispondenti sulle sfere genera tre cerchi epipolari, come visto prima. Questo permette una ricostruzione 3D, come illustrato in figura 1.7b: i cerchi epipolari si devono incontrare nel punto ricostruito X, se le corrispondenze sono esatte. Abbiamo quindi un modo per misurare l’errore di ricostruzione, nel caso i tre cerchi massimi non si incontrino in un punto. 28 Inoltre i tre cerchi massimi, nel caso ideale, si incontrano in un punto qualsiasi sia la configurazione spaziale del sistema di videocamere, dato che per tre punti non allineati (due centri di videocamera e il punto X) passa sempre una circonferenza. Questo permette la ricostruzione 3D anche in casi particolari, come tre videocamere allineate, esempio in cui i tre piani epipolari non sarebbero linearmente indipendenti e non potrebbero essere usati per la triangolazione. In un caso di questo tipo, che assomiglia al caso di fotogrammi ripresi lungo il percorso di un’automobile, solo i punti giacenti sulla retta di moto non sono ricostruibili, mentre per il resto dello spazio non ci sono problemi. 29 Figura 1.7: Cerchi epipolari nel caso di tre viste omnidirezionali 30 Capitolo 2 Metodi di stima e algoritmi In questo capitolo vengono affrontati in ordine logico i vari passi necessari per l’intero processo che, da una serie di immagini omnidirezionali, restituisce una nuvola di punti 3D e le posizioni spaziali della videocamera. I passi nei quali si è fatto ricorso a strumenti di terze parti sono trattati brevemente. 2.1 Immagini omnidirezionali Dati sperimentali del progetto Astute La tesi è stata svolta nell’ambito del progetto Astute, come visto nell’introduzione. Una delle aziende coinvolte ha messo a disposizione un software per la creazione di immagini panoramiche a 360° mediante stitching di diverse immagini prese con un grandangolo tradizionale, come mostrato in Figura 2.1. La raccolta dei dati mediante questa soluzione ha però subito dei ritardi nell’evoluzione del progetto, per cui non è stato possibile avere immagini sperimentali di questo tipo in quantità sufficiente per condurre un test approfondito. Dati sperimentali da Google Street View Un’altra possibile fonte di dati è il servizio Google Street View, che offre una copertura della rete stradale eccezionale, a fronte di una minore qualità dei dati. Le “bolle” di Street View sono caricate nel browser come “tessere” di un mosaico. Attraverso un script in Python ideato all’interno dell’Image and Sound Processing Group del Politecnico di Milano, è stato possibile scaricare le tessere, di dimensione 512 × 512 pixel, e ricomporle ottenendo un’immagine panoramica completa, con il livello di zoom desiderato (si va da un minimo di 2 × 4 tessere a un massimo di 5 × 10). Utilizzare le immagini di Google Street View comporta alcune problemi di qualità dei dati: in primo luogo le immagini sono soggette a watermark, 31 Figura 2.1: In alto, la formazione delle immagini panoramiche di Google Street View: a partire da diverse foto grandangolari viene creata l’immagine finale in formato equirettangolare. In basso, una delle automobili con cui Google raccoglie le immagini. 32 Figura 2.2: Particolare di una immagine di Google Street View di bassa qualità. ovvero una scritta in sovraimpressione che le identifica come appartenenti a Google; in secondo luogo le zone di giunzione delle varie fotografie sono a volte visibili, come in Figura 2.2. Queste fonti di disturbo possono generare errori sistematici nella generazione dei punti notevoli dell’immagine. Una seconda criticità viene dalla bassa qualità delle zone ad alta latitudine, ovvero vicino a zenith e nadir della sfera. In queste zone Google fornisce un’immagine interpolata, non nativa, per non mostrare il tetto della Google Car. È stato quindi deciso di rimuovere queste zone dell’immagine prima del passo di feature detection, conservando la parte centrale di immagine, con ampiezza un’angolare di 60°. In questo modo il carico computazionale è ridotto, anche se in situazioni di canyon urbano, quando gli edifici a lato della strada sono vicini tra loro, sarebbe utile avere anche informazioni su latitudini più elevate. Inoltre, le fotografie presenti su Street View non sono la sequenza ordinata di viste prese da una sola automobile, che è l’ambito di azione per cui è pensato il metodo presentato in questa tesi. Le sequenze sono infatti frutto dei dati raccolti da diverse automobili in momenti diversi, per cui è possibile che da una bolla all’altra cambi parecchio lo scenario, sia in termini di luci e colori, che di elementi strutturali (es. lavori in corso) ma, cosa più importante, l’orientamento non è garantito. Le strade a due sensi di marcia ad esempio possono essere state raccolte in parte in un senso e in parte nell’altro senso, cosa che pregiudica la continuità dei dati. Un ulteriore limite arriva dalla risoluzione massima utilizzabile dalle immagini: Google Street View utilizza infatti il formato equirettangolare, spiegato nel prossimo paragrafo, fino alla risoluzione di 833 × 1666 pixel; per risoluzioni maggiori l’angolo di visuale non è più 360°, ma è minore, di una quantità ignota. Questo effetto è particolarmente evidente visualizzando l’immagine omnidirezionale in proiezione stereografica, come mostrato in Figura 2.3. Per questo nell’algoritmo abbiamo potuto utilizzare fotografie a risoluzione non eccezionale, cosa che influisce sul numero di corrispondenze che si riescono a 33 Figura 2.3: Immagini panoramiche di Google Street View in proiezione stereografica (effetto “small worlds”). L’immagine in basso è la proiezione di un’immagine ad alta risoluzione, e risulta evidente come non sia panoramica a 360°. 34 ottenere tra una vista e l’altra. Infine, la criticità maggiore delle immagini di Google è la sparsità: tipicamente tra una bolla e l’altra la baseline è di circa 10-15 metri, per cui il punto di vista di edifici e oggetti vicini alla strada può cambiare radicalmente tra una bolla e l’altra; ancora più importante è la criticità nel caso dell’utilizzo di tre viste, visto che la baseline tra la prima e la terza camera arriva a 30 metri. Il risultato è che le corrispondenze trovate possono essere troppo poche per la stima accurata del tensore trifocale. Uno degli articoli di riferimento ([19]) ha usato bolle di Street View ottenute chiedendole a Google per scopi di ricerca, dato che l’azienda in fase di raccolta dati utilizza una campionatura più fitta. Immagini equirettangolari Sia le immagini di Google Street View che quelle generate per il progetto Astute sono immagini panoramiche in formato equirettangolare. La proiezione equirettangolare, che è uno dei possibili modi per rappresentare una superficie sferica su un piano, viene effettuata campionando la sfera a passo angolare costante, sia in latitudine che in longitudine, con raggi che partono dal centro della sfera stessa. Un esempio è mostrato in Figura 2.4. Avendo N punti, avremo che il passo di capionamento sarà: 2π . dθ = N Ad ogni pixel dell’immagine equirettangolare viene quindi assegnato il valore dell’immagine sulla sfera nel punto in cui il raggio corrispondente al pixel la interseca, dopo opportuna interpolazione. Il risultato è un’immagine fortemente deformata vicino ai poli, dove la campionatura sulla sfera è molto fitta. Una proprietà utile ai fini della feature detection è che la deformazione è costante ad una determinata latitudine, e che la zona vicino all’equatore, che nelle immagini realistiche è la più ricca di informazioni, è poco deformata. È inoltre molto semplice passare dalle coordinate immagine a quelle sulla sfera: essendo 0 ≤ ϕ ≤ π l’inclinazione rispetto al piano verticale e 0 ≤ θ ≤ 2π l’azimuth, e dette (x, y) le coordinate del pixel sull’immagine, abbiamo: y H L−x θ = 2π L essendo (L, H) le dimensioni dell’immagine in pixel. Si noti che l’azimuth decresce con x, cosa che deriva dal fatto che se immaginiamo l’immagine incollata su una sfera, la coordinata orizzontale in pixel è crescente in senso orario, mentre l’azimuth è crescente in senso antiorario. ϕ=π 35 Figura 2.4: Griglia di campionamento della sfera per la proiezione equirettangolare: ad ogni punto corrisponderà un pixel dell’immagine. Dato che ogni cerchio orizzontale è formato dallo stesso numero di punti, la campionatura è più fitta vicino ai poli. Dati sintetici Oltre alle immagini realistiche sono stati condotti anche test su dati sintetici, ottenuti generando una serie di punti 3D e proiettandoli sulle sfere. In questo modo si sono potute separare i problemi di feature detection da quelli della stima della geometria della scena. 2.2 Identificazione dei punti notevoli dell’immagine tramite SIFT Il passo di identificazione dei punti notevoli dell’immagine è stato effettuato appoggiandosi su uno dei più noti metodi per la feature detection, la ScaleInvariant Feature Transform (SIFT). L’algoritmo produce, a partire da un’immagine, un insieme di punti notevoli. Ogni punto è corredato di descrittore, un vettore a 128 elementi che “riassume” le caratteristiche del punto stesso, ed è inviariante per traslazioni, riscalamenti e rotazioni, parzialmente invariante per cambi di illuminazione e robusto per distorsioni geometriche locali. I punti sono identificati come i punti estremanti del risultato della differenza di due gaussiane (DoG) applicate all’immagine a vari livelli di riscalamento, in modo da selezionare i punti che rimangono consistenti anche per diversi livelli 36 di ingrandimento. Il descrittore di un punto è poi generato utilizzando i pixel adiacenti, in modo da renderlo una caratteristica locale, indipendente dalla traslazione. Per un’immagine di dimensioni 750 × 1500 presa da Google Street View e adeguatamente ritagliata escludendo le zone oltre una certa latitudine, SIFT genera circa 1500 punti notevoli; le corrispondenze tra due immagini consecutive sono tipicamente nell’ordine del centinaio; su immagini 1500 × 3000, a fronte di 5000 punti notevoli, abbiamo 500 corrispondenze tra immagini consecutive. È da notare che non tutte le corrispondenze sono esatte, dato che il matching tra punti notevoli può portare ad accoppiamenti errati. Nel caso delle immagini 1500 × 3000, ad esempio, gli accoppiamenti esatti sono nell’ordine dei 150. Essendo SIFT un metodo ormai affermato, abbiamo usato VLFeat, una libreria opensource in C che contiene un’implementazione efficiente dell’algoritmo ed offre un’interfaccia per le funzioni Matlab. In particolare la funzione [f,d] = vl_sift(Image) calcola i punti caratteristici e i corrispondenti descrittori. VLFeat offre anche la funzione di matching [matches,scores] = vl_ubcmatch(d1,d2), per poter trovare le corrispondenze tra punti notevoli di due immagini. Nella tesi, l’algoritmo SIFT viene applicato all’immagine omnidirezionale in proiezione equirettangolare. Questa procedura, scelta per la sua semplicità, può presentare alcune criticità: il descrittore SIFT è infatti robusto, non invariante, per deformazioni prospettiche. In una proiezione equirettangolare la deformazione prospettica è costante lungo le righe dell’immagine, ma varia in base alla “latitudine” del punto. Questo fatto può pregiudicare il riconoscimento e l’accoppiamento di punti notevoli tra immagini consecutive. Dato che non è possibile proiettare una superficie sferica su un piano senza deformazioni, una possibile soluzione potrebbe essere di calcolare i punti SIFT su sezioni rettificate dell’immagine equirettangolare, come mostrato in Figura 2.5. È possibile infatti ottenere sezioni localmente non deformate di un’immagine equirettangolare, allo stesso modo in cui in Google Street View vengono fatte visualizzare all’utente. L’idea è di ricampionare l’immagine equirettangolare in modo da proiettare la superficie sferica sul piano tangente alla sfera e perpendicolare all’asse ottico. 2.3 Stima robusta con RANSAC Errori di misurazione È inevitabile che i dati utilizzati per stimare la geometria epipolare contengano degli errori. Un primo tipo di errori è causato da imprecisioni nella localizzazione dei punti notevoli delle immagini: una diffe37 Figura 2.5: In alto, dettaglio di una proiezione equirettangolare della panoramica di Piazza del Popolo; in basso, la sua rettificazione. Si può notare come 38 le linee rette tornino ad essere tali. renza anche di un pixel può causare notevoli errori di ricostruzione, se il punto 3D X corrispondente è molto lontano, come tipicamente avviene. L’errore di posizionamento dei punti notevoli sul piano immagine viene amplificato dalla distanza, così che il raggio uscente dal centro della sfera e passante per il punto notevole x non passerà esattamente per il punto X. Questo tipo di errori è inevitabile, e per quanto minimizzato dalla bontà dell’algoritmo di localizzazione dei punti notevoli, che arriva a precisioni di parecchio inferiori al pixel, è sempre presente. Sì può minimizzarne l’effetto utilizzando più punti possibile, risolvendo ai minimi quadrati il problema, in modo che gli errori tendano a compensarsi. Errori da false corrispondenze Un secondo tipo di errori sono le corrispondenze errate (false matches), punti notevoli che l’algoritmo di matching riconosce come simili ma che in realtà appartengono a parti completamente diverse dell’immagine. Questo tipo di problematica è molto frequente quando nella scena sono presenti oggetti con texture ripetute, situazione che nell’ambito della fotografia urbana è inevitabile, ad esempio nel caso delle facciate delle case. Se le corrispondenze errate vengono utilizzate nel calcolo della geometria epipolare i risultati diventano inaffidabili, dato che • le stime ai minimi quadrati vengono influenzate notevolmente dagli outlier e • la percentuale di corrispondenze errate può essere molto alta, anche maggiore delle corrispondenze corrette. Occorre quindi rimuovere le corrispondenze errate (outliers) in modo da effettuare il calcolo della geometria epipolare con le sole corrispondenze corrette (inliers). Il metodo ormai affermato è quello del RANdom SAmple Consensus, un metodo iterativo non deterministico per trovare il modello che descriva correttamente più dati possibile. Algoritmo RANSAC Nel nostro caso il modello che stiamo cercando è la geometria epipolare tra le videocamere che prendiamo in considerazione, rappresentata dalla matrice essenziale o dal tensore trifocale, rispettivamente per due e tre viste. È necessario specificare una soglia t, errore oltre il quale un punto è considerato outlier. I passi sono: 1. Viene selezionato in modo casuale un sottoinsieme dei dati originali; tipicamente vengono scelti insiemi minimi, ovvero il numero minimo di dati che è necessario per stimare la geometria epipolare (con gli algoritmi usati, sono 8 punti per la matrice essenziale e 7 per il tensore trifocale), 39 in modo da aumentare la probabilità che il sottoinsieme scelto sia privo di outlier; 2. Viene stimata la geometria epipolare M utilizzando i punti del sottoinsieme scelto 3. Viene calcolato l’errore per ogni punto: nel nostro caso, dal modello vengono estratti R e t delle videocamere coinvolte, calcolati i punti Xi , e riproiettati tali punti sulle sfere, ottenendo i punti x̂i . L’errore di ogni punto è semplicemente l’errore di riproiezione (linearizzato, prendendo come misura la corda sulla sfera), ovvero di = kx̂i − xi k2 . Per essere considerato inlier un punto deve avere di < t, ovvero, dato il modello M, il punto riproiettato x̂i = x̂i (M) deve essere sufficientemente vicino al punto misurato xi . Vengono contati gli inlier, ottenendo così un voto di consenso dei punti rispetto al modello M. Se il modello corrente ha un punteggio più alto di quello del miglior modello finora stimato, viene salvato, insieme al suo punteggio e agli indici dei punti considerati inlier. 4. I passi 1, 2, 3 sono ripetuti finché non si raggiunge la desiderata probabilità di aver analizzato almeno un sottoinsieme di dati privo di outlier. È possibile stimare tale probabilità, che di solito viene posta al 99%, in base al numero di inlier dei modelli analizzati via via. Naturalmente il numero di iterazioni necessarie cresce rapidamente con l’aumentare della percentuale di outlier e con la dimensione del sottoinsieme. 5. Al termine delle iterazioni dell’algoritmo vengono considerati come dati affidabili gli inlier del miglior modello trovato, e viene eseguita una nuova stima della geometria epipolare utilizzando non più un sottoinsieme minimo ma tutti gli inlier. Funzioni di misura dell’errore Il passo del punto 3 necessita di una funzione di calcolo di un errore. Oltre all’errore di riproiezione sopra proposto, sono stati usati altri due metodi, più semplici. Nel caso a due viste è possibile usare la formula dell’errore di Sampson, che effettua una stima di primo ordine sull’errore. Per ogni coppia x, x0 la distanza è così calcolata: d= (x0 Ex)2 . kExk2 + kE> x0 k2 Nel caso a tre viste un metodo rapido è quello di provare la bontà delle corrispondenze tra i punti: dato che il residuo dall’equazione 1.8 dovrebbe 40 essere una matrice 03×3 , poniamo d= 0 [x ]× ! X xi Ti i [x00 ]× (2.1) dove la norma k·k può essere una norma matriciale, ad esempio la norma 2: kAk2 = 1 2 X 2 |aij | . i,j Un metodo analogo di test sulla bontà delle corrispondenze può essere usato anche per il caso a due viste. In questo caso è sufficiente porre: d = x0> Ex . (2.2) Dato che RANSAC effettua molti tentativi la scelta di un metodo rapido per calcolare la bontà di un modello è essenziale per avere buone prestazioni. La scelta della soglia di tolleranza di RANSAC va calibrata in base al tipo di problema e al tipo di funzione distanza scelta; nel caso dell’errore di riproiezione la scelta è stata di t = 0.001, dato che prende in considerazione due punti appartenenti a una sfera unitaria. Nei casi in cui è stato usato come errore il residuo delle equazioni 2.1 e 2.2 sono stati scelti valori di t ∈ (0.001, 0.005). Configurazioni degeneri Infine, è utile notare che nel caso di stima tradizionale di matrice essenziale o tensore trifocale con RANSAC viene introdotto anche un test, tra il passo 1 e il passo 2, per determinare se un insieme di punti è degenere. Se i sottoinsiemi minimi contengono punti disposti in particolari configurazioni, come punti allineati o complanari, il contenuto informativo è minore: le equazioni che vengono generate per calcolare la geometria epipolare non sono linearmente indipendenti, e portano alla stima di modelli errati ma che soddisfano un grande numero di inlier. Questo problema può essere evitato in due modi: • Verificare che il sottoinsieme di punti scelto non sia degenere. La letteratura nel caso di videocamere omnidirezionali è assente, ma nelle prove effettuate insiemi di punti complanari o collineari causano stime errate. Il caso di punti complanari in particolare è critico in quanto è facile che avvenga in contesti urbani, dato che le facciate degli edifici hanno forme molto regolari. • Utilizzare una funzione distanza che evidenzi errori di stima dovuti agli insiemi degeneri. La semplice norma delle corrispondenze tra punti non 41 è adeguata, in quanto viene calcolata usando le stesse equazioni che sono linearmente dipendenti. La misura dell’errore di riproiezione, invece, effettuando la triangolazione dei punti e verificando la consistenza dei risultati ottenuti, è un test adeguato. Un sottoinsieme minimo degenere infatti produce risultati completamente sbagliati, e anche le riproiezioni vengono influenzate: il modello viene quindi scartato perché è supportato da pochi inlier. La controindicazione di questo metodo è che i tempi di calcolo si allungano notevolmente, dato che questo tipo di funzione distanza è computazionalmente molto più oneroso che non la 2.1. 2.4 Stima della matrice essenziale Nel caso di due viste la geometria epipolare per il caso omnidirezionale è descritta dalla matrice essenziale, come visto nel capitolo precedente, che è definita dall’equazione x0> Ex = 0. (2.3) Avendo sufficenti coppie di punti corrispondenti nelle due viste è possibile calcolare la matrice essenziale. Esistono diversi metodi, elaborati per le videocamere tradizionali, i cui obiettivi sono principalmente due: • ottenere una matrice fondamentale che soddisfi in modo ottimale le corrispondenze dell’equazione (2.3) • ottenere una matrice fondamentale geometricamente consistente, ovvero che goda delle proprietà che teoricamente dovrebbe avere e che non sono automaticamente garantite dalla minimizzazione degli errori delle corrispondenze. Questi due obiettivi possono essere raggiunti in passi separati: prima viene calcolata una matrice che minimizzi un errore geometrico, e poi vengono imposti i vincoli che rendono consistente la geometria epipolare - rango due nel caso della matrice fondamentale, due valori singolari uguali e il terzo nullo nel caso della matrice essenziale. Mentre i metodi per videocamere tradizionali devono tenere in considerazione varie criticità, come il cattivo condizionamento dovuto ai grossi rapporti di scala che possono esserci tra i punti sul piano immagine e all’ambiguità proiettiva, nel caso omnidirezionale le cose sono più semplici. I punti sono disposti sulla sfera unitaria, e quindi già “normalizzati”; siamo già in ambito di ricostruzione metrica, un contesto in cui l’unica ambiguità è quella della scala; tutto il mondo circostante è visibile, e questo comporta che possono esserci molte corrispondenze “buone”, ovvero che comportino un basso errore di 42 \0 è ricostruzione. Le migliori corrispondenze sono quelle in cui l’angolo CXC il più vicino possibile ai 90°, dato che in questo modo la triangolazione risente in modo minore degli errori di misurazione dei punti immagine. Il metodo adottato in questa tesi è in due passi: 1. Calcolo di una stima della matrice essenziale con l’algoritmo lineare a 8 punti 2. Imposizione algebrica dei vincoli di consistenza geometrica Passo 1: algoritmo a 8 punti Otto corrispondenze sono sufficienti per calcolare in modo lineare i 9 elementi della matrice essenziale: partendo dall’equazione (2.3) e scrivendo i punti x = (x1 , x2 , x3 ) e x0 = (x01 , x02 , x03 ), è possibile sviluppare algebricamente il prodotto vettore-matrice-vettore di una corrispondenza: h x01 x02 x03 i x1 e11 e12 e13 e21 e22 e23 x2 = 0 x3 e31 e32 e33 e11 x01 x1 +e12 x01 x2 +e13 x01 x3 +e21 x02 x1 +e22 x02 x2 +e23 x02 x3 +e31 x03 x1 +e32 x03 x2 +e33 x03 x3 = 0 che può essere scritta sotto forma di prodotto scalare y·e=0 (2.4) con y= h x01 x1 x01 x2 x01 x3 x02 x1 x02 x2 x02 x3 x03 x1 x03 x2 x03 x3 e= h e11 e12 e13 e21 e22 e23 e31 e32 e33 i (2.5) i La (2.4) rappresenta un’equazione che lega le coordinate immagine della corrispondenza x ←→ x0 al valore degli elementi della matrice essenziale. Avendo n coppie di punti corrispondenti, è possibile costruire il sistema lineare y1 . Ae = .. e = 0, yn (2.6) dove A è costruita accostando i vettori yi , i = 1 ÷ n calcolati come la (2.5). Il problema (2.6) è una sistema lineare omogeneo, ed e può essere determinata a meno di un fattore di scala, motivo per cui bastano 8 equazioni. Perché esista 43 una soluzione è necessario che rankA ≤ 8, e se rankA = 8 la soluzione è unica e può essere trovata linearmente, essendo il vettore che genera lo spazio nullo destro di A. Nel caso reale di corrispondenze soggette ad errore, avendo più di 8 equazioni si avrà che rankA = 9, dato che la matrice ha 9 colonne. È possibile quindi trovare una soluzione ai minimi quadrati ricorrendo alla scomposizione ai valori singolari (SVD). In questo caso la soluzione sarà il vettore singolare corrispondente al valore singolare minimo della matrice A, ovvero, detta A = USV> la scomposizione SVD, la soluzione sarà l’ultima colonna di V: e = v9 . La soluzione così trovata minimizza la quantità kAek sotto la condizione kek = 1. Passo 2: imposizione dei vincoli di consistenza geometrica La matrice E ottenuta riorganizzando gli elementi di e non è geometricamente consistente, dato che in generale non avrà due valori singolari uguali e il terzo nullo richiesti dalla Proposizione 6. Imporre questi vincoli significa trovare la matrice E0 che minimizzi la norma kE − E0 k∞ = max i X eij − e0ij j con il vincolo detto sui valori singolari. È facile imporre tale vincolo ricorrendo sempre alla scomposizione ai valori singolari: si scompone E = UDV> dove D è la matrice diagonale dei valori singolari. Si pone poi e > E0 = UDV dove De = a a 0 . Il valore di a è arbitrario, e fissa la scala della ricostruzione. Per semplicità abbiamo posto a = 1: in questo modo la baseline t avrà norma unitaria. 2.5 Stima del tensore trifocale Nel caso di tre viste, utilizzando corrispondenze di punti o linee è possibile calcolare il tensore trifocale T , che riassume la geometria epipolare. Avremo 44 ancora due passaggi, il primo di stima lineare e il secondo di imposizione algebrica dei vincoli. Stima lineare di T la (1.8): Nel caso della corrispondenza tra punti, l’equazione è [x ]× 0 ! X x Ti [x00 ]× = 03×3 . (2.7) i i L’equazione può essere scritta anche in notazione tensoriale come xi x0j x00k jqs krt Tiqr = 0st (2.8) dove ijk è il tensore di Ricci e 0st è un tensore bidimensionale con elementi nulli. Una corrispondenza tra tre punti identifica quindi 9 equazioni, lineari negli elementi Tijk , di cui è possibile mostrare che solo 4 sono linearmente indipendenti. Accostando un numero sufficiente di equazioni è possibile quindi calcolare linearmente il tensore trifocale, in modo analogo all’algoritmo a 8 punti per la matrice essenziale, scegliendo opportunamente le equazioni. La (2.8) può essere espansa come xk x0i x00m Tkjl − x0j x00m Tkil − x0i x00l Tkjm + x0j x00l Tkim = 0ijlm , utilizzando la notazione tensoriale degli indici ripetuti, che riassume una sommatoria su quegli indici (in questo caso la somma è sui k). Una scelta delle 4 equazioni indipendenti può essere fatta fissando j = m = 3 e lasciando i = 1, 2, l = 1, 2: xk (x01 x003 Tk31 − x03 x003 Tk11 − x01 x001 Tk33 + x03 x001 Tk13 ) = 0 i = l = 1 xk (x01 x003 Tk32 − x03 x003 Tk12 − x01 x002 Tk33 + x03 x002 Tk13 ) = 0 i = 1, l = 2 xk (x02 x003 Tk31 − x03 x003 Tk21 − x02 x001 Tk33 + x03 x001 Tk23 ) = 0 i = 2, l = 1 xk (x02 x003 Tk32 − x03 x003 Tk22 − x02 x002 Tk33 + x03 x002 Tk23 ) = 0 i = l = 2 Ogni equazione coinvolge 12 elementi del tensore trifocale; riorganizzando i 27 elementi in un vettore di incognite, è possibile scrivere il problema lineare come At = 0 con t> = T111 , T112 , T113 , T121 , . . . , T332 , T333 . i h La matrice A è di dimensioni 4n × 27, dove n è il numero di triplette di punti corrispondenti. Per avere una soluzione sono sufficienti 7 triplette; tale 45 soluzione del sistema omogeneo si può trovare ancora ricorrendo alla SVD, come nel caso dell’algoritmo a 8 punti: scomposta A = USV> la soluzione è t = v27 , l’ultima colonna della matrice V, i cui elementi riorganizzati compongono la stima lineare T0 del tensore trifocale. Rispetto al caso tradizionale è stato omesso il passaggio di normalizzazione dei punti immagine, sempre grazie alla geometria sferica, in cui i punti sono già ben distribuiti, e non esistono problemi di scale diverse tra i punti xi . Imposizione dei vincoli di consistenza geometrica La soluzione ottenuta linearmente non ha garanzie di consistenza geometrica, come nel caso della matrice essenziale. Occorre dunque imporre algebricamente la consistenza, in questo caso ricorrendo all’equazione usata per definire teoricamente il tensore trifocale: > Ti = ai b> 4 − a4 bi , in notazione tensoriale Tijk = aji e00k − e0j bki (2.9) dove aij è l’elemento della riga i (indice controvariante) colonna j (indice covariante) di A. Ricordando che a4 = e0 e b4 = e00 sono le ultime colonne delle matrici A e B, abbiamo un legame tra gli epipoli e il tensore trifocale. Questo legame consta di 27 equazioni, una per ogni elemento del tensore; riorganizzando gli elementi in vettori si può scrivere Ea = t dove (2.10) a> = a11 , a12 , a13 , a21 , · · · , a33 , b11 , · · · , b33 , h i t> = T111 , T112 , T113 , T121 , . . . , T332 , T333 h i ed E è la matrice 27 × 18 che esprime i legami dell’equazione (2.9), ed è costruita a partire dagli elementi di e0 ed e00 . Conoscendo gli epipoli è possibile quindi costruire un tensore trifocale che sia geometricamente consistente e minimizzi l’errore algebrico kAtk. È infatti sufficiente cercare la soluzione che 46 minimizza kAtk soggetta al vincolo ktk = 1. Utilizzando la (2.10), il problema di minimizzazione vincolata diventa mina kAEak s.t. kEak = 1 (2.11) Una volta ottenuta a, si calcola il tensore trifocale sempre con la (2.10). Calcolo degli epipoli Per effettuare la minimizzazione vincolata (2.11) è necessario dunque riuscire ad estrarre gli epipoli a partire dalla stima T0 . Dalle proprietà del tensore, viste a pagina a pagina 18, sappiamo che gli epipoli e0 ed e00 sono le perpendicolari comuni ai vettori nulli sinistri (rispettivamente destri) delle tre matrici Ti . In presenza di rumore è necessario risolvere il sistema nel senso dei minimi quadrati, dato che non esiste una soluzione esatta. Si applica la decomposizione ai valori singolari: 1. Per i = 1, 2, 3 si calcola mediante SVD il vettore unitario vi che minimizza kTi vi k, dove Ti = Ti.. . Si forma poi la matrice v1> > V = v2 v3> 2. Si calcola l’epipolo e00 come il vettore unitario che minimizza kVe00 k, ancora mediante SVD. L’epipolo e0 viene calcolato in modo analogo, usando T> i invece delle Ti . Ottimizzazione con Levenberg-Marquardt Il metodo di minimizzazione che calcola il tensore trifocale a partire dagli epipoli, (e0 , e00 ) 7→ AEt può essere visto come una mappa R6 → R27 . È possibile applicare un metodo iterativo, come Levenberg-Marquardt, per ottenere un risultato ottimale; il passo di imposizione dei vincoli appena visto equivale alla prima iterazione del metodo (per dettagli vedi [16, 8]), ovvero a partire da una stima iniziale degli epipoli viene fatto un passo di ottimizzazione. Applicando l’algoritmo LM fino a convergenza è possibile migliorare la stima lineare. Gli ingredienti dell’algoritmo sono • La variabile da ottimizzare, che nel nostro" caso#è il vettore di R6 composto e0 dal concatenamento degli epipoli e = , con il valore iniziale e0 e00 ottenuto dal tensore trifocale stimato linearmente T0 . 47 • La funzione obiettivo g(e) ∈ R27 , che è composta dai seguenti passaggi: – calcolo della matrice E utilizzando gli elementi di e – minimizzazione vincolata (2.11) che restituisce la soluzione t – calcolo del residuo g = At • Un numero massimo di iterazioni e una tolleranza sull’errore relativo sotto la quale l’algoritmo viene fermato. 2.6 Calcolo di R, t e il problema della scala Dato che il nostro scopo è di stimare il moto della videocamera, è necessario estrarre le informazioni di rototraslazione tra le varie viste. A livello di notazione, indicheremo con t e t21 , t31 i vettori di traslazione che vengono calcolati rispettivamente dalla matrice essenziale e dal tensore trifocale, e che sono espressi nel sistema di riferimento della sfera corrente, la k-esima. Nel caso delle tre viste indicheremo con tk21 il vettore di traslazione finale, espresso nel sistema di riferimento globale. Dato che (rumore a parte) tk21 = tk−1 31 essendo gli stessi punti, esprimeremo infine la posizione della sfera k-esima con tk , sia nel caso a due che per tre viste. Ricostruzione con due viste Estrazione di R, t Tutte le informazioni di geometria epipolare sono contenute nella matrice essenziale E. Dalla teoria sappiamo che è possibile ricostruire la posizione delle videocamere a meno di una rototraslazione (da un ipotetico sistema di riferimento globale) e di un fattore di scala. Possiamo quindi senza perdita di generalità far coincidere la prima videocamera con il sistema di riferimento globale e calcolare R e t fra la prima e la seconda videocamera. Dalla teoria sappiamo che per le videocamere tradizionali è possibile calcolare la matrice della videocamera P0 = [R | t] sfruttando il risultato (1.6): P0 = UWV> | +u3 o UWV> | −u3 o UW> V> | +u3 o UW> V> | −u3 . h i h i h i h i Nel caso delle videocamere omnidirezionali non ha senso parlare di matrice di proiezione della videocamera, ma si dimostra che i parametri estrinseci sono ancora determinabili usando l’espressione (1.6). La differenza è che la proiezione sul piano immagine non avviene attraverso la moltiplicazione x = P0 X ma attraverso la normalizzazione delle coordinate dei punti nello spazio espressi nel sistema di riferimento locale, identificato da R e t. 48 Avendo quattro possibili soluzioni è necessario selezionare quella corretta. Per far questo, detti C e C0 i centri delle videocamere, e x e x0 i punti immagine, è sufficente ricostruire il punto 3D X (X’ se espresso nel sistema di riferimento della seconda sfera) mediante triangolazione, e controllare che le triplette C, x, X e C0 , x0 , X0 siano allineate in quest’ordine. Come vedremo dalla triangolazione, i punti delle triplette non saranno perfettamente allineati, ma è sufficiente controllare che il prodotto scalare tra i vettori x − C e X − x sia positivo. Nella seconda vista si applica lo stesso procedimento, avendo cura prima di effettuare il cambio di coordinate X0 = R (X − t) e di porre C0 = 0. Sistema di riferimento globale Avendo una serie di fotografie omnidirezionali Ik prese dalla stessa videocamera ed analizzate a coppie, diventa necessario risolvere due problematiche. In primo luogo, il calcolo del sistema di riferimento: visto che ogni coppia di viste è considerata separatamente nei calcoli, il metodo proposto riesce a calcolare solo rotazione e traslazione relative tra le due viste, dimenticandosi delle informazioni precedenti. È comunque sufficiente utilizzare R e t relative di ogni camera per calcolare via via gli estrinseci cumulativi per la videocamera k + 1-esima: Rk+1 = RRk tk+1 = tk + Rk −1 t Propagazione della scala Un secondo problema è quello della scala: ogni volta che vengono calcolati R e t, l’algoritmo calcola una baseline di norma unitaria. È necessario quindi propagare l’informazione di scala scelta per la prima coppia di videocamere (che può essere fissata arbitrariamente oppure mediante qualche tipo di dato esterno) anche alle altre viste: serve un elemento che faccia da ponte tra una coppia di viste e quella successiva. L’unico tipo di informazione di questo tipo sono i punti 3D ricostruiti visibili in almeno tre immagini consecutive. Dette P, P0 e P00 le tre videocamere, chiamiamo Xi i punti che sono visibili dalle prime due viste, Yi i punti visibili nelle seconde due. Intersecando i due insiemi di punti possiamo trovare i punti Zi comuni alle tre viste. Nel caso siano stati utilizzati descrittori SIFT è sufficiente cercare le corrispondenze tra la prima e la seconda, e tra la seconda e la terza vista, ed effettuare un join dei due insiemi usando come chiave i descrittori della seconda vista. L’operazione di join consiste nel selezionare tutti i punti che compaiono in entrambi gli insiemi e hanno lo stesso descrittore nella seconda vista. In Matlab può essere usato il comando intersect. I punti Zi devono quindi essere ricostruiti in modo identico a partire dalle due coppie di videocamere, assumendo di aver 49 tenuto traccia degli estrinseci cumulativi, a parte il fattore di scala mancante. Se posizioniamo il nostro sistema di riferimento sulla seconda sfera, questo significa che i punti ricostruiti Ẑi saranno semplicemente riscalati lineramente rispetto agli Zi . Recuperare il fattore di scala a questo punto è semplice: calcolando i baricentri 1 X Zold = Zi N i e 1 X Ẑi , Znew = N i dobbiamo ottenere due punti allineati con il centro della seconda videocamera C0 , di cui si può calcolare il rapporto delle distanze rispetto al centro della videocamera, e quindi la scala k= Zold − C0 . Znew − C0 La vera baseline stimata sarà dunque t̃ = kt, essendo t la baseline stimata dall’algoritmo a 8 punti. Il metodo proposto per il calcolo della scala presenta diverse criticità, essendo sensibile alla presenza di outlier, che supponiamo essere stati rimossi mediante il RANSAC utilizzato per la stima della matrice essenziale. Potrebbero verificarsi inoltre casi di baricentri coincidenti con il centro della videocamera. Nell’articolo [19], gli autori hanno proposto un metodo più robusto basato sulla scelta della scala che minimizza la distanza tra i punti ricostruiti nella prima e nella seconda coppia di viste, e seleziona con RANSAC gli inlier (il metodo è descritto in [11]). Avremmo quindi un doppio RANSAC annidato: all’esterno un ciclo per trovare gli inlier della geometria epipolare tra due viste, e all’interno un ciclo per trovare gli inlier comuni alle tre viste. Ricostruzione con tre viste Estrazione delle matrici essenziali Nel caso di tre viste abbiamo calcolato il tensore trifocale; da questo è possibile estrarre la geometria epipolare fra coppie di videocamere e quindi le rototraslazioni relative tra la prima e la seconda vista, e tra la prima e la terza. Dalla teoria sappiamo che le matrici fondamentali vengono calcolate a partire dal tensore trifocale utilizzando gli epipoli: F21 = [e0 ]× [T1 , T2 , T3 ] e00 e 50 0 > > F31 = [e00 ]× T> 1 , T2 , T3 e . h i Essendo i nostri punti normalizzati ci troviamo in realtà già nel caso metrico, per cui le matrici risultanti saranno essenziali, e le chiameremo E21 ed E31 . Calcolo degli estrinseci Da queste matrici essenziali possiamo ancora estrarre le quantità R21 , t21 e R31 , t31 ricorrendo al metodo proposto per le due viste. Rimane però un problema: con il metodo standard, avremmo kt31 k = kt21 k = 1, cosa che in generale è falsa. Occorre quindi riuscire ad assegnare alle due baseline le corrette proporzioni. In realtà quest’informazione è già contenuta nelle matrici essenziali, dato che sono calcolate dallo stesso tensore trifocale e quindi hanno lo stesso fattore di scala. I valori delle baseline non normalizzate che potremmo ottenere sono quindi arbitrari, ma utili in quanto rispettano le corrette proporzioni tra loro. Per estrarre quest’informazione è sufficiente salvare il fattore di scala di ognuna delle due matrici essenziali, che coincide con la coppia di valori singolari non nulli ottenuti dalla decomposizione SVD: E = U s1 s2 0 > V I due valori singolari s1 ed s2 dovrebbero essere identici, ma a causa del rumore potrebbero essere diversi: per maggior robustezza prendiamo il fattore di scala della prima coppia di videocamere come s0 = s1 + s2 . 2 Una volta calcolato questo valore possiamo procedere come prima, fissando quindi la scala della prima coppia a 1 mediante l’imposizione di valori singolari unitari: 1 1 S0 = . 0 Analogamente possiamo calcolare il fattore di scala della seconda coppia s00 . Il fattore di scala tra le due coppie sarà allora s= s0 s00 e imporremo la scala della seconda coppia come S00 = s s 51 0 . In questo modo date tre viste e le relative corrispondenze, l’algoritmo calcola le matrici R21 e R31 che esprimono le rotazioni relative tra la prima e la seconda e la prima e la terza vista, e i vettori di traslazione t21 e t31 che puntano in direzione delle rispettive sfere; t21 avrà norma unitaria mentre t31 sarà scalato in proporzione. Propagazione della scala Propagare le informazioni della scala da un terzetto di viste all’altro è poi banale: al passo k-esimo l’algoritmo restituisce una t21 di norma unitaria, ma sappiamo che tk21 ≡ tk−1 31 di cui conosciamo la misura calcolata al passo precedente. È sufficente quindi riscalare le baseline trovate dall’algoritmo usando quest’informazione: k−1 t̃21 = tk−1 31 − t21 t21 k−1 − tk−1 t̃31 = t31 21 t31 Sovrapposizione tra i terzetti di sfere È utile fare un’osservazione sulla sovrapposizione dei terzetti di sfere usate per i calcoli, visto che è possibile scegliere tra due opzioni: una sovrapposizione minima, e una abbondante. Nel primo caso analizzeremo le sfere 1, 2 e 3, poi le sfere 3, 4 e 5, e via così. Un procedimento di questo tipo è orientato a rendere più rapidi i calcoli, dato che si avanza di due sfere ogni volta; rimane altresì il problema della propagazione dell’informazione della scala, che può essere risolto in modo analogo a quanto descritto nel caso delle due viste: calcolo della scala a partire dai punti in comune a due terzetti consecutivi di sfere. Tale metodo è però difficilmente praticabile, almeno per fotografie sparse, in quanto non è semplice trovare punti che siano visibili da tutte e 5 le sfere. Nel secondo caso, che è quello portato avanti nella tesi, vengono analizzate le sfere 1, 2 e 3, poi le 2, 3 e 4, e così via. Stiamo in pratica sovrapponendo ampiamente i terzetti di sfere in modo da poter guadagnare in robustezza della stima, e ridurre così i problemi di deriva. 2.7 Triangolazione dei punti La ricostruzione dei punti 3D viene usata all’interno degli algoritmi proposti in diversi casi, ad esempio per scegliere tra le 4 possibili coppie di R e t quella corretta, o per propagare l’informazione di scala nel caso a due viste. L’idea di base della triangolazione è di propagare i raggi passanti per i centri di videocamera e i punti sul piano immagine: avendo almeno due viste tali raggi dovrebbero incontrarsi nel punto dello spazio che ha generato i punti immagine. 52 Il condizionale è d’obbligo, in quanto nel mondo reale è inevitabile avere errori che pregiudicano questa proprietà. Sono stati sviluppati diversi metodi di triangolazione, che mirano a minimizzare quantità come l’errore di riproiezione, o l’errore algebrico (per maggiori dettagli vedi [8]). Una delle proprietà richieste a questi metodi è di essere invarianti per trasformazioni proiettive, dato che l’ambito comune in cui vengono usati è quello di ricostruzione proiettiva. Nel nostro caso siamo invece già in ambito metrico, motivo per cui è possibile permettersi una semplificazione di questo passaggio. È stato scelto un semplice metodo geometrico basato sulla proiezione dei raggi generati dai punti immagine. Conoscendo gli estrinseci delle due sfere e i punti immagine sulla superficie delle sfere stesse, è possibile calcolare le equazioni delle rette dei raggi, r e r0 . Utilizzando formule di geometria cartesiana è inoltre possibile calcolare il punto A0 della retta r in cui la distanza dalla retta r0 è minimo, e l’analogo punto B0 sulla retta r0 . Una volta calcolati i punti A0 e B0 , una buona approssimazione del punto da ricostruire è il punto medio X̂ = 21 (A0 + B0 ) . Il punto X̂ è anche quello che distribuisce l’errore di riproiezione equamente su entrambe le sfere coinvolte, in quanto i punti riproiettati x̂ e x̂0 sono i punti medi degli archi aventi come estremi le proiezioni dei punti A0 e B0 . Dati i punti A1 , A2 , B1 e B2 , rispettivamente centro e punto immagine della prima videocamera, centro e punto immagine della seconda videocamera, espressi nello stesso sistema di riferimento globale, avremo dunque na = [(B2 − B1 ) × (A1 − B1 )] · [(A2 − A1 ) × (B2 − B1 )] nb = [(A2 − A1 ) × (A1 − B1 )] · [(A2 − A1 ) × (B2 − B1 )] d = [(A2 − A1 ) × (B2 − B1 )] · [(A2 − A1 ) × (B2 − B1 )] na (A2 − A1 ) A0 = A1 + d nb B0 = B1 + (B2 − B1 ) d A0 + B 0 X̂ = 2 Nel caso delle tre viste effettuiamo la triangolazione utilizzando coppie di videocamere, ad esempio la prima con la seconda e la prima con la terza, e calcoliamo X̂ come la media tra i due punti X̂12 e X̂13 ottenuti. 53 Algoritmo 2.1 Stima del moto della videocamera utilizzando due viste. Obiettivi Date N immagini omnidirezionali in formato equirettangolare, calcolare posizione e orientamento della videocamera nel momento dello scatto. Algoritmo Per k = 2 ÷ N 1. Calcolo dei punti notevoli xi con SIFT nelle immagini k − 1 e k. 2. Matching tra i punti notevoli trovati per trovare le corrispondenze xik−1 ↔ xik , espresse in coordinate sferiche. 3. Stima con RANSAC della matrice essenziale E e degli inlier xjk−1 e xjk , utilizzando l’algoritmo a 8 punti per calcolare la matrice a partire dalle corrispondenze. 4. Calcolo di R, t a partire dalla matrice essenziale mediante scomposizione SVD. La baseline ha norma unitaria. 5. Se k = 2 (a) Rk = R, tk = t (b) Triangolazione dei punti immagine per ottenere i punti 3D Xk 6. Se k > 2 (a) Triangolazione dei punti immagine per ottenere i punti 3D X̂k (b) Selezione mediante matching dei punti immagine che sono tra loro corrispondenti nelle immagini k − 2, k − 1, k. (c) Calcolo dei baricentri X̄k e X̄k−1 dei punti selezionati e stima della kX̄k −tk−1 k scala k = X̄k−1 −tk−1 . k k (d) Riscalamento di t e dei punti 3D per ottenere gli Xk (e) Rk = RRk , tk = tk + Rk −1 t 54 Algoritmo 2.2 Stima del moto della videocamera utilizzando tre viste. Obiettivi Date N immagini omnidirezionali in formato equirettangolare, calcolare posizione e orientamento della videocamera nel momento dello scatto. Algoritmo Per k = 1 ÷ N − 2 1. Calcolo dei punti notevoli xi con SIFT delle immagini k, k + 1 e k + 2. 2. Matching tra i punti notevoli trovati per trovare le corrispondenze xik ↔ xik+1 e xik+1 ↔ xik+2 , espresse in coordinate in coordinate sferiche. Join dei due insiemi per trovare le corrispondenze tra le tre immagini. 3. Stima con RANSAC del tensore trifocale T e degli inlier xjk , xjk+1 e xjk+2 : (a) Calcolo della stima T0 mediante stima ai minimi quadrati a partire dalle corrispodenze tra punti (b) Iterazioni di Levenberg-Marquardt sul metodo di ottimizzazione vincolata, inizializzato con T0 4. Calcolo di E21 ed E31 a partire dal tensore trifocale e calcolo del fattore di scala s tra la seconda e la terza videocamera. 5. Calcolo di R21 , t21 R31 , t31 a partire dalle matrici essenziali. La baseline t21 ha norma unitaria, mentre t31 è scalata del fattore s. 6. Se k = 1 (a) R2 = R21 , t2 = t21 , R3 = R31 , t3 = t31 . (b) Triangolazione dei punti immagine per ottenere i punti 3D Xk 7. Se k > 1 (a) Riscalamento di t21 e t31 moltiplicandoli per il fattore k = k+1 k t − t . (b) Triangolazione dei punti immagine per ottenere i punti 3D Xk (c) Rk+2 = R31 Rk+1 , tk+2 = tk+1 + Rk+1 55 −1 t31 Capitolo 3 Risultati sperimentali 3.1 Risultati con dati sintetici Per mettere alla prova i metodi sviluppati sono stati generati dati sintetici in Matlab, in modo che fosse possibile misurare con precisione gli errori nella localizzazione delle sfere. È importante misurare qual è l’errore di stima per ogni coppia o terzetto di sfere considerata, ma anche quantificare la deriva totale, ovvero come gli errori si accumulano quando vengono analizzate molte sfere, dato che l’obiettivo del metodo è di stimare il moto a partire da una serie di immagini. Nello spazio 3D sono stati generati N punti casuali Xi , con N = 50 o N = 100. Con uno script vengono poi generate le sfere, con distanze e angoli di rotazione casuali. Ogni sfera è identificata dalla coppia (Rreal , treal ), che esprime rotazione e traslazione rispetto al sistema di riferimento globale. Su ogni sfera vengono poi generati i punti immagine xi proiettando i punti Xi . La proiezione avviene in due passi: prima i punti vengono convertiti nel sistema di riferimento della sfera stessa, in seguito vengono normalizzati in modo che abbiano norma unitaria, e giacciano quindi sulla sfera di raggio unitario che identifica la videocamera omnidirezionale. I punti immagine sono salvati in vettori di dimensioni 3 × N , per cui la colonna i-esima dei vettori di ogni sfera è la proiezione dell’i-esiamo punto 3D. Per simulare il rumore, vengono introdotti due tipi di errori dopo la proiezione: • Rumore gaussiano nella proiezione dei punti sulla sfera, che simula un errore con deviazione standard di σ pixel nella localizzazione del punto notevole. I test sono stati effettuati con σ = 0.3 e σ = 3 pixel. Utilizzando metodi come SIFT si può ottenere una precisione inferiore al 56 pixel, necessaria per una buona ricostruzione, ma nel caso più realistico l’errore più superare il pixel di ampiezza. • False corrispondenze, con una percentuale intorno al 30% rispetto al totale. Caso ideale Il caso senza rumore è un modo semplice per testare il funzionamento dell’algoritmo in condizioni ottimali, che in realtà non si verificano mai. Ci aspettiamo una stima perfetta del moto della videocamera, e gli errori ottenuti sono infatti vicini a quelli numerici, sia nel caso a due viste che in quello a tre. Per le due viste i risultati sono mostrati in Figura 3.1: con un percorso lungo 10 sfere l’errore totale di localizzazione, preso come la somma degli errori delle baseline: etot = N X k test − tkreal k=2 risulta etot = 7.810 , mentre per tre viste etot = 1.110−12 . Stiamo parlando in entrambi i casi di errori trascurabili, imputabili sostanzialmente alle operazioni effettuate con l’aritmetica imperfetta del calcolatore, per cui è normale che, essendo il tensore trifocale calcolato con un procedimento più complesso, risulti lievemente più alto l’errore. La potenza del tensore trifocale si mostra nel caso con rumore, dove le stime sono migliori. −13 Caso con rumore Per affrontare casi più realistici, i dati sintetici vengono contaminati con gli errori prima presentati, in modo via via più pesante. Le figure mostrano i risultati sempre nel caso di un percorso di 10 sfere generate in modo casuale. Solo errori di misurazione Iniziamo con l’introdurre errori nella localizzazione dei punti notevoli: alle coordinate di tutti i punti immagine viene sommato un errore gaussiano con deviazione standard di 0.3 pixel. In Figura 3.2 sono visibili i risultati per N = 50 corrispondenze: i casi a due e tre viste sono difficilmente distinguibili, e infatti presentano rispettivamente etot = 0.07 ed etot = 0.06. Gli errori introdotti vengono ben contrastati dalla stima ai minimi quadrati, che si rivela efficace anche con un numero di punti non molto alto. Aumentando il numero di corrispondenze, migliora automaticamente la stima, anche quando si aumenta l’intensità degli errori. 57 Figura 3.1: Stima del moto proprio con due e tre viste, nel caso ideale. 58 Figura 3.2: Stima del moto proprio con due e tre viste, nel caso in cui sia presente del rumore di localizzazione dei punti notevoli, ma nessuna falsa corrispondenza. 59 Con bassi errori di misurazione e false corrispondenze Introducendo le false corrispondenze il problema diventa più difficile. L’algoritmo RANSAC è infatti in grado di rimuovere tutte le false corrispondenze quando i dati che sono davvero inlier sono perfettamente accurati. Se invece anche gli inlier presentano errori, si genera un effetto a catena: i modelli calcolati da RANSAC usando insiemi minimi sono significativamente influenzati dagli errori, per cui risulta difficile separare nettamente inlier ed outlier. Se una falsa corrispondenza viene inserita tra quelle buone, il risultato finale viene notevolmente danneggiato. Abbiamo iniziato per questo inserendo, su N = 50, un 30% di false corrispondenze e un errore di misurazione molto basso, nell’ordine di 0.03 pixel. In questo caso i risultati, mostrati in Figura 3.4, evidenziano come entrambi i metodi, a due e tre viste, si comportino bene. In particolare per le due viste etot = 0.3 ed etot = 0.009: il secondo metodo inizia ad essere decisamente più affidabile del primo, anche se entrambi i risultati si possono considerare accettabili, essendo l’errore minore dello 0.5% sul percorso totale. Con errori di misurazione e false corrispondenze Aumentando l’intensità dell’errore di misurazione a 0.3 pixel appaiono evidenti i limiti del metodo con due viste, come mostrato in Figura 3.5 con N = 50. In questo caso etot = 5.7, ovvero il 9% del percorso totale compiuto dalla videocamera. Con tre viste invece abbiamo etot = 0.56, cioè lo 0.9% del percorso totale, un ordine di grandezza in meno. La differenza è dovuta alla robustezza del RANSAC: nel caso delle due viste può succedere che alcuni dati outlier non vengano scartati, e compromettano la stima. Essere inlier nel caso delle tre viste è infatti un requisito più stringente (tre vincoli invece di due) e i dati vengono filtrati meglio. Aumentando il numero di punti totali, con N = 200, otteniamo un miglioramento dei risultati in entrambi i casi, come mostrato in Figura 3.6: per le due viste abbiamo etot = 1.9, il 3% in termini relativi, mentre per tre viste abbiamo etot = 0.1, lo 0.2% relativo. La stima ai minimi quadrati riesce a bilanciare gli errori migliorando il risultato. Aumentando ancora l’intensità dell’errore e il numero di punti utilizzati, con N = 400 e σ = 3 pixel di errore, notiamo che sia il metodo a due che tre sfere si comportano bene, come mostrato in Figura 3.3: il grande numero di punti utilizzabili per i calcoli permette di scartare accuratamente gli outlier e di compensare il forte rumore con l’uso dei minimi quadrati. Il prezzo che si paga è un aumento notevole del numero di iterazioni RANSAC necessarie, che crescono sia con il numero di outlier che con il numero totale di punti. Nel caso della stima a due viste il metodo è comunque abbastanza rapido, mentre nel 60 Figura 3.3: Stima del moto proprio con due e tre viste, nel caso in cui sia presente un forte rumore di localizzazione dei punti notevoli e false corrispondenze, ma il numero di punti sia elevato. 61 caso a tre viste i tempi di calcolo si allungano. A livello di accuratezza della ricostruzione, con due viste abbiamo etot = 5.9 equivalente al 4.8% sul percorso, mentre con tre viste abbiamo etot = 1.6 equivalente al 1.3% sul percorso. La criticità maggiore risiede comunque nel trovare un metodo in grado di filtrare tutti gli outlier, e nel caso delle tre viste, che impongono un triplo vincolo, questo si traduce in una maggiore robustezza e precisione. Per capire l’effetto che può avere l’inclusione di un outlier nella stima del modello basta vedere la Figura 3.7: per una coppia di sfere la stima è stata falsata, e il risultato è un errore di deriva che viene propagato anche alle sfere successive, che vengono stimate correttamente, come si vede dal fatto che il percorso stimato e quello reale sono paralleli. In sintesi, se è noto un numero sufficientemente grande di corrispondenze buone (N > 100) entrambi i metodi funzionano bene, riuscendo a rimuovere gli outlier e a compensare gli errori di misurazione. Se i punti utilizzati sono invece pochi il più robusto è il metodo a tre viste, mentre quello a due viste, pur più veloce, risente degli errori e presenta una deriva maggiore. Prestazioni e velocità Per quanto riguarda la stima dei modelli con i dati sintetici, la parte più onerosa dal punto di vista computazionale è l’applicazione di RANSAC per trovare gli inlier, che è fortemente influenzata dalla percentuale di dati corretti sul totale. Nei casi visti l’algoritmo ha dovuto provare anche diverse centinaia di modelli, sopratutto nel caso a due viste, dove l’insieme minimo è di 8 elementi, per cui la probabilità di ottenere un insieme privo di outlier è bassa, nel nostro caso p = (0.7)8 = 0.0576, senza contare gli elementi che potrebbero essere inlier ma con errori di misura così grandi da essere assimilabili ad outlier. Con tre viste l’insieme minimo utilizzato è di 7 elementi, che porta a p = 0.0824, un leggero miglioramento, ma esistono anche metodi che utilizzano solo 6 elementi, rinunciando ad una conoscenza completa di alcuni elementi del tensore ([8] pag. 511). 3.2 Risultati con dati sperimentali I dati sperimentali sono sequenze di fotografie di Google Street View, si cui abbiamo la localizzazione con una certa approssimazione, dato che Google non fornisce le coordinate GPS di ogni bolla. Di fronte alla richiesta di posizionarsi nella coordinata (x, y), Google Street View fornisce l’immagine omnidirezionale più vicina alla coordinata. L’approssimazione può quindi essere di una decina 62 Figura 3.4: Stima del moto proprio con due e tre viste, nel caso in cui sia presente del rumore a bassa intensità e false corrispondenze. 63 Figura 3.5: Stima del moto proprio con due e tre viste, nel caso in cui sia presente del rumore a bassa intensità. 64 Figura 3.6: Stima del moto proprio con due e tre viste, nel caso in cui sia presente del rumore e false corrispondenze, ma il numero di corrispondenze sia elevato. 65 Figura 3.7: Un caso in cui RANSAC non è riuscito a rimuovere un outlier consistente, che ha quindi provocato un errore molto grande nella ricostruzione di una sfera. di metri, su un percorso di un centinaio di metri. Questa incertezza viene poi amplificata su tutto il percorso ricostruito, dato che utilizziamo le coordinate GPS per fissare la scala iniziale. Inoltre, come evidenziato nel capitolo precedente, non c’è garanzia che le immagini di Street View siano prese dalla stessa videocamera, dato che nel sito possono essere mischiate immagini prese in giorni diversi, e anche in sensi di marcia diversi. Queste ipotesi sono essenziali per il corretto funzionamento del metodo, per cui è stato necessario cercare zone in cui fossimo ragionevolmente sicuri che fossero soddisfatte. I test sulle immagini sperimentali vanno quindi considerati come prove qualitative, di cui non possiamo misurare rigorosamente l’errore. Verificheremo quindi che la forma del percorso, e grosso modo la scala, rispecchino la realità. Test su rettilineo in Via Sforza a Lodi Un primo esempio riguarda il caso di un rettilineo, nella fattispecie Via Sforza a Lodi. Sono state utilizzate 6 viste omnidirezionali, di cui tre sono mostrate in Figura 3.8. La risoluzione delle fotografie è di 833 × 1666 pixel, generate a partire dalla vista di Google Street View nelle coordinate GPS mostrate in tabella 3.1. Come si può vedere dalla tabella, immagini con questa risoluzione generano circa 1500 punti notevoli 66 # Latitudine Longitudine 1 2 3 4 5 6 45.311486 45.311426 45.311356 45.311177 45.311233 45.311096 9.490736 9.490739 9.490752 9.490768 9.490765 9.490779 # punti SIFT 1510 1480 1612 1691 1683 1560 # match 3 viste 71 102 55 63 - # inlier 3 viste 32 32 32 35 - Tabella 3.1: Dati relativi alle sei viste utilizzate per stimare il moto della videocamera nel test Via Sforza. nella sola zona centrale dell’immagine (ricordiamo che stiamo scartando il 70% dell’immagine, e conservando solo il 30% vicino all’equatore). Di questi punti, solo 200 circa vengono stimati come corrispondenti tra un’immagine e quella consecutiva. Quando poi cerchiamo le corrispondenze tra tre immagini consecutive, i match si riducono a circa 70, come mostrato in Figura 3.9. A questi va sommato l’effetto di RANSAC, che cerca di eliminare gli outlier, ovvero corrispondenze false: tipicamente sono considerati inlier circa il 50% dei match fin qui trovati, cosa che riduce parecchio il numero di punti utilizzabili per stimare la geometria epipolare, come visibile in Figura 3.10, e aumenta di molto il tempo che RANSAC usa per avere la confidenza richesta di aver analizzato almeno un sottoinsieme minimo privo di outlier. Il fatto che RANSAC non sia deterministico è evidente dal fatto che ripetendo più volte la stima con gli stessi dati otteniamo un numero ogni volta diverso di inlier, anche se la variazione è di poche unità. Il numero di iterazioni RANSAC necessarie dipende fortemente dalla soglia di errore impostata per discriminare inlier e outlier: nel nostro caso, con e = 0.001 sono necessarie circa 2000 iterazioni per ogni terzetto di sfere; con e = 0.01 sono circa 200. Con un e = 0.002 i risultati sono accettabili. Una considerazione da fare sui dati è che il numero di corrispondenze inlier è piuttosto basso e non garantisce una stima affidabile della geometria epipolare: come visto con i dati sintetici, l’ideale è avere diverse centinaia di corrispondenze, in modo da bilanciare gli errori di misurazione. Un modo semplice per ottenere un miglioramento è di usare immagini a risoluzione maggiore, ma nel caso di Google Street View non è possibile, come evidenziato nella Sezione 2.1 a pagina 31. Ad esempio, con un’immagine 1500 × 3000 la situazione cambia: avremo più di 5000 punti notevoli dopo il SIFT, circa 67 Figura 3.8: Esempio di tre viste omnidirezionali consecutive del test di stima Via Sforza. 68 Figura 3.9: In figura sono mostrate la corrispondenze tra punti SIFT delle prime due immagini. In alto abbiamo le corrispondenze basate sulla distanza tra descrittori; in basso, le corrispondenze rimaste dopo l’intersezione con quelle tra la seconda e terza immagine. 69 Figura 3.10: In figura sono mostrate la corrispondenze tra punti SIFT delle prime due immagini, dopo l’applicazione di RANSAC per il calcolo del tensore trifocale. 70 # 1 2 3 4 5 6 # punti SIFT 1800 1721 1707 1681 1740 1597 # match 3 viste 134 140 141 110 - # inlier 3 viste 67 60 60 48 - Tabella 3.2: Dati relativi alle sei viste utilizzate per stimare il moto della videocamera nel test Via Sforza. 700 corrispondenze tra due immagini consecutive, 300 corrispondenze in tre immagini, di cui un centinaio di inlier. Con i dati utilizzati, la stima del moto che otteniamo dal metodo è buona, come si può vedere in Figura 3.11, sia come direzione che come scala, presentando un errore del 5% circa sulla strada percorsa in 6 viste. Per fissare la scala della ricostruzione è stata utilizzata la distanza tra le coordinate GPS dei punti utilizzati in Google Maps, per cui il risultato è poco affidabile, dato che non sono note con precisione le coordinate delle viste. Test su curva in Piazza Castello a Torino Un secondo test è stato pensato per mettere alla prova il metodo in situazioni di curve. Il problema è più difficile che nel caso dei rettilinei, perché la scena può cambiare notevolmente tra un fotogramma e l’altro, cosa che riduce molto il numero di corrispondenze su cui si può far conto. Nel caso delle immagini di Google Street View, la sparsità delle fotografie è un fattore fortemente limitante: dato che la distanza tipica tra due bolle è nell’ordine dei 14 metri, è facile che da una vista all’altra l’auto abbia già girato l’angolo. Con le immagini della risoluzione disponibile, le corrispondenze tra due immagini consecutive sono nell’ordine del centinaio; dopo il RANSAC è facile che rimangano meno di 20 inlier, cosa che pregiudica una stima affidabile. Per superare questi problemi è stata scelta una zona urbana con ampi spazi, in modo da bilanciare la sparsità delle immagini. Effettuare la stima del moto in una zona con ampi spazi e fotogrammi sparsi è simile ad effettuarla in spazi ristretti con molti fotogrammi. In Piazza Castello a Torino è presente una sequenza di fotogrammi che effettua una curva, come mostrato in Figura 3.12. Utilizzando sei fotogrammi disposti lungo la curva è stata effettuata la stima del moto di Figura 3.12. In questo caso le corrispondenze tra i terzetti di viste, indicate per completezza in Tabella 3.2, sono circa 140, di cui 50-60 71 Figura 3.11: In alto: foto da satellite di Via Sforza, dove la freccia verde indica il punto di inizio della misurazione; in basso il percorso ricostruito, a meno di una rototraslazione. 72 inlier, cosa che permette una ricostruzione adeguata. È stata scelta una soglia di errore per RANSAC di e = 0.002, che ha significato circa 2000 iterazioni per la stima robusta del tensore trifocale; come si nota dalla Figura 3.13, gli outlier vengono filtrati efficacemente. I risultati sono soddisfacenti: la forma della curva è ben rispettata, e la ricostruzione della scala è pienamente compatibile con quella della mappa, con un errore cumulativo del 5% sul percorso compiuto. 73 Figura 3.12: In alto: foto da satellite di Piazza Castello a Torino, dove la freccia verde indica il punto di inizio della misurazione, che procede verso il basso seguendo la curva; in basso il percorso ricostruito, a meno di una rototraslazione. 74 Figura 3.13: In figura sono mostrate la corrispondenze che sono considerate inlier tra le immagini 3 e 4, e tra la 4 e la 5. Nell’immagine in alto viene evidenziato il fatto che le immagini sono omnidirezionali: alcune corrispondenze sono a cavallo del bordo dell’immagine, per cui sono lontane in termini di pixel immagine, ma vicine in coordinate sferiche. 75 Conclusioni Risultati La tesi, inserita nell’ambito del progetto europeo Astute, ha avuto come scopo lo studio e la realizzazione di metodi per la stima del moto proprio a partire da sequenze di videocamere omnidirezionali. Il lavoro di ricerca teorica ha evidenziato come nel campo delle videocamere omnidirezionali vi sia ancora spazio per una rigorosa sistematizzazione dei metodi, e che le potenzialità di questi strumenti di acquisizione digitale nel campo della Structure from Motion siano ancora da sfruttare a fondo, in particolare per quanto riguarda l’utilizzo di tre viste. L’applicazione del tensore trifocale alla ricostruzione 3D omnidirezionale è ancora agli inizi, e il metodo che è stato proposto in questa tesi va principalmente a confrontarsi con i metodi per due viste che sono stati finora utilizzati nelle pubblicazioni. Nella tesi sono stati quindi implementati due metodi, rispettivamente utilizzando coppie e terzetti di viste. È stato proposto un primo metodo che utilizza coppie di viste. Dalle immagini omnidirezionali estrae i punti notevoli mediante SIFT, calcola le corrispondenze tra i punti notevoli, ed effettua una stima robusta mediante RANSAC della matrice essenziale mediante una stima lineare con successiva imposizione dei vincoli algebrici. Da questa calcola la rototraslazione esistente tra le due videocamere, e stima il fattore di scala utilizzando i punti ricostruiti precedentemente come riferimento. I risultati ottenuti con i dati sintetici mostrano una buona robustezza generale, anche se l’errore di deriva aumenta sensibilmente nel caso in cui siano presenti errori di misurazione nell’ordine di qualche pixel. Il limite più grande del metodo risiede tuttavia nella propagazione della scala, problema che necessita l’implementazione di un ulteriore metodo di selezione robusta dei punti comuni a tre viste consecutive. Avendo dati sperimentali molto disturbati non è stato quindi possibile applicarvi questo metodo con profitto. Un secondo metodo, con tre viste, estrae i punti notevoli con SIFT e calcola le corrispondenze nelle tre immagini. Effettua poi una stima robusta con RAN76 SAC del tensore trifocale, effettuando iterazioni di tipo Levenberg-Marquard sul metodo compsto da una stima lineare a cui si impone il rispetto dei vincoli algebrici. Dal tensore trifocale vengono estratte le matrici essenziali delle coppie di videocamere, e da queste vengono calcolate le rototraslazioni relative. La propagazione della scala al passo corrente viene effettuata sfruttando il fatto che la baseline tra la prima e la seconda videocamera del terzetto è nota, in quanto è stata calcolata al passo precedente come baseline tra la seconda e la terza. I risultati ottenuti con i dati sintetici mostrano una buona robustezza del metodo anche con dati di bassa qualità, sia per errori di misurazione che per false corrispondenze. L’applicazione ai dati sperimentali ha incontrato grossi limiti nella sparsità e nella bassa risoluzione delle immagini disponibili, così che le corrispondenze da utilizzare per i calcoli sono risultate numericamente esigue; inoltre non erano note le posizioni reali delle immagini a disposizione, cosa che preclude la possibilità di una stima quantitativa dell’errore. È stato però possibile applicare ad almeno due casi (un rettilineo e una curva) il metodo, con risultati qualitativamente soddisfacenti. Uno degli scopi che ci si proponeva in questo lavoro era quello di confrontare i metodi con due e tre viste. Gli esperimenti fatti a questo proposito, sia in termini di dati sintetici che sperimentali, evidenziano i vantaggi dell’uso del tensore trifocale. In particolare: 1. La robustezza della stima della geometria epipolare rispetto ad errori di misurazione e alle false corrispondenze è notevolmente superiore rispetto al caso delle due viste. Considerato che gli errori di stima del moto si accumulano lungo il percorso della videocamera, è fondamentale che siano minimizzati per contenere l’errore di deriva. 2. La propagazione dell’informazione di scala è semplice ed affidabile, a differenza del caso a due viste. In quest’ultimo caso, inoltre, è necessario comunque stimare la scala utilizzando punti visibili in tre viste consecutive, cosa che rende il metodo un ibrido tra i metodi a due e tre viste. Utilizzare direttamente tre viste sia per la stima della geometria epipolare che per la propagazione della scala è più completo. Per contro, le criticità maggiori sono 1. Il tempo di calcolo aumenta rispetto al caso con due viste, data la maggiore complessità dei calcoli necessari per ottenere il tensore trifocale. Questo può rendere più difficile un’implementazione real-time del metodo, anche se gli sviluppi tecnologici possono ovviare al problema. 2. Per l’uso su sequenze di sfere è necessario che le immagini siano prese a breve distanza l’una dall’altra. La sparsità delle bolle presenti su Google 77 Street View è la principale responsabile della difficoltà ad applicare il metodo in questo ambito. Lo stesso discorso vale anche per il metodo con due viste. Ulteriori Sviluppi L’obiettivo della tesi di preparare una pipeline completa di stima del moto proprio di una videocamera omnidirezionale è stato affrontato utilizzando un approccio modulare. In questo modo è stato possibile combinare vari tasselli, lasciando spazio a miglioramenti specifici. Il calcolo dei punti notevoli delle immagini, il recupero delle corrispondenze, la trasformazione delle coordinate da equirettangolari a sferiche, i metodi di stima della geometria epipolare sono operazioni indipendenti, che possono essere sostituite con metodi alternativi. Indichiamo alcune direzioni che potrebbero essere interessanti per un miglioramento della pipeline. La fase di estrazione dei punti notevoli può essere oggetto di miglioramento sia scegliendo diversi descrittori che agendo su sezioni rettificate dell’immagine, come prospettato nella sezione 2.2 a pagina 36. Per quanto riguarda il calcolo dei punti notevoli, potrebbero essere utilizzate differenti metodi per l’estrazione dei corner in modo da favorire l’emergere di punti ad angolo retto, molto comuni in ambito urbano: l’algoritmo proposto utilizza differenze di gaussiane (DoG), ma potrebbe essere interessante sperimentare un metodo di tipo Harris Corner Detector ([7]). Una seconda possibilità è di cambiare descrittore, ad esempio puntando su descrittori invarianti per affinità o distorsioni prospettiche (si veda ad esempio [3]). Per migliorare le prestazioni in termini di velocità, oltre a un’implementazione dell’algoritmo in codice compilabile, si può agire sul collo di bottiglia, che per l’algoritmo è la fase di eliminazione degli outlier tramite RANSAC. Esistono evoluzioni di questo algoritmo che permettono di rendere più rapido il processo di eliminazione degli outlier, come il pre-emptive RANSAC proposto in [15]. Il metodo proposto è stato pensato per essere corredato di informazioni GPS o di odometria meccanica, ovvero le informazioni di spostamento dell’automobile. La scala della ricostruzione viene infatti fissata dalla baseline imposta tra le prime due sfere. Una stima iniziale errata della scala avrebbe quindi ripercussioni su tutta la catena di sfere ricostruita. Per evitare questo problema si può applicare un meccanismo di feedback costante tra le informazioni GPS e la pipeline di ricostruzione, in modo che la precisione della scala migliori con l’aumentare del numero di immagini utilizzate. 78 Appendice A Codice Matlab A.1 Stima del moto con tre viste su immagini reali %Uses google street view images to compute SfM %(using trifocal tensor) %import image data clear all; run(’../vlfeat-0.9.13/toolbox/vl_setup.m’); %precomputed SIFT image points and matches load(’gsv/imagedata.mat’); %config variables baseline = 10; %user assigned scale factor numSph = 9; err = 0.004; %for RANSAC error %cumulative values cumR = eye(3); cumt = zeros(3,1); for k = 1:numSph-2 fprintf(’\n Sphere %d’,k) matches12 = s{k}.matches_with_next; matches23 = s{k+1}.matches_with_next; %join of the matches sets %1) find the points of interest of 79 %the im2 which appears in both match sets [matches,ind12,ind23] = intersect(matches12(2,:),matches23(1,:)); %2) creates new triple match set matches=[matches12(1,ind12);matches12(2,ind12);matches23(2,ind23)]; fprintf(’, %d matches.\n’,length(matches)) %copy x1 x2 x3 matching points for ease of use = s{k}.x(:,matches(1,:)); = s{k+1}.x(:,matches(2,:)); = s{k+2}.x(:,matches(3,:)); %calls RANSAC routine on the %trifocal tensor estimation function [T,R21,t21,R31,t31,inliers] = fg_ransac_triftensor(x1,x2,x3,err); %first 3 spheres if (k==1) t21 = t21*baseline; %fixing scale t31 = t31*baseline; %save computed values s{1}.R=eye(3); s{1}.t=zeros(3,1); s{2}.R = R21; s{2}.t = t21; s{2}.dt = t21; s{1}.T = T; s{3}.R = R31; s{3}.t = t31; %triangulate points: mean of the 2 triangulations C1 = [0;0;0]; C2 = s{2}.t; C3 = s{3}.t; Xest = zeros(size(s{1}.x)); for i=inliers X1 = s{1}.x(:,i); X2 = s{2}.t + s{2}.R \ s{2}.x(:,i); X3 = s{3}.t + s{3}.R \ s{3}.x(:,i); %triangulate with spheres s1-s2, s1-s3 (widest baseline) Xest(:,i) = 0.5*(fg_midpoint_triangulation(C1,X1,C2,X2)... + fg_midpoint_triangulation(C1,X1,C3,X3)); end s{1}.X = Xest; 80 s{1}.inliers = inliers; %update cum values cumR = s{2}.R; cumt = s{2}.t; else %general case: k=2,3,4,5.. %since ||t21||=1 this is the scale scale = norm(s{k+1}.t - s{k}.t); t21 = t21*scale; t31 = t31*scale; %triangulate points in the (k-1)-th coord system (which is %the one which has cumR, cumt from the global coord system) %using mean of the 2 triangulations C1 = zeros(3,1); %s{k-1} sphere C2 = t21; C3 = t31; Xest = zeros(size(s{k}.x)); for i=inliers X1 = s{k}.x(:,i); X2 = t21 + R21 \ s{k+1}.x(:,i); X3 = t31 + R31 \ s{k+2}.x(:,i); %triangulate with spheres s1-s2, s1-s3 (widest baseline) %note: Xest are in the k-th coord system Xest(:,i) = 0.5*(fg_midpoint_triangulation(C1,X1,C2,X2)... + fg_midpoint_triangulation(C1,X1,C3,X3)); end %convert 3d points to global coord system for i = inliers Xest(:,i) = cumt + cumR \ Xest(:,i); %transform to global end %aggiorno valori k+1 s{k+2}.t = cumt + cumR \ t31; s{k+2}.R = R31 * cumR; %update cum values cumt = s{k+1}.t; cumR = s{k+1}.R; s{k}.X = Xest; s{k}.T = T; s{k}.inliers = inliers; end end 81 %print results figure; hold on; err = 0; estold=zeros(3,1); for i=2:numSph est = s{i}.t; quiver(estold(1),estold(2),est(1)-estold(1),est(2)-estold(2),’r’); plot(est(1),est(2),’*r’); legend(’Estimated’); axis(’equal’); estold=est; end plot(0,0,’*b’); A.2 Stima del tensore trifocale e di R, t function [Tfin,R21,t21,R31,t31] = fg_linear_trifocal_tensor(x1,x2,x3) %FG_LINEAR_TRIFOCAL_TENSOR Computes trifocal tensor using linear algorithm % x1: 3xn vector (x,y,z) with image coordinates from first camera % x2: 3xn vector with image coordinates from second camera % x3: 3xn vector with image coordinates from third camera % % Note: the output has norm(t21)=1, and norm(t31) consistent with that. A = buildAmatrix(x1,x2,x3); [ , ,V] = svd(A); t0 = V(:,27); %solution is vector corresp. to smallest singular value T0 = permute( reshape(t0,3,3,3) , [2 1 3] ); %reorder % Ensure that that trifocal tensor is geometrically valid by retrieving % its epipoles and performing algebraic minimization [e2,e3] = e_from_T(T0); %levenberg marquardt optimization e0 = [e2;e3]; [e,Ssq,CNT] = LMFsolve(@(e) objective_function(e,A),e0,’XTol’,1e-10); Ssq; CNT change_from_x0 = norm(e-e0); 82 e2 = e(1:3); e3 = e(4:6); E = E_from_ee(e2,e3); t = minAlg_5p6(A,E); Tfin = permute( reshape(t,3,3,3) , [2 1 3] ); %extract essential matrices E21 = fg_skew(e2)*[Tfin(:,:,1)*e3,Tfin(:,:,2)*e3,Tfin(:,:,3)*e3]; E31 = fg_skew(e3)*[Tfin(:,:,1)’*e2,Tfin(:,:,2)’*e2,Tfin(:,:,3)’*e2]; %R,t retrieval %second camera (E21): [U,S,V] = svd(E21); W = [0 -1 0; 1 0 0; 0 0 1]; s2 = (S(1,1)+S(2,2))*0.5; %scale information of sphere 2 %rotation matrices R1 = U*W*V’; R1 = R1/det(R1); %normalize to have det(R) = 1 R2 = U*W’*V’; R2 = R2/det(R2); %extraction of baseline t t1 = V*W*diag([1 1 0])*V’; t1 = [t1(3,2) t1(1,3) t1(2,1)]; t_est = t1’*10; %initialize R=eye(3); t = zeros(3,1); %reconstruct a 3d point to choose the right R,t: the %Xest point should be in front of both cameras a1 = [0;0;0]; %1st camera centre a2 = x1(:,1); %1st camera point (already global system) %with R1,t b1 = t_est; %2nd camera centre b2 = t_est + R1\x2(:,1);%2nd camera image point, in global coord Xest = fg_midpoint_triangulation(a1,a2,b1,b2); 83 %test: Xest is in front of both cameras ’R1,t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R1; t = t_est; end %with R1,-t b1 = -t_est; b2 = -t_est + R1\x2(:,1); Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R1,-t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R1; t = -t_est; end %R2,t b1 = t_est; b2 = t_est + R2\x2(:,1); Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R2,t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R2; t = t_est; end %R2,-t b1 = -t_est; b2 = -t_est + R2\x2(:,1); Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R2,-t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R2; t = -t_est; end 84 R21 = R; t21 = t; X21 = zeros(3,1); a1=zeros(3,1); b1 = t21; for i=1:length(x1) a2 = x1(:,i); b2 = t21 + R21\x2(:,i); X21 = X21 + fg_midpoint_triangulation(a1,a2,b1,b2); end X21 = X21 / length(x1); %third camera: [U,S,V] = svd(E31); s3 = (S(1,1)+S(2,2))*0.5; %scale information of sphere 3 W = [0 -1 0; 1 0 0; 0 0 1]; %rotation matrices R1 = U*W*V’; R1 = R1/det(R1); %normalize to have det(R) = 1 R2 = U*W’*V’; R2 = R2/det(R2); %extraction of baseline t t1 = V*W*diag([s2/s3 s2/s3 0])*V’; t1 = [t1(3,2) t1(1,3) t1(2,1)]; t_est = t1’*10; %initialize R=eye(3); t = zeros(3,1); %reconstruct a 3d point to choose the right R,t: the Xest %point should be in front of both cameras a1 = [0;0;0]; %1st camera centre a2 = x1(:,1); %1st camera point (already global system) %with R1,t b1 = t_est; %2nd camera centre b2 = t_est + R1\x3(:,1);%2nd camera image point in global coord Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R1,t’; angle1 = dot(a2-a1,Xest-a2); 85 angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R1; t = t_est; end %with R1,-t b1 = -t_est; b2 = -t_est + R1\x3(:,1); Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R1,-t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R1; t = -t_est; end %R2,t b1 = t_est; b2 = t_est + R2\x3(:,1); Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R2,t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R2; t = t_est; end %R2,-t b1 = -t_est; b2 = -t_est + R2\x3(:,1); Xest = fg_midpoint_triangulation(a1,a2,b1,b2); %test: Xest is in front of both cameras ’R2,-t’; angle1 = dot(a2-a1,Xest-a2); angle2 = dot(b2-b1,Xest-b2); if (angle1>0 && angle2>0) R = R2; t = -t_est; end R31 = R; t31 = t; 86 t21 = t21 * 0.1; t31 = t31 * 0.1; end function A = buildAmatrix (x1, x2, x3) %build the A matrix for linear estimation of the trifocal tensor zero = zeros(length(x1),1); for k=1:3 %da ridurre a funzione % Build the k-th A matrix to get T_k A{k} = [ %1st equation (-x1(k,:).*x2(3,:).*x3(3,:))’, zero, ... (x1(k,:).*x2(3,:).*x3(1,:))’, zero, zero, zero,... (x1(k,:).*x2(1,:).*x3(3,:))’, zero,... (-x1(k,:).*x2(1,:).*x3(1,:))’ ; ... %2nd equation zero, (-x1(k,:).*x2(3,:).*x3(3,:))’,... (x1(k,:).*x2(3,:).*x3(2,:))’, zero, zero, zero, zero,... (x1(k,:).*x2(1,:).*x3(3,:))’, ... (-x1(k,:).*x2(1,:).*x3(2,:))’; ... %3rd equation zero, zero, zero, (-x1(k,:).*x2(3,:).*x3(3,:))’,... zero, (x1(k,:).*x2(3,:).*x3(1,:))’, ... (x1(k,:).*x2(2,:).*x3(3,:))’, zero, ... (-x1(k,:).*x2(2,:).*x3(1,:))’; ... %4th equation zero, zero, zero, zero, (-x1(k,:).*x2(3,:).*x3(3,:))’,... (x1(k,:).*x2(3,:).*x3(2,:))’, zero, ... (x1(k,:).*x2(2,:).*x3(3,:))’, (-x1(k,:).*x2(2,:).*x3(2,:))’; ]; end A = [A{1}, A{2}, A{3}]; end %––––––––––––––––––––––––––––––––––––– % Function to build the relationship matrix which represent % T_iˆjk = a_iˆj * b_4ˆk - a_4ˆj * b_iˆk % as t = E * aa, where aa = [a’(:) ; b’(:)], (note: for representation only) function E = E_from_ee(e2,e3) e2Block = [ diag([-e2(1)*ones(1,3)]) diag([-e2(2)*ones(1,3)]) 87 diag([-e2(3)*ones(1,3)])]; e3Block = zeros(9,3); e3Block(1:3,1) = e3; e3Block(4:6,2) = e3; e3Block(7:9,3) = e3; E = zeros(27,18); E( 1: 9,[1:3,10:12]) = [e3Block e2Block]; E(10:18,[4:6,13:15]) = [e3Block e2Block]; E(19:27,[7:9,16:18]) = [e3Block e2Block]; end function F = objective_function(e,A) %extract e2, e3 e2 = e(1:3); e3 = e(4:6); %compute E matrix E = E_from_ee(e2,e3); %solve minimization problem (t=Ea) t = minAlg_5p6(A,E); %compute error vector err=AEa=At F = A*t; end 88 Ringraziamenti Grazie è una parola che andrebbe detta molto, molto più spesso. Purtroppo sono caratterialmente un po’ asciutto, per cui approfitto di queste righe per riconoscere i miei debiti francamente. Ciò che sono e ho realizzato non è infatti che un debito, cosa di cui sono perfettamente consapevole: niente di quello che ho e sono è meritato. Tutto è grazia. Ringrazio innanzitutto Marco ed Emanuele, che mi hanno seguito in questa avventura con tanta pazienza per le mie sparizioni e solidarietà per il mio percorso di vita, così ricco in questi ultimi mesi. Non solo docenti ma compagni di strada. Ringrazio il noster Politeknik, da cui sembra che stia uscendo, per quanto bene mi ha formato. Se Dio vuole, in questi cinque anni son diventato ingegnere senza perdere del tutto l’amore per ciò che è umano. Ringrazio i miei compagni di corso più vicini, i survivors delle matricole classe 2006: Ale, Davide, Francesco, Federico, Filippo. Compagni di cammino in molte occasioni: di questi anni ricorderò soprattutto i progetti fatti insieme per gli esami, fatti di ore di lavoro collaborativo, di idee cestinate e caffé disgustosi, di corse contro il tempo e di belle soddisfazioni. Ringrazio l’AC e la FUCI, intensi ambiti di impegno e crescita (e di utilizzo del tempo libero!), che così tanto hanno contribuito a formare quello che sono. Dato che sono nettamente di parte, e che ormai son vecio, posso aggiungere che della FUCI, al di là degli incarichi o delle riunioni, ricordo tutti i volti fucini (perché coi nomi si sa che incespico), volti gioiosi e limpidi e appassionati, capaci di speranza. I nomi sarebbero troppi da ricordare, vi ringrazio tutti, da quelli che mi hanno visto entrare al primo anno quella sera a Lodi in cui si parlava di felicità, a quelli che ho abbracciato al Congresso a Reggio Calabria col magone che mi bloccava le parole. Ringrazio la mitica compagnia d’amici che siamo: colorita, franca, allegra, generosa. Cinque anni e mezzo fa non pensavo che potesse esistere una comunità simile, e invece ho avuto la grazia di trovarmici dentro. Grazie per tutto. Grazie anche ai “vecchi amici”: che bello che il nostro legame abbia saputo superare il trauma da fine liceo, e che stia diventando più saldo col tempo. 89 Ringrazio la famiglia allargata, nonni zii zie e cugini vari, per la bella esperienza di comunità che anche qui trovo. Siamo in tanti e pure riusciamo a dire la parola “noi” in modo vero. Oggi metto un piede nel mondo con una sicurezza che viene anche dalla solidità della nostra bella esperienza di famiglia. Un grazie particolare per quanto mi avete dato va a Luca e a Gianfra, e un pensiero speciale, quotidiano, a Stefano e a Matteo. Grazie anche a Moni, sorella di vita più che cugina. Non finirò mai di ringraziare la famiglia ristretta, vero crogiuolo: è qui che si sta gomito a gomito e si imparano e vivono in profondità le relazioni. Mamma, Papà, Ale, Simo: so che non potrò mai restituire quanto ricevuto; proverò a trasmetterlo al mondo. Rimangono i due grazie più grandi, come sempre alla fine. A Dany, tu che sei la donna della mia vita, grazie per tutto quanto è stato e per quanto sarà (e so che sarà bello). A Dio, a cui devo tutto, grazie di cuore: non meritavo niente e ho avuto tutto. Ricordamelo ogni giorno e aiutami a spandere amore in questo bel mondo. 90 Bibliografia [1] Herbert Bay, Tinne Tuytelaars, and Luc Van Gool. Surf: Speeded up robust features. 2006. [2] Peng Chang and Martial Hebert. Omni-directional structure from motion. Proceedings of the IEEE Workshop on Omnidirectional Vision, pages 127– 133, 2000. [3] Liang Cheng. Robust affine invariant feature extraction for image matching. Geoscience and Remote Sensing Letters, IEEE, 5:246 – 250, 2008. [4] Martin A. Fischler and Robert C. Bolles. Random sample consensus: A paradigm for model fitting with applications to image analysis and automated cartography. Comm. of the ACM 24, 6:381–395, 1981. [5] Jun Fujiki, Akihiko Torii, and Shotaro Akaho. Epipolar geometry via rectification of spherical images. MIRAGE 2007, pages 461–471, 2007. [6] Joshua Gluckman and Shree Nayar. Ego-motion and omnidirectional cameras. Sixth International Conference on Computer Vision, pages 999–1005, 1998. [7] C. Harris and M. Stephens. A combined corner and edge detector. Proceedings of the 4th Alvey Vision Conference, pages 147–151, 1988. [8] Richard Hartley and Andrew Zisserman. Multiple View Geometry in computer vision. Cambridge University Press, 2000. [9] http://maps.google.it/intl/it/help/maps/streetview/. [10] http://www.astute project.eu/. [11] Fredrik Kahl. Multiple view geometry and the l∞ norm. Proceedings of the tenth IEEE international Conference on Computer Vision, 2005. 91 [12] David Lowe. Distinctive image features from scale-invariant keypoints. International Journal of Computer Vision, 2004. [13] Branislav Micusik. Two-View Geometry of Omnidirectional Cameras. PhD thesis, Faculty of the Electrical Engineering, Czech Technical University in Prague, 2004. [14] Branislav Micusik, Daniel Martinec, and Tomas Pajdla. 3d metric reconstruction from uncalibrated omnidirectional images. 2004. [15] David Nister. Preemptive ransac for live structure and motion estimation. Ninth IEEE International Conference on Computer Vision, 6:199 – 206, 2003. [16] Alfio Quarteroni, Riccardo Sacco, and Fausto Saleri. Numerica. Springer, 2008. Matematica [17] Tomas Svoboda and Tomas Pajdla. Epipolar geometry for central catadioptric cameras. International Journal of Computer Vision, 1:23–27, 2002. [18] Tomas Svoboda, Tomas Pajdla, and Vaclav Hlavac. Epipolar geometry for panoramic cameras. 1998. [19] Akihiko Torii, Michal Havlena, and Tomas Pajdla. From google street view to 3d city models. IEEE 12th International Conference on Computer Vision Workshops, ICCV Workshops, 2009. [20] Akihiko Torii, Atsushi Imiya, and Naoya Ohnishi. Two- and three- view geometry for spherical cameras. [21] Zhengoyu Zhang. Determining the epipolar geometry and its uncertainty: A review. 1996. 92