Ultimo aggiornamento il 27 Agosto 2020 by Giulio Bigliardi
3DF Zephyr è un software di rilievo fotogrammetrico che permette di elaborare un modello tridimensionale partendo da fotografie o video digitali. E’ disponibile in quattro versioni: completa, licenza mensile, Lite e Free, quest’ultima completamente gratuita.
Zephyr FREE permette di elaborare fino a 50 fotografie, un numero sufficiente per rilevare oggetti di piccole e medie dimensioni, anche complessi.
In questo tutorial vedremo come usare Zephyr Free per elaborare un set di immagini digitali di una statua ed estrarre un modello 3D a colori reali e metricamente corretto.
3DF Zephyr FREE per il rilievo fotogrammetrico
Zephyr è un software di fotogrammetria automatica sviluppato dalla società italiana 3D Flow ed è disponibile in versioni diverse: versione completa, licenza mensile, Lite e Free; ciascuna con caratteristiche differenti e delle quali ho già parlato in questo post.
Zephyr Free ha (ovviamente) alcune limitazioni rispetto alle licenze a pagamento, ciò nonostante è un software molto efficiente, semplice da usare e che può essere utilizzato in numerosi contesti per il rilievo fotogrammetrico.
Aspetto non trascurabile, è oggi l’unica soluzione di fotogrammetria automatica completamente gratuita che permette di gestire tutti i passaggi dalle fotografie alla mesh texturizzata (in questo post ho parlato in generale della fotogrammetria automatica e di altre soluzioni software, sia commerciali che open source).
Zephyr Free può essere scaricato qui: https://www.3dflow.net/it/3df-zephyr-free-gratuito/.
I due limiti principali della versione Free, rispetto alle versioni complete del software, sono che possono essere elaborate al massimo 50 fotografie e che non è possibile mettere in scala il modello 3D ottenuto. Tuttavia, vedremo che 50 fotografie sono un numero sufficiente per rilevare oggetti di piccole e medie dimensioni, anche di forme complesse, e vedremo che utilizzando un software esterno gratuito è possibile mettere in scala il modello ottenuto.
Modello 3D di una statua di h. 120 cm elaborato con Zephyr FREE.
L’allineamento delle fotografie
Ho già discusso approfonditamente dei passaggi attraverso i quali i software di fotogrammetria automatica elaborano un modello 3D partendo da immagini digitali; qui mi soffermerò sui comandi di Zephyr Free per compiere l’elaborazione.
Se siete interessati all’argomento, potete anche iscrivervi al mio corso on-line di “Fotogrammetria digitale automatica”.
Innanzitutto, è indispensabile avere a disposizione un buon set di fotografie digitali dell’oggetto che vogliamo ricostruire in 3D. In generale, le fotografie devono essere di qualità, quindi ben illuminate e ben contrastate, e riprendere l’oggetto da più punti di vista, facendo attenzione che tra fotografie adiacenti ci sia una sovrapposizione almeno dell’80%.
La risoluzione delle immagini non deve essere per forza altissima, ad esempio già con immagini a 8 megapixel si lavora bene. La scelta della risoluzione dipende da due fattori: la capacità di calcolo del PC, poiché se si lavora con un PC poco potente sarà molto difficile riuscire ad elaborare 50 immagini ad altissima risoluzione; dipende, inoltre, dalla dimensione del sensore della macchina fotografica, infatti non sempre è consigliato scattare alla massima risoluzione, ma è bene impostare una risoluzione che permette di avere un pixel di dimensioni effettive oltre i 2 micron.
Le foto utilizzate per questo tutorial sono state scattate con una Canon EOS M3 con sensore APS-C a 24 MP di risoluzione. Il soggetto è uno leone in marmo conservato al Museo Diocesano di Parma: faceva parte dell’ambone, oggi smembrato, realizzato da Benedetto Antelami nel XII sec. all’interno della Cattedrale di Parma. Il rilievo è stato realizzato nell’ambito del progetto “Museo Virtuale di Piazza Duomo a Parma”.
Quando si avvia Zephyr, la prima cosa da fare è selezionare “Nuovo progetto” dal menù “Elabora”. Clicchiamo su “Successivo” per andare direttamente alla seconda schermata, dove, cliccando sul tasto “+”, possiamo caricare le nostre fotografie. Cliccando nuovamente su “Successivo” arriviamo alla schermata che riassume le informazioni sulle nostre immagini, clicchiamo ancora su “Successivo” per cambiare schermata e settare i parametri dell’elaborazione del processo di Structure-from-motion.
Consiglio di lavorare con la voce “Parametri” impostata su “Presets” (in alto a destra): i Presets sono profili preimpostati dagli sviluppatori in base al dettaglio che si vuole raggiungere. Ciò è molto utile per chi è alle prime armi, poiché i parametri “Avanzati” e quelli “Personalizzati” sono molto complessi da gestire se non si sa a cosa si riferiscono.
Come prima cosa dobbiamo scegliere tra quattro opzioni la categoria a cui appartiene l’oggetto che stiamo rilevando: “foto aeree”, “ambiente urbano” (per i rilievi di architetture di grandi dimensioni), “corpo umano” (per il rilievo delle persone o di parti del corpo), “oggetti vicini” (per fotografie scattate stando a breve distanza dall’oggetto), “generico” (per tutti quei casi che non sono riconducibili alle categorie precedenti).
Infine, scegliamo il Presets che determinerà il grado di profondità con cui verrà gestita la prima parte del processo di elaborazione e il numero di punti chiave che verranno individuati. Il valore “Default” va bene in qualsiasi situazione, “Fast” è consigliato se si vuole fare un’elaborazione veloce di prova, “Analisi profonda” può essere scelto se si hanno problemi di allineamento delle immagini.
Nel mio caso ho selezionato “Oggetti vicini” e “Default”.
Clicchiamo su “Successivo” e, nella schermata successiva, su “Avvia“. Al termine dell’elaborazione compare una tabella in cui viene indicato se le fotografie sono state tutte elaborate correttamente e, eventualmente, quali non sono state allineate. Se molte immagini non vengono allineate con “Default”, è consigliato rilanciare il processo con “Analisi profonda”.
Questa è la fase più importante dell’intero processo di rilievo fotogrammetrico. In questa fase il software allinea tra loro le nostre fotografie, calcolando la loro posizione nello spazio e ricostruendo la cosiddetta geometria di presa. Dopodiché, attraverso un processo di triangolazione geometrica, calcola la posizione nello spazio degli elementi presenti nelle fotografie. Ne consegue che dalla qualità di tale allineamento deriva la bontà del modello 3D finale.
Il risultato di questa fase è una nuvola di punti sparsa o sparse point cloud, che compare nella sezione “Progetto” nella parte sinistra dello schermo; qui compaiono anche le anteprime delle fotografie all’interno della sezione “Fotocamere”.
Come generare la nuvola di punti densa
Da qui in avanti possiamo procedere in due modi: sempre dal menù “Elabora“, attraverso il comando “Genera modello 3D” possiamo elaborare in una fase unica sia la nuvola di punti densa che la mesh; attraverso la voce “Avanzati“, invece, possiamo generare con processi separati la nuvola densa e successivamente la mesh. Dal punto di vista del risultato non cambia nulla, ma io consiglio di procedere nel secondo modo, così da poter verificare che ogni passaggio vada a buon fine, prima di generare quello successivo.
Selezioniamo dal menù “Elabora” la voce “Avanzati” e il comando ”Generazione nuvola di punti densa”; in questa fase il software andrà a densificare la nuvola di punti sparsa precedentemente elaborata, elaborando una nuvola di punti densa o dense point cloud, il dato grezzo che si ottiene da qualsiasi sistema di rilievo tridimensionale.
Anche in questa fase i settaggi sono molto semplici: la “Categoria” resta sempre la stessa selezionata nella prima fase, mentre la scelta del “Presets” è legata principalmente alla densità della nuvola che vogliamo ottenere, ovvero alla quantità di punti che vogliamo estrarre, ricordando che maggiore è il numero di punti estratto e maggiore sarà il dettaglio finale del nostro modello 3D.
Nel mio caso ho selezionato “Default”, ottenendo una nuvola densa composta da 11.036.873 punti.
Come generare la mesh
Ora non ci resta che creare il modello 3D vero e proprio, passando dalla nuvola di punti alla mesh, cioè la superficie poligonale continua.
Selezioniamo dal menù “Elabora” la voce “Avanzati” e il comando è “Estrazione mesh”. Il “Presets” che scegliamo per questa fase determina il numero di poligoni da cui sarà composta la nostra mesh, tenendo presente che un modello può dirsi ad alta risoluzione quando è formato da una mesh composta da un numero elevato di poligoni di piccole dimensioni, mentre può dirsi a bassa risoluzione quando è composta da un numero ridotto di poligoni. Nel primo caso avremo un modello ben corrispondente alla forma dell’oggetto che stiamo rilevando, nel secondo caso avremo un modello approssimato.
Nel mio caso ho selezionato tra i “Presets” il valore “Dettagli elevati ”, ottenendo 2.697.883 poligoni.
Come applicare il colore al modello
Il modello così ottenuto possiede già l’informazione del colore. Si tratta del color per-vertex, cioè il colore dei punti della nuvola densa trasferito ai poligoni corrispondenti. Questa modalità di colore è efficace solamente quando si dispone di un modello 3D ad alta risoluzione, diversamente, con modelli a bassa risoluzione, il modello appare visivamente molto sgranato. E’ la stessa differenza che intercorre tra una foto a alta e a bassa risoluzione, la seconda appare più sgranata rispetto alla prima.
Con l’ultimo comando a disposizione, “Generazione mesh con texture” è possibile elaborare la texture, cioè un’immagine quadrata composta dall’insieme delle fotografie elaborate e che riveste il nostro modello 3D. Visivamente la resa del colore avrà la qualità delle nostre fotografie, quindi mediamente una qualità più elevata del color per-vertex.
Inoltre, la qualità visiva sarà slegata dalla risoluzione del modello: essendo la texture un’immagine che copre il modello, che sotto di essa ci sia un modello ad alta o a bassa risoluzione visivamente il risultato non cambia. Questo è il metodo con cui si lavora per modelli 3D destinati al web, a giochi o a applicazioni: modelli a bassa definizione, quindi leggeri e facilmente gestibili attraverso internet o su device, ma con una texture di qualità fotografica che rende il modello visivamente di qualità.
Il Presets consigliato è “Default singola texture“, mentre l’unica categoria al momento selezionabile è “Generico“; clicchiamo su “Successivo” e su “Avvia“.
In questa fase possiamo anche provare a lavorare nella modalità “Parametri: Avanzati” (in alto a destra). Qui, ad esempio, è possibile diminuire o aumentare la “Dimensione massima della texture” in termini di pixel. La differenza tra un valore più alto e uno più basso è dato dalla quantità finale di pixel che comporranno la texture, quindi dalla sua risoluzione: come per qualsiasi immagine raster, maggiore è la risoluzione e maggiore sarà la qualità dell’immagine.
Come mettere in scala il modello
L’ultimo passaggio è la scalatura del modello, ovvero l’attribuzione della corretta dimensione metrica al modello, in modo da poter effettuare misure di precisione su di esso. Questa operazione può essere fatta all’interno di Zephyr solamente nelle versioni Pro e Aerial, mentre nella versione FREE e Lite ciò non è possibile. Quindi come possiamo fare?
Possiamo usare MeshLab, un software open source e gratuito che può essere scaricato qui: www.meshlab.net.
All’interno di MahLab possiamo scalare il modello 3D conoscendo una o più misure di riferimento e attraverso il calcolo del fattore di scala. Data una misura nota sul modello (la larghezza, lo spessore o la distanza tra qualche elemento ben riconoscibile, ad esempio alcuni marker), il fattore di scala è dato dal rapporto tra la misura reale e la stessa misura presa sul modello non scalato.
Dobbiamo, innanzitutto, esportare il modello da Zephyr FREE. Dal menù “Esporta” selezioniamo il comando “Esporta mesh con texture“: come formato consiglio di scegliere tra PLY e OBJ; la differenza è che il PLY gestisce sia il color per-vertex che la texture, mentre l’OBJ gestisce solamente la texture.
Una volta aperto il software MeshLab, con il comando “Import mesh” nel menù “File” è possibile caricare il modello esportato in precedenza da Zephyr. Con lo strumento di misura “Measuring tool” è possibile misurare la nostra misura di riferimento sul modello non scalato. In questo caso io avevo posizionato quattro marker (denominati 1, 2, 3 e 4) agli angoli del basamento; le misure di riferimento saranno pertanto le distanze tra ogni coppia di marker. Ora mi basta prendere le stesse misure sul modello appena importato e calcolare un fattore di scala per ogni misura, calcolando il rapporto tra misura reale e la misura sul modello non scalato.
Quando si hanno a disposizione più misure di riferimento è possibile calcolare più fattori di scala, uno per ogni misura a disposizione, e in seguito calcolare un fattore di scala medio, ottenendo in questo modo un risultato più preciso.
Lanciamo il tool: “Filters -> Normals, Curvatures and orientation -> Transform: scale, normalize” e nella finestra che compare inseriamo il fattore di scala. Clicchiamo “Apply” e a questo punto il nostro modello è scalato. Non ci resta che salvarlo attraverso il comando “Export mesh“.
Al termine di tutti i passaggi abbiamo realizzato un rilievo fotogrammetrico e ottenuto un modello 3D metricamente corretto e a colori reali, utilizzando solamente software gratuiti!
Impara come realizzare un rilievo fotogrammetrico utilizzando fotografie e video digitali.
- 10 ore di video lezioni registrate
- 1 ora di seminari in live-streaming
- 2 ore di question-time in live-streaming
- 4 dispense didattiche
- 7 dataset di fotografie e video per le esercitazioni
- una licenza del software 3DF Zephyr (versione completa) valida 30 giorni
- 1 ora di consulenza personalizzata con il docente (opzione Follow-up).