Tutorial #10 – Filtri e Fotocoerenza

Comprendere i filtri per nuvole di punti e mesh

 

Benvenuti alla serie di tutorial dedicati a 3DF Zephyr.
Con queste indicazioni, imparerai a conoscere e ad applicare correttamente i parametri per i filtri delle nuvole di punti dense, mesh e la fotocoerenza in 3DF Zephyr.

  • I filtri agiscono direttamente sulla nuvola di punti densa e sulla mesh a livello di vertici e punti, migliorando la struttura complessiva.
  • La fotocoerenza è un tipo di filtro che basandosi sulle foto, ottimizza la superficie del modello per renderla più coerente possibile alle foto di partenza.

 

· Filtri per nuvole di punti

Per selezionare i filtri sulle nuvole di punti dense ci sono 3 diverse modalità:

     

  1. Dal menu Progetto (1) a sinistra, cliccare con il tasto destro del mouse sopra alla nuvola di punti densa (2) creata e selezionare il menu filtri (3).
  2.  

  3. Dal menu Strumenti (1), selezionare Filtraggio nuvole di punti (2). In questo modo è possibile applicare i filtri (3) alle nuvole di punti dense presenti nello spazio di lavoro.
  4.  

  5. Dal menu Modifica (1) a destra, selezionare Filtraggio (2). Nel pannello Nuvole Dense (3), si possono trovano i rispettivi filtri.

 

Qui in seguito si trova una descrizione dei diversi filtri:

 

Decimazione: permette di selezionare la nuvola di punti di riferimento con l’apposito menù a tendina e il numero di punti desiderato.
La nuvola di punti verrà rigenerata decimando il numero di punti con il valore massimo specificato.
È possibile decimare la nuvola di punti nei seguenti modi:

Numero massimo di punti;

Numero massimo di punti usando octree (l’octree è una struttura dati che garantisce una distribuzione dei punti decimati più omogenea);

Distanza media dei punti;

Dimensione octree.

Una volta inserita la soglia corrispondente per una delle opzioni del Filtro di decimazione (punti di destinazione, dimensioni dell’octree, ecc.), è possibile applicare il filtro alla nuvola di punti selezionata o clonare tale nuvola e applicare il filtro ad essa. Quest’ultimo metodo è adatto per mantenere la nuvola di punti densa originale e applicare il filtro alla sua copia.
 

Densificazione: selezionare la nuvola di punti di riferimento con l’apposito menù a tendina e il numero di punti desiderato. La nuvola di punti verrà rigenerata densificando il numero di punti con il valore massimo specificato una volta premuto il tasto “Applica filtro”. Solo nuvole di punti strutturate possono essere densificate.

 

Proietta su griglia regolare: questo filtro sfrutta una griglia regolare come proiezione per la nuvola di punti densa in modo che i punti si trovino ad una distanza regolare. È possibile definire la spaziatura oltre al raggio di ricerca utilizzato per generare la griglia. Questo strumento è particolarmente utile per dataset aerei, in ambito topografico e minerario.

 

Calcola colori: questo filtro permette di ricalcolare i colori di una nuvola di punti densa:

Da Fotocamere: (ad esempio, per cambiare le immagini dello spazio di lavoro se si ha a che fare con immagini multispettrali).

Per elevazione: aggiorna i colori in base all’elevazione dei punti. Una lista di mappe di colori vi permetterà di scegliere tra diverse tavolozze di colori.

Per normali: usando le normali dalle immagini.

Uniforme: scegliendo un colore specifico da una tavolozza di colori.

Per confidenza: possono essere applicati diversi set di colori a seconda della confidenza dei punti inquadrati dalle camere.

 

· Filtri per mesh

È possibile accedere ai filtri per le mesh con 3 diverse modalità:

     

  1. Dalla scheda Progetto (1) a sinistra, cliccare con il tasto destro del mouse sopra al Nome della Mesh (2) e selezionare i filtri (3).

  2.  

  3. Cliccando su Strumenti (1) nella barra dei menu, selezionare Filtraggio mesh (2). In questo modo è possibile applicare i filtri (3) alle mesh presenti nello spazio di lavoro.

  4.  

  5. Selezionando il menù Modifica (1), poi la tabella Filtraggio (2), all’interno del pannello Mesh (3).

 

Si possono applicare i seguenti filtri alle mesh:

 

Decimazione: permette di selezionare la mesh di riferimento dal menu a tendina e di impostare il numero di vertici corrispondenti. La mesh verrà rigenerata decimando il numero di vertici con il valore massimo specificato. È possibile chiedere al software di:
Preservare i margini: con questa opzione i vertici dei bordi non vengono mai decimati. Pertanto, permetterà di avere un bordo uguale alla mesh di partenza, ma lo svantaggio è che il bordo rimane molto più denso a scapito della parte interna, che avrà meno punti e meno dettagli.
Vincolo di distanza per la mesh in input: il processo di decimazione utilizza un vincolo aggiuntivo per la selezione dei vertici da decimare, che si basa sulla distanza dalla mesh di partenza.

Si può applicare il filtro alla mesh selezionata o clonarla e filtrare la mesh copiata.

 

Densificazione: selezionare la mesh di riferimento con l’apposito menù a tendina e il numero di vertici desiderato. La mesh verrà rigenerata densificando il numero di vertici con il valore massimo specificato.
Si può applicare il filtro alla mesh selezionata o clonarla e filtrare la mesh copiata.

 

Filtraggio laplaciano: riduce il rumore delle mesh e non mantiene gli spigoli. Più iterazioni vengono inserite, più la mesh sarà levigata. Questo filtro è adatto a soggetti non spigolosi (ad esempio, dataset human body).

 

Filtraggio bilaterale: questo filtro permette di levigare la mesh selezioanta con l’apposito menù a tendina. riduce il rumore tendando di migliorare e accentuare gli spigoli dove possibile. Questo è il filtro è adatto per l’architettura e gli scenari edilizi.

 

Ottimizza topologia: questo filtro permette di ottimizzare la topologia della mesh. I triangoli saranno semplificati e Zephyr cercherà di generare triangoli più grandi dove possibile. Maggiore è il fattore di ottimizzazione, maggiore è la dimensione dei triangoli generati. Si prega di notare che il filtro Ottimizza topologia può causare una perdita di dettaglio della mesh, specialmente dove ci sono geometrie con bordi ben definiti.

 

Riempimento buchi totale o selettivo:Sono disponibili due modalità:
totale: permette di riempire automaticamente tutti i buchi in un’ unica operazione.
selettivo: permette di riempire i buchi manualmente. Dal riquadro di selezione sarà possibile selezionare un buco specifico, inserendo il suo numero (nello spazio di lavoro verrà evidenziato con un contorno) o i buchi di una certa dimensione fino a considerarli tutti muovendo lo slider.
Il colore dei triangoli che andranno a chiudere la mesh saranno spesso sbagliati, in quanto la mancanza di visibilità delle camere verso un dato punto, porta a casi degeneri (è chiaramente impossibile identificare il colore di una superficie che non è vista da nessuna fotografia). La modalità Selettivo permette di chiudere buchi singoli piu’ velocemente, ma potrebbe non funzionare per casi complessi, in quel caso si consiglia l’utilizzo della modalità Totale.

 

Taglia con bounding box: modificando le dimensioni della bounding box creata dalla mesh, la si può regolare in modo da tagliare le parti non necessarie escludendole al di fuori della bounding box.

 

Taglia con piano: questa funzione permettono di tagliare la mesh in maniera netta con un piano, rigenerando i triangoli sul bordo dove tagliati.

 

Calcola colori: questo filtro permette di ricalcolare i colori della mesh:

Da Fotocamere: (ad esempio, per cambiare le immagini dello spazio di lavoro se si ha a che fare con immagini multispettrali).

Per elevazione: aggiorna i colori in base all’elevazione dei punti. Una lista di mappe di colori vi permetterà di scegliere tra diverse tavolozze di colori.

Per normali: usando le normali dalle immagini.

Uniforme: scegliendo un colore specifico da una tavolozza di colori.

Per curvatura: Si possono applicare diversi set di colori a seconda della geometria locale, il risultato è quello di un colore che varia a seconda di quanto la zona sia piana, angolare o curva.

 

Filtro su selezione: permette di applicare un filtro a scelta (Laplaciano, Bilaterale, Ottimizza topologia, ecc) ad una selezione di triangoli. Selezionare quindi prima i triangoli (utilizzando un qualsiasi strumento, come ad esempio lasso oppure selezione per area dei triangoli) e successivamente lanciare il filtraggio di selezione su tali triangoli.

 

Estrazione del terreno: permette l’estrazione automatica del terreno da una mesh per creare un Digital Terrain Model (DTM) ed eliminare tutto ciò che si trova sopra, come alberi e case. Gli utenti possono selezionare la mesh e impostare i seguenti parametri:

Scena: consente di filtrare il tipo di scenario che è stato ricostruito in 3D.

Risoluzione: si riferisce alla dimensione della griglia di copertura simulata che viene utilizzata per ricoprire il terreno. Più grande è la risoluzione, più grosso sarà il DTM.

Soglia di altezza: si riferisce ad una soglia per classificare le nuvole di punti nel terreno e le parti non nel terreno in base alle distanze tra i punti e il terreno simulato.

Il pulsante “Anteprima” metterà in evidenza gli elementi del terreno in verde e quelli non del terreno come elementi rossi. Opzionalmente, è possibile utilizzare una selezione per forzare le regioni al di fuori del terreno.

 

· Ottimizzazione basata su fotocoerenza

è un tipo di filtro particolare che, basandosi sulle foto, ottimizza la superficie del modello per renderla il più coerente possibile alle immagini di partenza attraverso un processo di minimizzazione, dove ad ogni iterazione la superficie viene modificata in modo tale da ridurre l’errore di riproiezione di un’immagine sull’altra. Questo permette di ottenere una resa molto più dettagliata della superficie, aumentandone di conseguenza l’accuratezza.

 

Anche l’ Ottimizzazione basata su fotocoerenza può essere applicata con diverse modalità alle mesh:

 

  1. Si può avviare la fotocoerenza direttamente nella fase di ricostruzione della mesh. In alcuni preset questa funzione è disabilitata, ma è comunque possibile abilitarla nella modalità avanzata. I parametri di default della fotocoerenza possono variare a seconda del preset utilizzato.
  2.  

  3. Un altro modo per lanciare la fotocoerenza è attraverso il menu Strumenti > Filtraggi Mesh > Ottimizzazione Basata su Fotocoerenza.
  4.  

  5. Gli stessi parametri di fotocoerenza si trovano anche nel menu contestuale a destra della finestra di lavoro Modifica > Filtraggi > Fotocoerenza.

 

Di seguito, un’analisi nel dettaglio su come modificare questi parametri, tra parentesi ( ) si trovano i parametri di default indicativi:

 

Risoluzione dell’immagine (50): controlla la scala di risoluzione delle immagini che verrà utilizzata internamente dall’algoritmo di fotocoerenza. Se si ha già una buona geometria iniziale, è sensato lanciare la fotocoerenza con un’alta risoluzione (50% – 75% ) mentre se l’input non è di alta qualità, è consigliabile lasciare una bassa risoluzione (25%).
 
Area di riproiezione (20): controlla la dimensione che ciascun triangolo tenderà ad assumere al termine del processo di fotocoerenza: dato un triangolo, la sua area di riproiezione finale (in pixel) sulla camera più vicina si avvicinerà al valore specificato. Diminuendo questo valore si otterrà una mesh più densa: la mesh finale avrà quindi un livello di dettaglio variabile e di conseguenza risulterà più densa nelle zone viste da camere più vicine
Nella maggior parte dei casi, può essere mantenuto il valore di default; nel caso di mesh molto buone (ad esempio ottenute da un precedente processo di fotocoerenza) tale parametro può essere abbassato per cercare di ricavare maggior dettaglio, mentre può invece essere alzato in caso di mesh molto rumorose e immagini di bassa qualità.
 
Aumento alte frequenze (0.5): aumenta la fotocoerenza per le alte frequenze. Da notare come questa funzione sia differente dall’aumento delle alte frequenze della funzione “intensifica mesh”, che invece genera dettaglio fasullo. Questo parametro cerca di sfruttare l’alta frequenza dell’immagine. Più alto viene spostato il cursore, più dettagli vengono creati, ma con il rischio di aumentare la rumorosità della mesh e la spigolosità del modello.
 
Filtro dettaglio (0): È un metodo di post processing che può generare dei “finti dettagli” intensificando il numero dei triangoli della mesh. A seconda del risultato che si vuole ottenere e la qualità della foto, bisogna regolare il cursore con attenzione, per non creare rumore aggiuntivo invece di dettagli aggiuntivi.
 
Filtro bordi (0): questo parametro serve per dare risalto a parti angolose, più la mesh è spigolosa (edifici, oggetti ecc), più si può aumentare tale valore. In media si può tenere a un valore pari a 0.5.
 
Calcola colori: calcola i colori dei vertici in base alle fotocamere. Ricalcola ogni volta i colori dopo aver fatto la fotocoerenza. Per prove e test è possibile disabilitare il flag e ricalcolare successivamente i colori.
 
Suddivisioni gerarchiche (1): se tale valore è maggiore di zero, l’algoritmo di fotocoerenza verrà applicato più volte in modo sequenziale, variando automaticamente la risoluzione dell’immagine e il numero di iterazioni – medesimi risultati possono quindi essere ottenuti lanciando più volte l’algoritmo manualmente, modificando i parametri in modo appropriato.
 

  • Di seguito, un esempio per suddivisioni gerarchiche :
Suddivisioni gerarchiche impostato ad 1 :

  • suddivisioni gerarchiche 1, risoluzione dell’immagine 60 corrisponde alle seguenti fasi sequenziali:
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 30
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 60
Suddivisioni gerarchiche impostato a 2 :

  • suddivisioni gerarchiche 2, risoluzione dell’immagine 60 corrisponde alle seguenti fasi sequenziali:
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 30
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 45
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 60

 

  • Di seguito, casi tipici e impostazioni consigliati per il parametro di suddivisioni gerarchiche
Mesh rumorosa, immagini di buona qualità

  • suddivisioni gerarchiche 2, risoluzione dell’immagine 50, iterazioni 40

se si necessità di maggior dettaglio, eseguire in cascata ulteriori passaggi, ad esempio

  • suddivisioni gerarchiche 0, risoluzione dell’immagine 75, iterazioni 30
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 100, iterazioni 20
Mesh rumorosa, immagini di bassa qualità

  • suddivisioni gerarchiche 2, risoluzione dell’immagine 50, iterazioni 40

se le immagini non sono di buona qualità, tipicamente non risulta conveniente effettuare in cascata ulteriori fasi di fotocoerenza

Mesh buona, immagini di buona qualità

  • suddivisioni gerarchiche 0, risoluzione dell’immagine 75, iterazioni 40

(la risoluzione dell’immagine può essere aumentata a 100 nel caso di mesh molto buone, oppure può essere effettuato un secondo passaggio a 100)

Tipicamente non è conveniente eseguire l’algoritmo in modalità gerarchica, ma risulta consigliabile effettuare un unico processo ad alta risoluzione, così da preservare i dettagli già presenti nella mesh di partenza

 

  • Fotocoerenza: esempio pratico

Si propone di seguito un esempio pratico dell’utilizzo della fotocoerenza.

Consideriamo la seguente mesh, che presenta un livello di dettaglio basso e del rumore distribuito sulla superficie:

Le fotografie utilizzate per la ricostruzione erano di buona qualità, possiamo quindi ricondurci al caso “mesh rumorosa, immagini di buona qualità”. Eseguendo i passi consigliati nel tutorial (compresi i passaggi opzionali con le immagini ad alta risoluzione) si andrà ad ottenere il seguente risultato:

Un errore da evitare, invece, è quello di applicare il processo di fotocoerenza utilizzando direttamente le immagini ad alta risoluzione, come per il caso “mesh buona, immagini di buona qualità”. La mesh di partenza presenta infatti varie imprecisioni che richiedono un’analisi iniziale a bassa risoluzione per poterle correggere in modo adeguato. In caso contrario il risultato che si andrà ad ottenere sarà distante da quello ottimale visto in precedenza: