2012-12-28

SfM – Structure from Motion (terza parte)


In questa puntata, pubblichiamo un tutorial operativo, creato per noi da Cicero Moraes, che ci illustra come utilizzare l'interfaccia PPT Python Photogrammetry Toolbox, di Luca e Alessandro Bezzi, su piattaforma Linux ArcheOS, e software “osm-bundler” di Pierre Moulon.


Tutorial Python Photogrammetry Toolbox

di Cicero Moraes


Prima di tutto è necessario effettuare il download del Python Photogrammetry Toolbox da qui: http://www.arc-team.homelinux.com/arcteam/ppt.php

 Dopo il download e unzip dovete modificare il file ppt_gui_start , inserendo il corretto percorso del programma (evidenziato in arancione).






 Ora, se siete sotto Linux è solo necessario eseguire lo script appena modificato:
$ ./ppt_gui_start



Una volta che il programma è partito, cliccate su “Check Camera Database”.



Con il Terminale Terminal/Prompt al lato, cliccate su “Select Photos Path”.



 Scegliete il percorso e poi cliccate su “Open”.



Cliccate su “Run” ed aspettate un poco.



 Se tutto è OK, vedrete un messaggio sul Terminale:

Camera is already inserted into the database

Altrimenti, potete seguire questo videotutorial:





Adesso, fate una copia del percorso.



1) Andate su “Run Bundler”.
2) Incollate su “Select Photos Path”.



 1) Per ottenere una buona qualità di scansione, cliccate su “Scale Photos with a Scaling Factor”; per default il valore sarà impostato a 1. Se avete un computer con minore potenza di processamento, non eseguite questo punto (1), e andate direttamente al punto seguente (2).

2) Cliccate su “Run”.



 Aspettate alcuni minuti, ed il programma risolverà la nuvola di punti.



Voi saprete che la soluzione è pronta quando nel Terminale sarà apparso il messaggio:

Finished! See the results in the '/tmp/DIRECTORY' directory

In questo caso il messaggio è stato:

Finished! See the results in the '/tmp/osm-bundler-ibBZV9' directory

Il file manager Nautilus sarà aperto, mostrando la directory con i file.




NOTA.: Se siete realmente curiosi, potete aprire la directory Bundle e vedere i file .PLY con Meshlab. Ma è meglio aspettare, perchè queste nuvole di punti non sono ancora buone ad ottenere una efficace ricostruzione/conversione in una superficie mesh.



 Andate sul Terminale, dove è apparso il percorso con la soluzione, e fate una copia di questo.



1) Andate sul “or run PMVS without CMVS”
2) Cliccate in “Use directly PMVS2 (without CMVS)”



1) Incollate il percorso in “Select Bundler Output Path”
2) Cliccate su “Run



 Quando il processo sarà terminato, vedrete una nuova directory chiamata “pmvs”.



Ora, dovrete entrare in “models” e cercare un file chiamato “pmvs_options.txt.ply”. Se tutto è andato bene, siamo nella fase finale della soluzione.

NOTA: E' una buona idea fare una copia della directory osm-* mettendola sotto la vostra home, perchè essa verrà persa al prossimo boot della macchina, dato che si tratta di una directory /tmp .




Quando aprirete il file “pmvs_options.txt.ply” in Meshlab vedrete che la nuvola di punti è realmente densa, ora, con una qualità paragonabile ad una foto.


Solo apparenza di una foto o di una superficie mesh...   notate che è selezionata attualmente la modalità vista per “Points”.



Se andate a selezionare “Flat Lines” ad esempio, le nuvole di punti scompariranno... perchè, ovviamente... si tratta di una nuvola di punti.

 Cliccate ancora su “Points” per vedere le nuvole di punti e:

1) Cliccate su “Show Layer Dialog” (A)

2) Così, apparirà un nuovo elemento nell'interfaccia con il nome dell'oggetto, in questo caso “pmvs_options.txt.ply” (B)





Andate su “Filters” -> “Remeshing, simplification and reconstruction” -> “Surface Reconstruction: Poisson”





 Apparirà una nuova finestra con i valori di default di “Octree Depth” e “Solver Divide”



1) Cambiate i valori su:
Octree Depth: 11
Solver Divide: 9

2) Cliccate su “Apply”

NOTA: Questi valori possono provocare un crash del programma se il vostro computer non ha sufficiente potenza di elaborazione.


 Se tutto OK, noterete le seguenti due cose:

1) Molti nuovi punti saranno stati scritti sopra la ricostruzione.
2) Un nuovo layer chiamato “1 Poisson mesh *”, in alto a destra.





Ma, quando torniamo su “Flat Line” per vedere la superficie mesh, compariranno strani elementi. In questo caso, l'algoritmo Poison ha creato una specie di sfera per ricostruire la mesh.



Possiamo vedere meglio questa sfera quando ci allontaniamo in orbita intorno al modello.



 Così, per rendere visibile la porta, noi dobbiamo:

1) Tornare sulla vista “Points” (A)
2) Ruotare la scena per vedere il lato della porta.
3) Cliccare su “Select faces in a rectangular region”


 E poi:

1) Creare una finestra di selezione sulla regione che deve essere cancellata (1A-2A)
2) Cliccare su “Delete the current set of selected faces”.



 Ora noi possiamo vedere la superficie mesh nel lato corretto.





Ma, quando cambiamo il tipo di vista su “Smooth”, noi vediamo la mesh senza i colori della nuvola di punti.




Per dipingere la mesh con i colori della nuvola di punti, possiamo andare su:
Filters -> Sampling -> Vertex Attribute Transfer



 Apparirà un nuovo pannello.




Voi dovrete invertire gli oggetti, perchè il “pmvs_options.txt.ply” è la reale mesh sorgente, che sarà la base da dipingere, e la “Poisson mesh” riceverà i colori, sicchè questa è la mesh di destinazione.



Quando cliccherete su “Apply” vedrete immediatamente la mesh colorata, come nell'immagine qui sopra.




 Se volete inviare questa mesh ad altri software, come Blender, potete andare su:

File -> Export Mesh As...




 Scegliete un posto dove salvare il file .PLY .






 Se tutto OK, la mesh potrà essere importata in Blender (o altro software) perfettamente.


I hope it has useful to you.

Cicero Moraes


Cícero Moraes is a 3D self-taught artist and animator. He learned his profession on the internet and is one of the great enthusiasts of Blender in the country. He has written dozens or on-line and printed articles, read in Brazil and the world.‬
Winner of the TVCA Advertising and Video Award in 2006, he was among the finalists of the Cannes Young Lions contest, promoted by YouTube in 2009. He has spoken in a number of informatics events, such as Latinoware (2009 and 2010), XXI Semac (SP), SolivreX (PR), Filsol (GO), II Ermac (MT) e a BlenderPRO (MG e CE).‬
More information on site: ‬www.ciceromoraes.com.br


Ringraziamo Cicero per la collaborazione e per il tutorial.


BobMaX




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


2012-12-23

VTP OSM - VirtualTerrainProject e OpenStreetMap

L'ultima versione, in ordine di tempo, di VTP permette di visualizzare i dati provenienti da OpenStreetMap. 

Riportiamo di seguito l'annuncio inserito da Ben Discoe nella mail-list di VTP:


"Recentemente ho inserito una serie di miglioramenti al modo in cui VTBuilder importa da OpenStreetMap.

Per cominciare, ora possiamo leggere non solo le strutture come le strade, ma anche altri  tag OSM come possiamo. Quindi, dovremmo essere in grado di creare recinzioni, muri, edifici con altezza e stile tetto, oltre a strade con attributi quali asfaltata, e il numero di corsie.

Questo è incorporato nella versione 1.35, caricata di recente, quindi se vi piace OpenStreetMap, fare una prova!




Descriviamo i passi tipici da fare:


2. Cerca un luogo che ti interessa.

Consiglio di scegliere un posto di cui avete già i dati di elevazione.

3. Fate clic su 'Esporta' e scegli 'Dati XML OpenStreetMapcome formato di esportazione 

4. Scegliete la zona (non troppo grande - c'è un limite a una certa dimensione area)

5. Premere il tasto "Esporta", e salvate il file .OSM sul disco

6. Con VTBuilder aperto, trascinate il file .OSM.  Verranno creati due nuovi livelli.

7. Potete ripulire la rete stradale con "Road: Roadmap Clean"

8. Vi consigliamo di utilizzare Layer: Convertire progetto in modo che i nuovi livelli abbiano la CRS stessi l'altitudine (se non lo fanno già).

9. Salvate il vostro  .VTST e  .RMF  come di consueto

10. Portateli in Enviro.

Ecco un esempio di Roberto di una località d'Italia, Gaeta:



http://vterrain.org/Screenshots/2012/gaeta-osm.jpg

Potete rispondere sulla lista:


e inviare le vostre sperimentazioni.
Sono particolarmente interessato a sapere se c'è qualcosa che vi aspettavate da OSM che non viene importato, o non ha importato correttamente. Una cosa interessante di OSM (una forza o una debolezza a seconda di come la si guarda) è che la loro comunità in tutto il mondo utilizza i tag OSM semi-standard in ... diversi modi.  Quindi, possono essere aggiunti vari modi di interpretare i tag OSM come utilizzati.

-Ben"


BobMaX


Link utili:  Vterrain.org
Installer VTP per Windows

2012-12-09

VTP - Virtual Terrain Project versione 1.33

E' stata rilasciata la versione 1.33 di Virtual Terrain Project  !      VTerrain.org


Potete trovare l'installer per Windows  ( XP e 7 )  e le istruzioni dettagliate al seguente link:



Una versione di VTP integrata in Linux ArcheOS potete trovarla integrata nella live iso che trovate a questo link:



Di seguito descriviamo le operazioni da effettuare su Linux ArcheOS per configurare VTP a lavorare sui progetti dell'utenza HOME.

Aprile il terminale e copiare sotto la vostra home il contenuto della directory
/usr/share/archeos/vtp-svn111229/TerrainApps/Data

Creare, sempre sotto la vostra home, una directory  vtp/Data e copiate al suo interno le directory le stesse directory  (in realtà ne servirebbero solo alcune, ma facciamo così per semplificare le cose).

A questo punto lanciate VTBuilder, che trovate sotto il menu "Applicazioni > 3D" di Linux ArcheOS.  
Comparirà la finestra del terminale, con alcuni messaggi, e poi VTBuilder.


Al primo lancio, nel caso non siano visibili elementi nella finestra 2D, abilitate dal menu "View" la "World Map" e "Show UTM Boundaries".

Per visualizzare un territorio di prova, trasciniamo in VTBuilder il file "crater_0513.bt" che troveremo sotto la directory  /home/utente/vtp/Data/Elevation/



Se il territorio non viene visualizzato, ma al suo posto compare solo un rettangolo con delle diagonali, come nell'immagine di seguito, è evidentemente selezionata l'opzione "Show outline only" nel pannello delle "View > Options".  In questo caso, bisogna selezionare, invece, "Artificial color by elevation value".




Passiamo ora ad Enviro.  Lanciamolo attraverso il menu "Applicazioni > 3D" di Linux ArcheOS.




Al primo lancio, la lista dei progetti di Enviro è vuota.  Per inserire il primo progetto, occorre selezionare il bottone "Terrain Manager" e nel pannello premere "Add Path".
Aggiungiamo la directory  vtp/Data   che abbiamo copiato sotto la nostra Home, e premiamo OK.  Ora troveremo (o dovremmo) "Simple Terrain" tra i terreni selezionabili (se ciò non accade, torniamo nel pannello "Terrain Manager", e cancelliamo il primo path "../Data", superfluo).

Selezionando il progetto "Simple Terrain" e premendo OK, si aprirà il pannello "VTP Enviro OSG" e verrà visualizzato il terreno 3D, con cui possiamo interagire.

Bene, VTP ora è funzionante sulla vostra macchina.


BobMaX

2012-12-08

SfM - Rilievo Porta Immacolata Gaeta ( seconda parte )



Nella giornata in cui in Italia si festeggia la ricorrenza "L'Immacolata", pubblichiamo il preliminare del rilievo della Porta dell'Immacolata della chiesa dell'Annunziata di Gaeta, effettuato con tecniche SfM (Structure from Motion) attraverso vari i software disponibili.

Le foto scattate sono state una ventina, con una reflex digitale, per l'esattezza:
Camera: Panasonic Lumix DMC-FZ8   ccd_width: 5.76



Il video mostra il risultato ottenuto con un software commerciale intorno ai duecento euro.  Il livello di dettaglio è incredibilmente alto, tanto da poter essere utilizzato per ottenere sezioni delle modanature.  Rispetto ad un rilievo laser, la tecnica SfM ha una risoluzione sicuramente minore, ma i vantaggi di quest'ultima in termini di velocità, maneggevolezza e minore costo sono vincenti.  Nel rilievo archeologico, architettonico e paesaggistico la tecnologia SfM sarà senz'altro quella maggiormente usata nel prossimo futuro.




Vediamo ora lo stesso rilievo elaborato con un servizio web gratuito, che permette addirittura di stampare in 3D l'oggetto fotografato. Collegandoci al sito Hypr3D, dopo esserci registrati con il nostro indirizzo di posta elettronica, possiamo inviare le nostre foto, e dopo un tempo variabile ci arriverà un messaggio che ci avvertirà che l'elaborazione è stata completata e che i modelli sono a nostra disposizione.


Il sito Hypr3D realizza un modello in bassa ed uno in alta risoluzione. I formati previsti in uscita sono:

- Collada DAE con texture
- PLY di punti
- STL


Il il modello realizzato con Hypr3D è visualizzabile al seguente link: http://www.hypr3d.com/models/50c070b7979a5c000200006b




Confrontando i modelli puntuali realizzati con i due software, in questo caso troviamo risultati simili, nell'esempio della porta che stiamo esaminando, per quanto riguarda l'alta risoluzione (anche se il DAE non riesce ad essere visualizzato da MeshLab su MacOSX).


Abbiamo anche caricato il modello PLY a triangoli su un altro software open source, con l'aiuto di Cicero Moraes, esperto di Blender.  Le capacità di editing del TIN, offerte da Blender, possono permettere una semplificazione della superficie ottenuta dalla SfM.  





Affronteremo prossimamente più nel dettaglio le fasi di lavorazione SfM, con riferimento ai vari parametri modificabili, al loro significato e ai risultati ottenibili.


BobMaX