In questo articolo ti parlo di 3 strumenti che il software open source Cloud Compare ti mette a disposizione per pulire una nuvola di punti da sporco, rumore e punti doppi.
Sono:
- Remove duplicate points;
- SOR Filter;
- Noise Filter.
PULIRE UNA NUVOLA DI PUNTI (fotogrammetrica)
Il rilievo fotogrammetrico non finisce con la generazione della nuvola di punti densa.
C’è di più!
Se ottieni in output una nuvola perfetta, già pronta da usare per estrarre, correttamente, tutte le informazioni che ti servono (sezioni, modelli digitali di elavazione, curve di livello, …), scrivimi assolutamente!
Mi interessa tantissimo sapere come fai!
Tutte le mie nuvole fotogrammetriche hanno bisogno di un po’ di lavoro per:
- togliere parti in eccedenza che non riguardano l’area effettiva del rilievo;
- eliminare punti che non c’entrano niente, ma che sono stati generati dal software di fotogrammetria;
- distinguere punti del terreno da vegetazione ed altre cose a terra (auto, edifici, …).
Quanto lavoro serve?
Beh, dipende dalla complessità e della qualità/bontà della nuvola.
Da qualche mezz’ora (nei casi più piccoli, semplici e fortunati) a molte ore (quando è tutto difficile ed il dato in output deve essere curato maniacalmente).
In questo articolo ti parlo di come affrontare il secondo dei tre punti che ti ho elecanto qui sopra.
SPORCO, RUMORE E PUNTI DOPPI
Sporco e rumore sono formati da punti di una nuvola che sono stati elaborati, e generati dal software di fotogrammetria, ma che non rappresentano niente di fisicamente presente a terra (o sull’oggetto del rilievo) al momento dell’acquisizione delle foto.
Vanno tolti.
Sono “errori di produzione”.
Ed a volte possono essere anche pericolosi!
Infatti, se tracci l’inviluppo dei punti di una sezione (ne avevo parlato un po’ in questo articolo), estratta da una nuvola di punti con tanto rumore, c’è il rischio concreto che la polilinea del profilo passi per i punti di sporco e fornisca una rappresentazione sbagliata.
I motivi per cui ti ritrovi ‘sta roba tra i piedi sono vari.
Te ne elenco qualcuno:
- elaborazione di bassa qualità della nuvola di punti densa, nel software di fotogrammetria;
- niente filtro durante la generazione della nuvola, sempre nel software di fotogrammetria;
- condizioni di illuminazione particolari durante la presa fotografica (il flare – il bagliore in una foto dovuto al controsole – tende a dare parecchio sporco in output);
- oggetti complessi con elementi disposti su più piani (un traliccio di un elettrodotto dell’alta tensione);
- fotografie frontali (o comunque non nadirali) di oggetti su sfondi “problematici“ (il cielo, una collina verdeggiante, …).
Il processo fotogrammetrico poi non può fare altro che trattare quello che trova nelle immagini.
Fa del suo meglio, ma oltre un certo limite proprio non ce la fa!
Il principio “passivo” dell’elaborazione fotogrammetrica è responsabile anche della presenza, in una nuvola, dei punti doppi.
Sono punti distinti che hanno, praticamente, le stesse coordinate (x,y,z).
Sono, di fatto, sovrapposti, e la loro presenza non aggiunge nessuna informazione utile alla nuvola di punti.
Anzi, se sono tanti, la appesantisce!
La misura laser scanner è meno affetta da questi problemi.
Il principio di misura “attivo” riduce parecchio sporco, rumore e punti doppi.
Non sono un esperto di laser scanner ma la nuvola generata al termine delle scansioni dovrebbe essere più pulita della nuvola fotogrammetrica dello stesso oggetto.
Se usi il laser scanner puoi venirmi in aiuto su questo tema!
🙂
Un discorso diverso vale invece per la misura LiDAR in movimento: LiDAR da UAV e su dispositivi inerziali (zaini).
Lì di rumore e di sporco da togliere ce n’è di più…
TRE STRUMENTI AUTOMATICI
Dopo averti detto che cos’è lo sporco ed il rumore in una nuvola di punti, ti faccio vedere come puoi toglierli con tre semplici strumenti che il software Cloud Compare ti mette a disposizione:
- Remove duplicate points – Rimuovi i punti doppi;
- SOR Filter – Filtro di rimozione statistica degli Outlier (non mi viene proprio una parola italiana corretta per tradurre outlier);
- Noise Filter – Filtro di riduzione del rumore.
Come spesso succede, ti devo dare una notizia buona ed una mena buona.
Iniziamo da quella buona.
Tutti e tre i tool sono automatici.
Sono veloci e non richiedono azioni lunghe e ripetitive da parte tua.
Ed ora quella meno buona.
Non sempre funzionano al 100%.
Non aspettarti che alla fine del processo automatico di pulizia la tua nuvola sarà perfetta.
Non lo sarà.
Qualcosa sarà rimasto fuori.
E sarà necessario il tuo intervento manuale.
In ogni caso, la gran parte del lavoro l’avranno fatto i tre ragazzi che ora ti presento.
TOGLI I PUNTI DOPPI – REMOVE DUPLICATE POINTS
Il comando Remove Duplicate Points fa una cosa semplice: riduce il numeo dei punti di una nuvola affinchè essi non siano più vicini di una distanza minima.
Attento però a non usarlo per alleggerire la nuvola di punti perchè la ritieni troppo numerosa.
Per quello è bene usare gli algoritmi del comando Subsample a Point Cloud.
Funzionano molto meglio!
Remove Duplicate Points va scelto proprio per fare quello che dice il suo nome: togliere i punti che, di fatto, sono sovrapposti ed alleggerire così la nuvola, eliminando informazioni che non servono a niente.
Lo trovi in Tools – Other – Remove Duplicate Points.
È il più semplice dei tre strumenti di questo articolo.
Ed il primo che “faccio girare” su una nuova nuvola da trattare.
Al suo avvio ti compare una finestra dove devi scegliere una cosa sola: la minima distanza tra i punti nella nuova nuvola elaborata (Minimun distance between points).
Cloud Compare ti propone, di default, un valore molto, molto basso.
Da ingegnere, legato ai numeri “pratici”, mi verrebbe da dire “assurdo” e senza senso.
In realtà però, pensando a come lavora l’algoritmo ed ai suoi scopi, un senso ce l’ha.
Se la minima distanza fosse nulla, il processo potrebbe non funzionare in maniera efficace.
E poi lo “0” non è un valore che i filtri ed i processi automatici amano molto.
Un valore così basso (che è, praticamente, zero) ti assicura che saranno tolti sia i punti doppi, effettivamente sovrapposti, che quelli vicinissimissimi!
Ti consiglio di dare una chance a questo comando con le impostazioni di default.
Nel mio caso, dalla nuvola che ho trattato per estrarre questi screenshot, sono spariti circa 1.200.000 punti (quasi il 10% del totale)!
Niente male!
Aumentando la “minima distanza …” i punti rimossi tenderanno ad aumentare.
Lascio a te le prove sul tuo caso specifico (ogni nuvola è diversa dalle altre).
Ti avverto solo di non “forzare” troppo la mano con i decimali, rischiando di togliere elementi che invece sono significativi.
Il comando (come tutti quelli di questo articolo) non è distruttivo.
Non viene modificata la nuvola originale ma il software ne genera una nuova.
SOR FILTER
Il secondo strumento che uso per pulire una nuvola di punti è l’SOR Filter.
S.O.R. sta per Statistical Outlier Removal.
Non ho trovato una parola che traducess in italiano ed in maniera efficace la parola “Outlier“.
Letteralmente significa: colui/colei che giace fuori.
Gli Outlier sono dei punti che occupano posizioni nello spazio tridimensionale sbagliate ed anche un po’ lontane da tutto il resto della nuvola di punti.
Sono errori dell’elaborazione fotogrammetrica.
Personalmente mi è capitato di avere degli outlier dietro una scogliera o sotto una strada!
Non sono mai molti.
Ma spesso ci sono.
E il compito del filtro SOR è di individuarli e eliminarli.
L’algoritmo è un po’ più avanzato (anche se ancora semplice) di quello di rimozione dei punti doppi e si basa su un approccio statistico.
Il comando lo trovi in Tools – Clean – SOR Filter.
E questo è quello che vedi quando lo lanci.
Devi scegliere due parametri.
E due sono le cose che fa il filtro.
1) Calcolo della distanza media tra i punti
Per ogni punto della nuvola calcola la distanza media dai punti che gli sono vicini.
Tu decidi quanti sono i punti vicini che vuoi che il software consideri per fare il calcolo della media.
È il primo parametro (di default è 6) del tool.
In altri software (ma anche qui, e lo vedrai poco più avanti) lo puoi trovare indicato come Knn (dove nn sta per nearest neighboor – vicino più prossimo).
2) Calcolo della distanza di soglia
Una volta che lo strumento ha calcolato, per ogni punto, la distanza media dai suoi vicini, calcola una distanza di soglia su cui basare la scelta di considerare un punto un outlier (e quindi rimuoverlo) oppure no.
La formula per calcolarla la trovi esplicitata anche nella finestra del tool.
La soglia è uguale alla distanza media (calcolata nel passaggio precedente) a cui si aggiunge la deviazione standard delle distanze dai punti vicini moltiplicata per un fattore “nSigma“.
Ecco, tu devi scegliere proprio questo moltiplicatore.
Di default è “1”.
Più piccola è la soglia e maggiore è il numero di punti che saranno eliminati perchè considerati outlier
Come vedi anche questo filtro non è complesso, ma due parametri ti permettono di provare un bel po’ di combinazioni in più per eliminare in modo automatico il maggior numero di outlier, senza togliere punti significativi della nuvola.
Ti faccio vedere uno zoom della mia nuvola da cui il filtro ha tolto, bene e con i valori di default, un po’ di outlier.
Non posso però proprio dirti di fermarti ai valori di default!
Non sempre default equivale a meglio.
Le nuvole di punti sono talmente diverse (anche solo per l’oggetto modellato) che fermarsi ai valori proposti dal software rischia di precludere la possibilità di efficientare il filtro sul tuo caso specifico.
Prova varie combinazioni di valori.
Cambiane uno alla volta.
Sono piuttosto intuitivi da capire.
Se aumenti il numero di punti vicini, migliori il calcolo statistico della media.
Ma se ne metti troppi e la nuvola è rumorosa rischi di prendere anche dei punti di sporco, per il calcolo della media, ed ottieni un valore “sballato”.
Anche questo strumento è non distruttivo.
Non fai danni!
Ed inoltre è veloce anche con decine di milioni di punti.
Un po’ di prove costano davvero poco tempo e possono portarti ad un risultato migliore.
Insomma, prova!
🙂
TOGLI IL RUMORE CON IL NOISE FILTER
Ed ecco l’ultimo dei tre strumenti di questo articolo.
È quello un po’ più complicato (ma ancora semplice) ed è il Filtro di Riduzione del Rumore – Noise Filter.
Anche questo lo trovi in Tools – Clean – Noise Filter.
Prima di raccontarti come lavora provo a spiegarti che cosa si intende per rumore.
Lo faccio con un esempio.
Immagina di avere modellato una strada con un’elaborazione fotogrammetria.
Hai una nuvola di punti che rappresenta la superficie dell’asfalto.
In un caso ideale tutti i punti della nuvola stanno su questa superficie.
Nella realtà invece la maggior parte dei punti sta lì ma ce ne sarà un po’ che sta sopra ed un po’ che sta anche sotto.
Questi punti costituiscono il rumore.
Ecco la finestra che vedrai quando avvii lo strumento.
Qui le combinazioni possibili di variabili iniziano ad essere un po’ di più.
Ma non spaventarti.
È facile anche questo.
Il Noise Filter assomiglia un po’ all’SOR Filter ma la differenza c’è e non è banale.
L’SOR Filter considera la distanza tra punti vicini mentre il Noise Filter considera la distanza dei punti da una superficie di riferimento.
Il filtro infatti “fitta” un piano locale attorno ad ogni punto della nuvola di punti e poi toglie i punti che sono “troppo lontani” da questo piano.
È a tutti gli effetti un filtro passa basso (low pass filter).
Per stimare la superficie planare di riferimento puoi scegliere un raggio oppure un numero di punti vicini a quel punto della nuvola.
Se scegli l’opzione raggio (attiva di default) il software genera attorno ad ogni punto una sfera e prende i punti che ci sono al suo interno per fittare il piano di riferimento.
Con l’opzione punti invece decidi quanti punti prendere, vicino al punto specifico, per calcolare il piano (ecco la sigla Knn di poco fa).
In funzione delle caratteristiche della nuvola e per l’opzione raggio, il software ti propone già un suo raggio che ritiene sensato.
Vale anche qui tutto quello scritto per l’SOR Filter: prova parametri diversi!
Se scegli l’opzione Raggio, fai attenzione a scegliere un valore sufficientemente grande da includere all’interno della sfera almeno 6 punti.
La seconda decisione che puoi/devi fare con questo tool riguarda la scelta dell’errore massimo: il parametro che determina se un punto è considerato rumore (e quindi tolto) o no.
È la stessa cosa che succede con la soglia dell’SOR Filter.
Qui puoi scegliere un errore relativo (come moltiplicatore della riproiezione dei punti vicini sul piano calcolato) o assoluto.
Personalmente credo che funzioni meglio il primo.
Tra i tre strumenti per pulire una nuvola di punti il Noise Filter è quello un po’ più delicato.
È formidabile sulle superfici piatte.
Meno su quelle curve (come questa degli screenshot qui sopra).
Ancora meno su spigoli e angoli solidi.
È anche lo strumento con il più alto rischio di rimozione di punti “buoni”.
Quindi stai all’occhio!
Potrebbe valere la pena fare un po’ di prove (del resto, non è una novità!) oppure dividere la nuvola a seconda delle sue caratteristiche ed applicare in modo diverso il Noise Filter.
(purtroppo) NON FINISCE QUI
Questi tre strumenti sono un grande aiuto all’editing della nuvola di punti finalizzato a tirare fuori un dato pulito, sensato e coerente con la realtà dell’oggetto o dell’elemento modellato.
Ma, come ti ho scritto in apertura, quasi sicuramente non saranno sufficienti.
È probabile che tu abbia ancora un po’ di lavoro da fare per raffinare il dato finale.
Ed allora tocca rimboccarsi le maniche, armarsi di pazienza e procedere a mano.
Ti consiglio di scegliere il metodo delle sezioni.
Lo stesso con cui puoi rimuovere la vegetazione o distinguere elementi antropici dal terreno.
Ne avevo parlato in questo articolo del blog.
Può essere lungo (lo sarà sicuramente), ripetitivo e poco divertente.
Impegno e durata dipendono senza dubbio dalle caratteristiche della tua nuvola.
In ogni caso credo che sia una procedura opportuna e necessaria.
Un rilievo fotogrammetrico non finisce (mai) con la generazione della nuvola di punti!
🙂
PUOI ANCHE SEGUIRE I MIEI VIDEO
Ho pubblicato tre video sul Canale You Tube dove ti mostro, condividendo il mio schermo, il funzionamento di questi strumenti.
INFORMAZIONI DI SERVIZIO
Mandami un messaggio o una nota audio su Telegram.
Mi trovi con il nome utente: paolocorradeghini (telegram.me/paolocorradeghini).
Oppure, nella sezione info trovi tutti i miei collegamenti Social Network.
Puoi iscriverti al canale Telegram di 3DMetrica che trovi cercando tredimetrica (telegram.me/tredimetrica) o direttamente a questo link.
Ci sono aggiornamenti quotidiani, informali e dietro le quinte.
Puoi ascoltare le puntate del Podcast di 3DMetrica andando alla pagina PODCAST di questo blog.
Puoi aggiungere la tua email alla Newsletter di 3DMetrica dove, una volta alla settimana, riassumo i post che pubblico sui canali social network, linko l’ultimo articolo del blog, la nuova puntata del podcast e l’ultimo video tutorial.
Usa il box che trovi a destra e nella home page e che dice: “Iscriviti alla Newsletter“.
Ed infine c’è anche il canale You Tube in cui carico video tutorial sull’uso di specifici software per la fotogrammetria e la gestione dei dati tridimensionali.
Proprio come quelli qui sopra!
SUPPORTAMI DIVENTANDO UN FINANZIATORE
Se questo articolo ti è stato utile puoi scegliere di supportare la creazione e la condivisione di cotenuti simili diventando un finanziatore di 3DMetrica su Patreon.
Puoi unirti a chi ha già scelto di aiutarmi a rendere il progetto possibile e sostenibile.
Trovi tutte le informazioni e puoi scoprire come fare a questo link.
Grazie davvero per il tuo tempo e per la tua attenzione!
A presto!
Paolo Corradeghini
Lasciami un commento!
2 Comments
bUONASERA VOLEVO SAPERE QUALE SOFTWARE USARE PER FARE I PROSPETTI CON PUNTI PRESI CON LASER SCANNER DAL BASSO (O STAZIONE TOTALE O GPS) E DRONE. GRAZIE
Ciao Cono,
io sono un utilizzatore prevalente delle tecniche structure from motion.
Uso i software di questo tipo per la creazione di ortomosaici: Agisoft Metashape e 3DFlow Zephyr.
Ciao.
Paolo
P.S.
Con i dati GPS e da Stazione Totale non è possibile fare ortomosaici.