In questo articolo ti dico come puoi georeferenziare una nuvola di punti con il software open source Cloud Compare.
Georeferenziare una nuvola di punti vuol dire assegnare, a ciascuno di essi (e spesso sono milioni di punti!), delle coordinate, in un opportuno sistema di riferimento.
La georeferenziazione è parente strettissima delle coordinate e dei sistemi di riferimento.
Direi che ne è proprio figlia legittima!
E si fatica a parlare di lei e delle pratiche operative senza introdurre i genitori.
Ma non lo faccio in questo articolo, perchè diventerebbe lughissimo e poi perchè l’ho già fatto, a pezzi, in altri post di questo blog.
Te li linko qui sotto:
Coordinate geografiche e coordinate piane;
I sistemi di riferimento;
Trasformare le coordinate;
I codici EPSG.
E ti segnalo anche questo articolo che parla proprio del principio teorico della georeferenziazione.
PERCHÈ GEOREFERENZIARE UNA NUVOLA DI PUNTI
Anche se in Italia vige l’obbligo di legge (almeno per le Pubbliche Amminstrazioni) di rilasciare i dati geografici nel sistema di riferimento ETRF2000 (e convertire quelli esistenti ed in circolazione!), si trovano ancora un sacco di informazioni territoriali nel vecchio Roma40.
O, peggio ancora, nell’ED50 (anche se ormai sono davvero pochi casi isolati)!
Potresti avere l’esigenza di portare i punti di una nuvola nel sistema di riferimento ETRF89, perchè magari li devi scambiare con qualcuno in Germania che li lavora a livello Europeo.
Oppure potresti avere a che fare con un cartografo americano che li vuole nel sistema ITRF o nel WGS84-UTM.
Vabbè, non mi allargo troppo!
Non serve…
Rimango in Italia e ti parlo di un caso concreto, che capita spesso.
Eccolo: hai ricevuto una nuvola di punti in coordinate geografiche (UTM) nel sistema di riferimento ETRF2000 e la vuoi portare in Roma40 e sempre in coordinate geografiche (Gauss-Boaga).
Ora ti dico come fare.
UN METODO NON RIGOROSO
Se hai letto qualche altro articolo del blog ti sarà capitato di trovare già queste parole: “non rigoroso“.
Non rigoroso si riferisce ad un metodo che lavora forzando un pochino i principi di base della topografia per ottenere un risultato utile, in poco tempo ed in pochi passaggi.
Non rigoroso non significa sbagliato ma piuttosto “non del tutto corretto“.
Con un metodo non rigoroso ottieni sempre un risultato ma devi stare molto attento a verificarlo e a vedere se va bene per il tuo lavoro e per i tuoi scopi.
Ecco, il metodo di cui ti parlo in questo articolo è non rigoroso.
Te la faccio breve.
Per georeferenziare qualcosa (una nuvola di punti las, un’ortofoto raster, una planimetria vettoriale in dxf), ballando tra due sistemi di riferimento, si usano delle trasformazioni matematiche più o meno complesse:
- formule a tre parametri (Molodensky);
- formule a sette parametri (Bursa Wolf o Helmert);
- operazioni mediante grigliati di trasformazione (ctable, NTv1 e NTv2).
Le trasformazioni a tre o sette parametri non sono il massimo, perchè non riescono a considerare le distorsioni tra due datum.
La soluzione topograficamente migliore è quella di usare i grigliati prodotti dall’IGM.
Il procedimento che ti spiego in questo articolo assomiglia ad un metodo a tre parametri ma è ancora più rozzo!
Si tratta di applicare una traslazione piana per portare i punti di una nuvola da un sistema di riferimento ad un altro, conoscendo le coordinate di punti noti in entrambe i sistemi.
È una trasformazione a due parametri che:
- funziona solo per trasformare una nuvola di punti tra due sistemi di riferimento da coordinate piane a coordinate piane (non funziona da coordinate piane a geografiche o viceversa);
- dà dei risultati accettabili solo per superfici di estensioni ridotte (direi meno di 100 ettari).
- non tiene per niente conto dei database EPSG ma devi conoscere le coordinate di qualche punto in entrambe i sistemi di riferimento, per sapere che traslazione applicare.
CLOUD COMPARE
Anche qui uso Cloud Compare che è, a mio avviso, il miglior software open source per elaborare nuvole di punti.
Le pagine di questo blog sono piene di articoli su Cloud Compare e sulla gestione delle nuvole di punti!
Un po’ perchè funziona davvero bene e ti dà la possibilità di trattare dati tridimensionali (nuvole di punti) senza investire soldi in licenze software e poi perchè le nuvole di punti sono un dato sempre più diffuso che deve essere sia da chi fa il rilievo ma, soprattutto, da chi lo commissiona, lo riceve e lo deve elaborare per i suoi scopi.
Qui ci sono due articoli su come usare Cloud Compare per fare delle sezioni:
una sezione da una nuvola di punti,
sezioni con Cloud Compare.
Da qui puoi sapere come generare un Modello Digitale di Elevazione (DEM) e le curve di livello.
Qui invece ho parlato di come pulire una nuvola di punti da vegetazione ed elementi antropici sul terreno.
Qui puoi alleggerire una nuvola densa di punti.
Ed infine qui trovi come trattare i tappeti erbosi o la vegetazione a quota costante per provare ad arrivare al dato topografico a terra.
Presentazione e slogan finiti.
Iniziamo le operazioni!
COME GEOREFERENZIARE UNA NUVOLA DI PUNTI IN CLOUD COMPARE
PROBLEMA
Devo georeferenziare, in coordinate piane, una nuvola di punti portandola dal sistema di riferimento ETRF2000 al sistema di riferimento Roma40.
DATI
Una nuvola di punti, da rilievo aerofotogrammetrico, georeferenziata in ETRF2000.
Il file è in formato LAS.
Le coordinate dei punti di apoggio che ho rilevato sul campo ed usato nell’elaborazione fotogrammetrica, note nei due sistemi di riferimento ETRF2000 e Roma40.
SVOLGIMENTO 🙂
IMPORTA LA NUVOLA DI PUNTI NEL SOFTWARE
Quando carichi la nuvola di punti, georeferenziata, in Cloud Compare, il software ti chiede due conferme:
- una è per le informazioni da caricare insieme ai punti;
- l’altra è per una traslazione che ti viene consigliato di fare per evitare errori nell’elaborazione di coordinate troppo grandi (tipiche delle coordinate piane nei sistemi di riferimento che si usano di solito).
Conferma tutto con un “Apply all” e “Yes to all“.
E non preoccuparti, la traslazione non è reale ma fittizia, funzionale esclusivamente al lavoro del software.
LEGGI LE COORDINATE DELLA NUVOLA DI PUNTI
Puoi interrogare la nuvola di punti per conoscerne le coordinate.
Usa lo strumento “Point Picking” che trovi nel menù “Tools“.
Seleziona la nuvola di punti nell’albero dei layer (DB Tree).
Vai su Tools – Point Picking.
Fai click in un punto della nuvola.
Ti apparirà una piccola finestrella, dove trovi:
- nella prima colonna, le coordinate x,y,z, elaborate dal software per i suoi calcoli (sono il risultato della traslazione che hai accettato di fargli fare all’importazione dei dati);
- nella seconda colonna, le coordinate x,y,z originali e non trattate (Est, Nord in ETRF2000 + la quota ortometrica);
- nella terza colonna, le informazioni di colore, RGB (Red Green Blue) del punto.
Lo strumento Point Picking ti permette anche di sapere le distanze tra due punti della nuvola e di misurare superfici.
Ma questa è un’altra storia.
CALCOLA I VALORI DELLA TRASLAZIONE
Ora devi calcolare i valori della traslazione che dovrai applicare alla nuvola di punti per georeferenziarla.
Io lo faccio usando le coordinate dei punti di appoggio che ho usato per l’elaborazione fotogrammetrica.
Ho a disposizione 21 punti di cui conosco le coordinate, sia nel sistema di riferimento della nuvola da trasformare (ETRF2000) che in quello di destinazione (Roma40).
Le conosco perchè le ho trasformate, con il software Convergo ed i grigliati dell’IGM, dopo averle rilevate sul campo con un ricevitore satellitare in modalità nRTK.
Per ogni punto calcolo le differenze tra coordinata Est (X) e coordinata Nord (Y).
Faccio una media delle differenze, per trovare un valore unico per la traslazione lungo Est e un altro lungo Nord.
Dallo screenshot del foglio di calcolo che ti ho messo qui sopra risulta che un punto nel sistema di riferimento ETRF2000 sta, mediamente, più in basso (asse Y, Nord) di 17,64 m rispetto allo stesso punto all’interno del sistema di riferimento Roma40, e più a sinistra (asse X, Est) di 1.000.027,67 m (questo numero altissimo è legato alla falsa origine delle coordinate X nel sistema cartografico Roma 40, riportato in piano con la proiezione di Gauss-Boaga).
Per georeferenziare la nuvola di punti nel sistema di riferimento piano Roma40 – GaussBoaga, partendo dal sistema ETRF2000 devo aggiungere 17,64 m alle coordinate Y e 1000027,67 alle X.
Questi sono i valori delle componenti del vettore di traslazione piana.
Attenzione però perchè questi valori non sono assoluti e non vanno bene per tutte le trasformazioni che vuoi fare in giro per l’Italia!
E neppure per la stessa provincia!
Verifica sempre i valori del vettore traslazione prima di procedere alla georeferenziazione.
Quando passi da un sistema di riferimento ad un altro incappi in un problema di deformazione tra datum diversi.
E questo implica che la differenza planimetrica tra le coordinate del solito punto non è per niente costante nel territorio italiano.
Non è un valore che puoi prendere ed usare ovunque e come vuoi!
I numeri che ti ho scritto qui sopra valgono solo per il rilievo che sto usando come esempio.
È una zona che sta nella parte orientale del Golfo di La Spezia.
Non li userei per convertire punti che stanno dall’altra parte, nella porzione occidentale del golfo.
Ma neppure per fare una trasformazione di punti ad 1 km di distanza in linea d’aria.
Il metodo non è rigoroso.
Non lo rendere una schifezza totale!
🙂
Se non hai a disposizione coordinate di punti locali, nei sistemi di riferimento di partenza e destinazione (la partenza in realtà la conosci sempre), potresti provare ad usare i portali cartografici regionali.
Il Geoscopio della Regione Toscana ti permette di interrogare i dataset cartografici al suo interno per sapere le coordinate dello stesso punto in più sistemi di riferimento.
Da queste informazioni, con qualche punto sparso nell’area dove stai lavorando, riesci a calcolare il vettore traslazione.
APPLICA LA TRASLAZIONE
Ora che conosci, con buona confidenza, le componenti del vettore traslazione, sposta la nuvola di punti.
Per farlo usa il comando “Apply Transformation” che trovi nel menù “Edit“, o facendo CTRL+T.
Nella finestra che ti apparirà, seleziona il pannello “Axis/Angles” (da cui puoi applicare rotazioni o traslazioni).
Nella parte relativa alle traslazioni (“Translation“) inserisci in X ed in Y i valori del vettore traslazione.
Io ci ho messo i numeri che ho trovato prima (cambiati di segno).
Quando confermi il comando, Cloud Compare ti chiede, di nuovo, se può gestire le coordinate per mantenere le precisioni.
I numeri sono ancora piuttosto alti e potrebbero creargli delle difficoltà.
Digli di “Yes“!
La nuvola sparisce dall’area di lavoro.
Ha subìto la traslazione.
Se passi ad uno zoom più ampio, dovresti trovarla nella nuova posizione.
Puoi controllare la traslazione ancora con lo strumento “Point Picking“.
Qui sotto ti metto le coordinate del solito punto prima e dopo la traslazione.
La colonna centrale si riferisce alle coordinate nei sistemi si riferimento cartografici, prima e dopo.
La colonna di destra non è cambiata ed è relativa al colore del punto della nuvola.
Le colonne di sinistra hanno invece valori molto diversi perchè Cloud Compare ha adattato le nuove coordinate al suo spazio di lavoro.
ESPORTA LA NUVOLA TRASLATA E GEOREFERENZIATA
Ora che hai spostato la nuvola dove deve stare la puoi salvare o esportare nelle nuove coordinate e nei formati che preferisici: las, laz, ply, e57, dxf…
Se esporti in las (il formato più comune per le nuvole di punti), Cloud Compare ti mostra una finestra dove puoi scegliere la scala del file.
Scegli “Highest Resolution” così mantieni le coordinate al posto giusto!
Ora puoi prendere il nuovo file e farci quello che vuoi.
Le coordinate dei punti sono cambiate e sono quelle del sistema di riferimento su cui ti sei spostato.
Fine del processo
Spero che questo articolo su come georeferenziare una nuvola di punti con Cloud Compare ti possa essere utile.
Puoi fare la stessa procedura in un CAD?
Sì, si tratta di fare la stessa procedura di traslazione che hai visto poco fa.
Tuttavia se lavori in CAD importando il file DXF della nuvola di punti, perdi le informazioni sul colore.
Questo procedimento è lo stesso che si usa nella georeferenziazione che si fa in un GIS?
No, in un GIS ti appoggi a procedure più rigorose che sfruttano tutti i parametri di trasformazione tra due sistemi di riferimento.
Il processo di questo articolo è un po’ barbaro ma più veloce perchè in un GIS non è banale gestire nuvole di milioni di punti tridimensionali.
Qual è il miglior modo per georeferenziare una nuvola di punti fotogrammetrica in un sistema di riferimento specifico?
Probabilmente non quello che ti ho appena descritto.
La cosa migliore che puoi fare è utilizzare, nell’elaborazione fotogrammetrica (software Structure from Motion), punti di appoggio che hanno coordinate espresse nel sistemi di riferimento di destinazione.
Fare l’orientamento (interno, esterno, relativo ed assoluto) delle immagini di un dataset già con le coordinate “giuste” è il metodo più rigoroso, sicuro e robusto che c’è.
Ci sono altri modi per georeferenziare una nuvola di punti?
Sì, ma questo è l’unico che mi viene in mente che sia veloce, facile, economico e che non ti richiede di conoscere nozioni avanzate di fotogrammetrica, laser scanning o misure.
Se conosci altri metodi e procedure simili ti prego di segnalarli nei commenti.
Sarebbe interessante ed utile per tutti!
🙂
Per qualsiasi dubbio, domanda, critica o suggerimento scrivimi su Telegram a telegram.me/paolocorradeghini.
Ti puoi anche iscrivere al canale di 3DMetrica che trovi a telegram.me/tredimetrica.
C’è anche il Podcast di 3DMetrica, che puoi ascoltare andando nella pagina PODCAST di questo blog.
E poi ti puoi iscrivere alla Newsletter di 3DMetrica dove riassumo i post che pubblico quotidianamente sui canali social network, ti segnalo l’ultimo articolo del blog e la nuova puntata del podcast oltre che per eventuali incontri, corsi o appuntamenti dove sarò e dove, magari, ci si può incontrare per scambiarci un saluto.
Ti puoi iscrivere nel box che trovi a destra e che dice: “Iscriviti alla Newsletter“.
Grazie per il tuo tempo e per la tua attenzione.
So che sono preziosi e mi onora sapere che li hai dedicati un po’ a leggere questo articolo.
A presto!
Paolo Corradeghini
Lasciami un commento!
2 Comments
Ciao Paolo,
Ho Generato una nuvola di punti densa da Metashape referenziandola tramite GCP ed esportata in PLY con coordinate WGS 84 Epsg 4326. Per le successive elaborazioni la apro in Cloud Compare e la nuvola viene ricostruita come una lunga serie di punti disposti su un piano XY.
Non capisco se Sia un problema di export di Metashape o il mio (molto piu probabile) legato a qualche impostazione di lavoto che non ho considerato.
Per precisione, esportando la stessa nuvola in PLY ma con coordinate locali , mi viene letta correttamente da CC ma senza le informazioni geografiche.
Dove sbaglio?
Grazie mille per tutto.
Sei una persona di gran valore.
Ciao Nicola,
si tratta di un problema di coordinate.
Cloud Compare non digerisce le coordinate geografiche ma solo quelle proiettate.
Ne parlo un po’ più diffusamente in questo video sul canale You Tube: https://youtu.be/O7YWdNAMnd8
Spero possa esseri utile!
Ciao e grazie per il tuo apprezzamento!
Paolo