2013-10-06

Spike : Laser accurate measurement and modelling on Smartphones



Immaginate: un telefonino con un misuratore laser.  Potreste misurare gli oggetti che guardate.  Questo è ciò che vogliono realizzare con il progetto "Spike".



http://www.kickstarter.com/projects/ikegps/spike-laser-accurate-measurement-and-modelling-on



Una domanda mi sorge spontanea: quale accuratezza ?

Un'altra domanda: considerando la SfM,  che estrae le dimensioni da una serie di foto, Spike può essere considerato un concorrente, oppure un complemento ?

"Ai posteri l'ardua sentenza".   Staremo a vedere (e a misurare) ...   :)   Intanto, vediamoci i suoi dettagli tecnici, in questo video:







Saluti

BobMaX

2013-09-21

GEarthView plugin per QGis

E' stato rilasciato il plugin GEarthView per QGis, che permette di visualizzare istantaneamente in Google Earth la parte di territorio che sta mostrando QGis.

Funziona anche sulla nuova versione di QGis 2.0.1.

http://plugins.qgis.org/plugins/gearthview/



Buon uso a tutti

BobMaX


Link Utili:

Un tutorial in italiano su GEarthView plugin

2013-02-11

VTP - Progetto Cles

 In questa parte vediamo come creare un progetto VTP e come aggiungerlo alla lista dei progetti di Enviro.

Siamo nella cittadina di Cles, nei pressi di Bolzano, e abbiamo selezionato un'area corrispndente al centro storico.  Vediamo la zona, inquadrata tramite QuantumGIS:



Abbiamo usato il plugin "OpenLayers" per QGis, che permette di visualizzare uno dei servizi cartografici web (Bing Maps, Google Maps, OpenStreetMap ecc.) come sfondo della mappa 2D.

Vediamo un dettaglio della zona di Cles, posto sul lago di Santa Giustina.



Tramite il servizio di OpenStreetMap, otteniamo i dati vettoriali della zona, comprensivi di assi stradali, edifici, aree verdi, linee elettriche e altro.  Nel campo di ricerca scriviamo "Cles" e verremo portati sulla mappa della zona.  Scegliamo l'opzione "Esporta", definiamo l'area di interesse e "Dati XML OpenStreetMap" come formato di uscita.   Premiamo il bottone "Esporta", e dopo qualche tempo ci verrà inviato un file .osm  corrispondente ai dati vettoriali di OpenStreetMap, la mappa libera del mondo.


OpenStreetMap.org  per  scaricare i dati in formato .osm

 A questo punto, trasciniamo il file .osm  all'interno della finestra di VTBuilder, di "Virtual Terrain Project".


VTBuilder provvede a scomporre il file .osm  e separa gli elementi per tipologia, raggruppandoli nei livelli "Strutture" (ovvero edifici) e "Strade".   I due nuovi livelli possono essere a questo punto salvati su disco, separatamente, nei formati  VTST (strutture) e RMF (strade) di  Virtual Terrain Project.

Passiamo ora a definire una superficie che dovrà rappresentare il terreno.  Per il momento, non avendo ancora a disposizione l'effettiva orografia del luogo, definiamo una zona piatta.  Abbiamo già visto in un passato tutorial su VTP come è possibile creare un terreno piatto.


Lanciamo ora Enviro e andiamo a creare la struttura delle cartelle di progetto.  Nel pannello di "Avvio" di Enviro premiamo il bottone "Gestione Terreno", e nell'omonimo pannello premiamo il bottone "Aggiungi Percorso", intendendo con questo la cartella in cui vogliamo inserire i nostri dati.  Chiamiamo "Data115"  la cartella che conterrà i dati del progetto VTP di Cles.


  Aggiungi il Percorso del Progetto VTP di Cles


 Quando premiamo il bottone "Selezione cartella", Enviro andrà a creare una serie di sotto-cartelle:

BuildingData\
BuildingModels\
Elevation\
GeoSpecific\
Locations\
PlantData\
RoadData\
Terrains\
In queste cartelle andiamo a copiare i nostri dati relativi a Cles, quelli vettoriali (strade, edifici e livelli "astratti", cioè confini in formato SHP ), quelli  raster ( le ortofoto che verranno usate come texture del terreno ), e quelli di elevazione, in formato BT ( VTP Binary Terrain ) o ITF ( VTP Tin ).
Per rendervi la vita più facile, abbiamo predisposto dei dati di esempio, che potete trovare a questo link:

https://docs.google.com/file/d/0B61MnFr3hr6mYVhWenNtMTNZRUk/edit?usp=sharing

Scaricate il file ZIP del link, estraete la directory "Data115" contenuta in esso, e spostatela sotto la vostra cartella VTP  ( ad esempio  C:\Programmi|VTP\ ), e poi selezionate il percorso, esattamente come abbiamo visto sopra, dal pannello "Avvio" di Enviro.

Selezionata la cartella "Data115" vi troverete un nuovo progetto "Cles_OSM" nella lista dei progetti di Enviro. 

A questo punto, selezionate il progetto "Cles_OSM", e premete OK del pannello "Avvio" di Enviro.

Vedrete qualcosa di simile a questo:

Cles in Enviro

Il modello 3D della chiesa di Cles è stato realizzato da Antonello Buccella, un bravissimo modellatore, specializzato in rilevamenti architettonici e ricostruzioni storiche, di cui ci siamo occupati più volte in questo blog.  Ringraziamo Antonello per la sua disponibilità (e per la sua bravura :).

Buon divertimento con il progetto di Cles.

Prossimamente vedremo come migliorare il modello del terreno, aggiungendo i dati del DTM di origine Lidar, che vengono messi a disposizione in rete.

Vedremo anche come inserire le altezze reali degli edifici, che in questo caso non erano presenti nei dati originali di OpenStreetMap.


A presto
BobMaX


2013-02-10

VTP - versione MacOSX

Finalmente, dopo praticamente un anno di attesa, il team di VTP ( Virtual Terrain Project - VTerrain.org )  ha prodotto la versione MacOSX del loro software open source di trattamento e visualizzazione in tempo reale dei dati territoriali.

Parleremo più diffusamente di questa versione di VTP per Mac, e di come fare per installarlo sulla propria macchina Macintosh.

Per il momento, mostriamo alcuni immagini, catturate su un Mac Mini 64 bit e 4 giga Ram,  in cui sta "girando"  VTP.



Primo run di VTBuilder su MacOSX


Primo run di Enviro su MacOSX



Enviro Mac : progetto Gaeta



A presto altre immagini   :)



BobMaX

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