Tutorial #10 – Filtri per nuvole di punti e mesh

Filtri per nuvole di punti e mesh

 

Benvenuti alla serie di tutorial dedicati a 3DF Zephyr.
Con questa ricetta, imparerai a conoscere e ad applicare correttamente i filtri per nuvole di punti e mesh.
Questa pagina è più descrittiva che un vero e proprio tutorial, e sebbene alcune informazioni possano sembrare banali, ne si raccomanda la lettura per ottenere dei risultati ancora migliori con 3DF Zephyr.

 

  • Filtri per nuvole di punti

Decimazione: 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 una volta premuto il tasto “Applica filtraggio”.

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 filtraggio”. Solo nuvole di punti strutturate possono essere densificate.

 

  • Filtri per mesh

Decimazione: selezionare la mesh di riferimento con l’apposito menù a tendina e il numero di vertici desiderato. La mesh verrà rigenerata decimando il numero di vertici con il valore massimo specificato una volta premuto il tasto “Applica filtraggio”.

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 una volta premuto il tasto “Applica filtraggio”.

Filtraggio laplaciano: questo filtro permette di levigare la mesh selezionata con l’apposito menù a tendina. Riduce il rumore ma non mantiene gli spigoli. Premere “Applica filtraggio” per applicare il filtro. Più iterazioni comportano una mesh più liscia.

Filtraggio bilaterale: questo filtro permette di levigare la mesh selezioanta con l’apposito menù a tendina. Riduce il rumore tendando di mantenere gli spigoli dove possibile.  Premere “Applica filtraggio” per applicare il filtro. Più iterazioni comportano una mesh più liscia.

Riempimento buchi: permette di riempire automaticamente i buchi nelle mesh. Dalla finestra di selezione sarà possibile selezionare un buco specifico (nello spazio di lavoro verrà evidenziato con un contorno) o tutti i buchi di una certa dimensione (o tutti i buchi). Il colore dei triangoli che andranno a chiudere la mesh saranno probabilmente spesso sbagliati in quanto la mancanza di visibilità delle camere verso un dato punto porta a casi degeneri (e chiaramente è impossibile identificare il colore di una superficie che non è vista da nessuna fotografia). Sono disponibili due modalità, totale e selettiva. La modalità selettiva permette di chiudere buchi singoli piu’ velocemente, ma potrebbe non funzionare per casi complessi, nel qual caso si consiglia l’utilizzo della modalità totale.

Ottimizza topologia: questo filtro permette di ottimizzare la topologia della mesh – i triangoli verranno semplificati e Zephyr cercherà di generare triangoli più grossi ove possibile. Da notare come maggiore il fattore di ottimizzazione, maggiori saranno le dimensioni dei triangoli generati. Si noti come questo filtro possa causare una perdita di dettagli della mesh.

Ottimizzazione basata su fotocoerenza: questo filtro aggiusterà la posizione dei triangoli per massimizzare la fotocoerenza della loro riproiezione. Puoi lanciare questo filtro direttamente nella fase di ricostruzione mesh (in alcuni preset questa funzione è disabilitat ma è comunque possibile abilitarla dalla modalità avanzata o dalle impostazioni personalizzate) o manualmente da questo menu una volta che la mesh è già stata ricostruita. 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%). Di seguito, un’analisi nel dettaglio su come modificare questi parametri.

 

· Ottimizzazione basata su fotocoerenza

Di seguito, una spiegazione più dettagliata dei parametri della fotocoerenza così come una guida pratica con esempi.

Parametri di ottimizzazione basata su fotocoerenza

numero vertici massimo (5.000.000): indica il numero massimo di vertici della mesh finale

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à

numero di camere vicine (4): per ogni camera vengono scelte un massimo di N camere vicine, che andranno a formare le coppie che l’algoritmo di fotocoerenza dovrà analizzare.

Alzando questo parametro si avrà un incremento nell’accuratezza, con conseguente aumento dei tempi di computazione: nella maggior parte dei casi i risultati che si ottengono con il valore di default e con valori più alti sono paragonabili per qualità, poiché le informazioni che si possono estrarre con un vicinato di 4 camere è spesso sufficiente per riprodurre la maggior parte dei dettagli del soggetto.

Questo parametro è da abbassare solo in casi particolari, ad esempio per effettuare dei test preliminari o se non vi è la necessità di un dettaglio accurato.

usa coppie simmetriche (no): selezionando tale opzione l’algoritmo procederà ad analizzare ogni coppia di camere (A, B) in modo simmetrico (A verso B, B verso A) durante ciascuna iterazione: viceversa, l’analisi avverrà alternando la direzione tra un’iterazione e l’altra (A verso B per le iterazioni di indice pari, B verso A per quelle di indice dispari)

Tipicamente il livello di dettaglio che si ottiene con l’opzione attivata  è paragonabile al livello di dettaglio con la stessa opzione disattivata, a fronte di un dimezzamento dei tempi di computazione in quest’ultimo caso. Si consiglia di abilitare tale parametro solo per dataset piccoli.

iterazioni massime (40): indica il numero massimo di iterazioni dell’algoritmo

Si consiglia di non aumentare il valore di default, per il quale l’algoritmo tendenzialmente convergere alla soluzione ottimale; può essere invece abbassato se la mesh di partenza è molto buona, ad esempio se in precedenza è già stato effettuato un passaggio di fotocoerenza (come accade in automatico durante il processo gerarchico)

Convergence Relative Tolerance (0.0150): : questo parametro controlla l’interruzione del processo di minimizzazione quando ormai l’algoritmo sta per convergere (quindi ulteriori iterazioni porterebbero ad un risultato del tutto simile). Aumentando questo valore si rischia di far terminare il processo troppo presto, quindi il risultato sarà meno dettagliato. Diminuendo questo valore invece si rischia di eseguire troppe iterazioni (fino al valore di iterazioni massime): sebbene non causi una degradazione dei risultati, maggiori iterazioni portano ovviamente a tempistiche più lunghe, che in certi casi possono migliorare leggermente il risultato finale.

risoluzione dell’immagine (50): controlla la scala delle immagini che verrà utilizzata internamente dall’algoritmo di fotocoerenza

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, iterazioni 40:

corrisponde alle seguenti fasi sequenziali

  • suddivisioni gerarchiche 0, risoluzione dell’immagine 30, iterazioni 40
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 60, iterazioni 20
Suddivisioni gerarchiche impostato a 2 :

  • suddivisioni gerarchiche 2, risoluzione dell’immagine 60, iterazioni 40:

corrisponde alle seguenti fasi sequenziali

  • suddivisioni gerarchiche 0, risoluzione dell’immagine 30, iterazioni 40
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 45, iterazioni 20
  • suddivisioni gerarchiche 0, risoluzione dell’immagine 60, iterazioni 10

 

  • 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: