2012-12-26

SfM - Structure from Motion (seconda parte)

Prima della SfM

Dai primi algoritmi di ricostruzione fotogrammetrica, alla SfM il passo è stato notevole, specie in termini di riduzione della “fatica umana” per la collimazione dei punti.
La fotogrammetria aerea e quella terrestre erano basate sul concetto di stereoscopia. Le foto prese da un aereo venivano considerate due a due, ricostruendo, con dei punti noti sul terreno, il modello stereoscopico, che veniva guardato con uno “stereorestitutore” da un foto-interprete, che tramite un pantografo disegnava le curve di livello, spostando una marca visiva sul modello ottico del terreno.
Successivamente, si è passati da un modello stereoscopico ad un modello prospettico, che permetteva di collimare anche immagini liberamente prese nello spazio.
Dai primi esperimenti prospettici, che sostanzialmente si limitavano a ricostruire il “triangolo delle fughe” e forme scatolari, alla “Multiple View Geometry” (R.Harley e A.Zisserman), si è andato sempre perfezionando un nuovo metodo di rilevamento tridimensionale, che ha portato alla SfM.

Se avete voglia di (tentare di) capire quali sono le implicazioni matematiche (nascoste) dietro gli algoritmi della geometria multipolare, potete guardare il divertente (ed istruttivo) filmato (musicale) di questa pagina:


Anche interessante è questo documento, che descrive la storia (ed il futuro :) della restituzione tridimensionale:


Implementazioni della SfM

PhotoTour

La prima implementazione della tecnica SfM è stata sviluppata nel laboratorio da Noah Snavely e altri (Steve Seitz, Kevin Chiu, Andy Hou del “CSE Graphics and Imaging Lab (GRAIL)” dell'Università di Washington; Richard Szeliski - Interactive Visual Media Group , Microsoft Research).

Il progetto, finanziato da Microsoft, permetteva di posizionare spazialmente le foto turistiche di monumenti scattate dagli utenti, liberamente disponibili in rete.
http://research.microsoft.com/en-us/um/redmond/groups/ivm/PhotoTours/

Successivamente, lo stesso Noah Snavely ha reso disponibile il codice sorgente di “Bundler”, nel sito “PhotoTour”:





Bundler ricostruisce la posizione delle fotocamere e la geometria 3D, in maniera incrementale, incrociando piccoli gruppi di immagini per volta, usando una versione modificata del pacchetto “Sparse Bundle Adjustment” (SBA) di Lourakis e Argyros,

http://www.ics.forth.gr/~lourakis/sba/

Bundler è un porting in linguaggio C++ delle funzioni disponibili fino ad allora soltanto in fortran o in matlab. L'utilizzo del C++ permetteva di far uscire la tecnica SfM dai laboratori e dallo sperimentale, rendendola utilizzabile ed integrabile per un uso professionale.

Un esempio di applicazione di Bundler è stato il progetto “Building Rome in a Day”, in cui si è dimostrato come, ottenendo da Flickr le immagini legate al termine “Rome”, si riesce a ricostruire la forma 3D dei monumenti.

Nel sito http://grail.cs.washington.edu/projects/rome/ vengono mostrati esempi applicati della tecnica SfM tramite Bundler:

Fontana di Trevi:

Basilica di San Pietro:


Roma centro:

Troviamo anche altri esempi, relativi a Venezia

Canal Grande di Venezia:

Piazza S.Marco di Venezia:


Il risultato del processamento tramite Bundler è costituito da una nuvola di punti 3D, con le posizioni dei punti di vista e con i rispettivi assetti della fotocamera.



Python Photogrammetry Toolbox

Operativamente parlando, Bundler è piuttosto ostico da utilizzare, essendo un eseguibile da chiamare con alcuni parametri, poco mnemonici.

Fortunatamente, vengono in aiuto alcune interfacce grafiche di supporto.


Una di queste interfacce è “Python Photogrammetry Toolbox”, che usa l'implementazione “osm-bundler” di Pierre Moulon.

Questo toolbox, chiamato brevemente “PPT” è essenzialmente un pannello, suddiviso in varie schede, ognuna relativa ad una fase di lavorazione del gruppo di foto.
La prima operazione è quella della selezione del percorso sul disco (“path”) contenente le immagini fotografiche in formato JPG.
Ognuna delle immagini ha al suo interno un gruppo di informazioni, dette “Exif”, sul tipo di fotocamera, la focale, l'uso di flash, ecc.
PPT” utilizza queste informazioni, specialmente quella della focale usata nello scatto, per effettuare i calcoli geometrici.
Una informazione anche necessaria, ma purtroppo non presente nell'exif è quella della grandezza del sensore digitale, detto CCD, della macchina.
Per questo “PPT” mantiene un archivio di parametri caratteristici delle fotocamere che ha incontrato fino a quel momento.
Come prima operazione, quindi, occorre controllare se la camera che si sta utilizzando è “conosciuta” dal sistema. Per fare questo, si utilizza la scheda “Check Camera Database”, indicando dove si trovano le immagini.
Se sconosciuta, sulla finestra del terminale comparirà la richiesta del valore della larghezza in millimetri del sensore.
Questo valore andrà ricercato in internet, consultando le varie banche dati tecniche delle fotocamere.
Il database di PPT è costituito da una tabella, dove ad ogni riga corrisponde un determinato modello di macchina fotografica.


Il valore di “ccd_width”, espresso in millimetri, viene utilizzato dal sistema automatico di collimazione, insieme alla focale letta dall'immagine, per calcolare la forma del fotogramma.

Se il valore del ccd è noto, si può effettuare la prima fase della collimazione, tramite “Run Bundler”.

Il programma crea una directory temporanea, il cui path viene riportato sul terminale, e andrà a scrivere una serie di file, che vedremo nella prossima parte di questo articolo.


BobMaX


Nessun commento: