Benvenuti alla serie di tutorial dedicati a 3DF Zephyr.
Con questa guida imparerai ad impostare i parametri di 3DF Zephyr per ottenere il miglior risultato possibile dalle tue fotografie.
3DF Zephyr è uno strumento potente ma allo stesso tempo molto semplice: abbiamo investito molti dei nostri sforzi per renderlo un software user friendly e alla portata di tutti, tuttavia grazie a questa guida riuscirai a migliorare il tuo processo di lavoro (per esempio permettendoti di risparmiare tempo) ed il risultato finale ottenuto (per esempio ottenendo modelli 3D più precisi). I parametri di default funzionano per la maggior parte dei casi, ma è sempre possibile ottenere di più.
Prima di discutere effettivamente i parametri di configurazione, è necessario spendere un attimo di tempo per capire cosa succede sotto al cofano. Il tipico workflow di 3DF Zephyr è composto dalle seguenti fasi
Passo 1 – Structure from motion (Wizard di nuovo progetto)
Passo 2 – Multiview Stereo (Generazione nuvola di punti densa)
Passo 3 – Estrazione delle superfici (Generazione mesh)
Passo 4 – Estrazione della mesh con texture (Generazione mesh con texture)
Le impostazioni in ogni fase hanno ovviamente un impatto sulla fase a loro relativi, ma anche sulle fasi successive. Ricorda: se il risultato finale di una fase ti soddisfa, è probabile che anche le successive ti soddisferanno. Tuttavia, se durante una fase stai ottenendo dei risultati bizzarri o che non ti soddisfano, potrebbe essere necessario modificare le impostazioni prima di procedere oltre. Vediamo in dettaglio ogni fase ed i parametri di configurazione modificabili.
Questa guida tratta le impostazioni avanzate: è possibile trovare la guida esaustiva di ogni parametro personalizzato/XML cliccando questo collegamento.
Lo scopo di questa fase è di estrarre automaticamente i parametri interni ed esterni di ogni camera (in breve, sono parametri che 3DF Zephyr necessita per effettuare delle correzioni sull’input a seconda della tipologia di obiettivo utilizzato per scattare le fotografie, la rotazione e la traslazione). Questa fase può essere ulteriormente suddivisa in quattro fasi:
Estrazione dei Keypoint (Keypoint extraction)
Ricerca coppie immagini vicine (Pairwise image Matching)
Ricerca delle immagini nelle vicinanze (Neighbor image search)
Ricostruzione geometrica (Geometric Reconstruction)
Durante la configurazione del wizard di “nuovo progetto” avrai la possibilità di modificare il comportamento di ciascuna di queste sotto fasi.
Come puoi vedere, la fase di structure from motion estrae le feature di ogni immagine (keypoint extraction); dopodichè Zephyr passerà in rassegna tutte le immagini per capire, per ogni immagine, quali altre immagini sono “connesse” ad essa sulla base della sovrapposizione del contenuto dell’immagine (neighbor image search).
Successivamente, Zephyr dovrà capire, per ogni punto di ogni immagine, le corrispondenze di quei punti nelle altre immagini. Quando questa fase è completata, sarà possibile procedere con la ricostruzione vera e propria.
· Densità dei Keypoint (Keypoint extraction)
I Keypoints sono punti salienti di una fotografia che zephyr è in grado di capire e di riconoscere nelle diverse immagini. Più keypoints non implicano automaticamente un risultato migliore, poichè più punti significano più ambiguità durante la fase di matching. La densità di keypoint controlla inoltre la scala dei punti (sono estratti i punti con una scala maggiore, aumentando la probabilità di abbinare foto distanti a quelle vicine).
Molto bassa: estrae fino a 5000 keypoints per immagine
Bassa: estrae fino a 7500 keypoints per immagine
Media:estrae fino a 10000 keypoints per immagine
Alta: estrae fino a 15000 keypoints per immagine
Molto Alta: estrae fino a to 20000 keypoints per immagine
– Diminuire questo valore quando
»» necessiti di aumentare la velocità di computazione
»» non stai variando di molto la distanza tra le fotocamere ed il soggetto
»» hai molte fotografie con overlap
+ Aumentare questo valore quando
»» le fotocamere non sono state orienatate correttamente
»» nel dataset sono presenti delle foto molto distanti e delle foto molto vicine al soggetto
»» nel dataset sono presenti poche foto, con poco overlap e/o con texture uniformi
· Tipo matching
Controlla l’uso di certe ottimizzazioni durante la fase di matching, che permettono di ottenere risultati piu’ veloci a discapito di minor precisione.
· Profondità fase di matching (Ricerca coppie immagini vicine)
Controlla quanti abbinamenti a coppie eseguire sulle immagini. Generalmente, un valore più alto porta a risultati migliori, tuttavia questo ha un costo computazionale maggiore.
Automatico: calcolato euristicamente dal numero di immagini in ingresso
Bassa: almeno 2 * il numero di immagini in ingresso
Media: almeno 6 * il numero di immagini in ingresso
Alta: almeno 12 * il numero di immagini in ingresso
Completo : (il numero di immagini in ingresso * il numero di immagini in ingresso- 1 ) / 2 (computa tutte le coppie, O(N^2) )
– Diminuire questo valore quando
»» necessiti di aumentare la velocità di computazione
»» hai molte fotografie con overlap e con buone texture
+ Aumentare questo valore quando
»» non tutte le fotocamere non sono state orienatate correttamente
»» nel dataset sono presenti poche foto, con poco overlap e/o con texture uniformi
· Ordinamento foto (Ricerca delle immagini nelle vicinanze)
Se conosci l’ordine con cui le foto sono state scattate, è possibile saltare la fase di ricerca delle immagini nelle vicinanze (aumentando velocità e precisione dell’elaborazione). Se non conosci l’ordinamento delle foto, seleziona “Sparso“. Se invece hai preso le foto in sequenza o in senso circolare, seleziona rispettivamente “sequenziale” o “circolare” (la sequenza circolare è intesa come una sequenza chiusa). Il valore “griglia approssimata” (modalità tipica di acquisizione da droni) considera vicini in un certo intorno.
· Motore di ricostruzione (Ricostruzione geometrica)
Puoi dire a Zephyr come ricostruire le fotocamere. Con incrementale, le fotocamere vengono ricostruite una ad una, facendo crescere un cluster di fotocamere, mentre selezionando globale le fotocamere verranno ricostruite in un unico step.
La pipeline globale tende ad essere più veloce rispetto l’incrementale e in alcuni casi, è più robusta all’accumulazione dell’errore (drifting).
La pipeline incrementale invece, tende ad essere più robusta e ad orientare più camere rispetto alla pipeline globale.
· Calcolo bounding box con rimozione punti distanti
Quando abilitato, verrà impiegato un metodo robusto per scartare i punti dstanti durante il calcolo della bounding box. Quando disabilitato, vengono considerati tutti i punti.
Lo scopo della fase di multiview stero è di estrarre una nuvola di punti abbinando i pixel delle immagini. Come puoi immaginare, questo è ciò che avviene durante la fase denominata “Generazione nuvola di punti densa”.
E’ importante che l’input dato in ogni fase sia un buon punto di partenza. Se ritieni che l’output della fase di structure from motion possa venir migliorata, potrebbe essere sensato provare a modificare i parametri di tale fase e riprovare prima di procedere oltre. Capire queste cose richiede esperienza, sia nel modo di scattare le fotografie che di utilizzo di 3DF Zephyr. Dopo qualche tempo capirai quali parametri dovrai modificare per ottenere dei risultati migliori in ogni fase!
opzione della fase MVS | Descrizione | Suggerimento |
Tipo di output | Controlla l’ultilizzo di post processing automatico durante la generazione di nuvola di punti densa. | Usare grezzo quando »» si desidera generare la nuvola di punti senza alcun post processing automatico da parte di Zephyr Usare ottimizzato quando |
Numero di camere vicine | Controlla il numero di fotocamere vicine utilizzate per calcolare ogni mappa di profondità. | – Diminuire quando »» non sono presenti molte foto con overlap »» necessiti di aumentare la velocità di computazione + Aumentare quando |
Risoluzione | Controlla la risoluzione dell’immagine in input. Se ad esempio l’immagine iniziale è ad una risoluzione di 4000×3000 pixel, se la risoluzione viene impostata a 50% significa che per eseguire i calcoli le immagini verranno prima riscalate a 2000×1500 pixel. Non sempre una risoluzione maggiore implica un risultato migliore: spesso il ridimensionamento delle immagini può portare a risultati migliori poichè possono essere presenti degli artefatti o del rumore, eliminati durante la fase di ridimensionamento. | – Diminuire quando »» necessiti di aumentare la velocità di computazione + Aumentare quando |
Filtro di riduzione rumore | Rimuove il rumore dal risultato finale. | – Diminuire quando »» il risultato finale della computazione presenta delle parti mancanti.+ Aumentare quando »» il risultato finale presenta del rumore |
Livello di ottimizzazione | Controlla il fattore di accelerazione della computazione delle mappe di profondità. Questa accelerazione è ottenuta scartando in maniera preventiva pixcel ridondanti dal calcolo. | – Diminuire quando »» è più importante il dettaglio della velocità + Aumentare quando |
Hyperplane matching | Abilitare per utilizzare una funzione di matching più accurata. Lasciare disabilitata per una computazione più veloce. | – Disabilitare quando »» è più importante la velocità del dettaglio + Abilitare quando . |
Preselezione fotocamere | Attiva per utilizzare solo una preselezione di fotogrammi durante la computazione delle mappe di profondità per una maggiore velocità di computazione. | – Disabilitare quando »» è più importante il dettaglio della velocità + Abilitare quando |
Shape from Silhouette | Controlla le impostazioni dello shape from silhouette (voxel carving). Questa fase richiede l’utilizzo di maschere. Lo SfS puo’ produrre direttamente una nuvola di punti oppure utilizzare tale nuvola per inizializzare lo stereo. In genere, la looseness dovrebbe essere lasciata a 0. | – Diminuire looseness quando »» si desidera utilizzare dei vincoli piu’ stretti durante la computazione delle silhouette + Aumentare looseness quando |
Aggiorna colori | Abilita o disabilita il calcolo del colore per ogni punto generato. | – Disabilitare quando »» il colore sulla nuvola di punti non è desiderata (per esempio quando il prodotto finale desiderato è una mesh) + Abilitare quando |
Come avrai probabilmente già immaginato, questo passo riguarda la generazione della superficie (l’estrazione della mesh dalla nuvola densa di punti).
La generazione della superficie computa una indicator function da punti orientati risolvendo un problema di Poisson.
E’ possibile mettere a punto la generazione della superficie agendo sui parametri dell’algoritmo stesso e sui parametri necessari per eseguire la fase di post processing.
Opzione estrazione superfici | Descrizione | Suggerimento |
Livello Smussatura | Controlla la smussatura della mesh. Aumenta il valore di questo parametro quando ottieni di risultati con del rumore e diminuisci il valore di questo parametro per preservare un alto dettaglio. | – Diminuire quando »» si desidera un output “netto” (per esempio gli angoli di un edificio) + Aumentare quando |
Grado di chiusura buchi | Lo slider di grado di chiusura buchi permette di indicare a Zephyr quanto “aggressivo” deve essere nel chiudere i buchi. Da notare come sia possibile utilizzare lo strumento di chiusura buchi indipendentemente dal valore utilizzato in questa fase. | – Diminuire quando »» si desidera una mesh meno chiusa + Aumentare quando |
Utilizza maschere durante la ricostruzione della mesh | Se sono disponibili delle maschere, esse possono essere utilizzate anche durante la generazione della mesh. | – Disabilitare quando »» non si desidera utilizzare le maschere + Abilitare quando |
Aggiorna colori | Abilita o disabilita il calcolo del colore. | – Disabilitare quando »» il colore sulla mesh non è desiderata (per esempio quando il prodotto finale desiderato è una mesh con texture) + Abilitare quando |
Ottimizzazione basata su fotocoerenza | L’ottimizzazione basata su fotocoerenza è trattata in questo tutorial. |
Entrambe queste procedure condividono dei parametri molto simili (inverse mapping -> dal 3D al pixel immagine) e sono guidate dalla dimensione desiderata dell’ortofoto/texture. Poichè l’informazione del colore di ogni pixel proviene da più fonti / fotocamere è sempre possibile specificare il numero massimo di fotocamere utilizzate per la computazione.
Il bilanciamento colore viene gestito in automatico: chi desiderasse utilizzare le modalità legacy (blending, multiband) può ancora farlo tramite i parametri custom.
Questa guida dovrebbe averti dato abbastanza conoscenze per capire come funziona 3DF Zephyr sotto al cofano: sentiti libero di chiedere sul forum domande specifiche se alcune parti non sono state abbastanza esaustive!