E57 il "PDF delle nuvole di punti" un unico file in formato aperto che contiene milioni di punti 3D misurati, i loro colori e le foto panoramiche che li accompagnano.
Base di conoscenza · formati di file

E57, spiegato: il "PDF delle nuvole di punti"

Immagina di fotografare una stanza, ma invece di ottenere un'immagine piatta acquisisci la posizione esatta di un milione di minuscoli punti che ricoprono pareti, sedie e tazze. Fai ruotare rapidamente un laser e misura la distanza di ogni oggetto: il risultato è una nuvola di punti, una "fotografia" 3D composta da punti misurati. Questa guida semplice e senza tecnicismi mostra che cosa contiene davvero un file E57 e un ingegnoso espediente usato dal nostro software.

Perché serve un formato speciale?

Una normale foto è solo una griglia di pixel colorati: semplice. Una scansione 3D è più complessa. Per ognuno dei suoi milioni di punti occorre memorizzare dove si trova nello spazio (tre numeri: X, Y, Z), di che colore è, con quale intensità viene riflesso il raggio laser (la sua intensità, simile a una "foto laser" in bianco e nero) e, spesso, le foto panoramiche scattate contemporaneamente dallo scanner.

Immagina ora che una persona esegua la scansione con uno scanner Faro, un collega ne usi uno Leica e il cliente apra il risultato in un software Autodesk. Tre dispositivi e tre programmi diversi, che devono poter leggere lo stesso file anche a distanza di anni, senza dover chiedere a un produttore un decodificatore segreto. È questo il problema risolto da E57: uno standard aperto e indipendente dai produttori (pubblicato come ASTM E2807 e basato sulla libreria open source libE57). Viene chiamato il "PDF delle nuvole di punti": un unico file portabile che tutti possono leggere nello stesso modo.

L'idea chiave: una mappa testuale con la potenza dei dati binari

In sostanza, un file E57 è un ibrido che unisce due elementi molto diversi: una piccola sezione XML, cioè testo semplice e leggibile che funge da indice, e grandi blocchi di dati binari contenenti milioni di numeri grezzi, archiviati in modo compatto per velocizzare l'accesso.

Anatomia di un file E57 un file = una piccola intestazione + grandi blocchi binari + un "indice" testuale alla fine Intestazione 48 byte Dati dei punti (binari) milioni di punti (X, Y, Z + colore) Immagini (binarie) panorami JPEG/PNG incorporati Sezione XML "mappa" leggibile di tutti i contenuti inizio del file fine del file l'intestazione registra esattamente dove inizia la mappa XML (xmlPhysicalOffset) Il software legge prima l'intestazione da 48 byte, che indica: "la mappa si trova al byte N". Salta alla mappa XML, legge il contenuto e poi va direttamente al blocco binario di cui ha bisogno. Non serve leggere gigabyte per trovare una scansione — la mappa rende l'accesso immediato.
Un file E57 si legge a ritroso: un'intestazione da 48 byte punta alla "mappa" XML alla fine, che a sua volta indica dove si trova ogni blocco binario.

Perché mettere la mappa alla fine? Perché mentre uno scanner sta scrivendo il file non ne conosce ancora le dimensioni complessive, quindi scrive prima i dati grezzi in sequenza e, una volta terminato, aggiunge un riepilogo ordinato. Il vantaggio è enorme: per estrarre una scansione da un file di 20 gigabyte, il software legge la minuscola intestazione, passa alla mappa XML, trova la riga che dice "la scansione #3 si trova al byte 4.812.000.000" e va dritto lì.

Un sistema di sicurezza discreto: l'intero file è suddiviso in "pagine" da 1024 byte e gli ultimi 4 byte di ogni pagina sono riservati a una somma di controllo, un'impronta che consente al software di rilevare eventuali danneggiamenti del file.

Tutto si dirama da un'unica radice

Apri quella mappa XML e trovi un albero — proprio come le cartelle sul tuo computer. C'è un solo root e due rami fanno la maggior parte del lavoro: data3D, un elenco numerato di scansioni, e images2D, un elenco numerato di foto (di solito i panorami a 360° scattati dallo scanner).

L'albero E57: tutto si dirama da un'unica radice la sezione XML è un albero di cartelle — apri la radice e naviga fino a qualsiasi scansione o foto root data3D un elenco di scansioni [ scan 0, scan 1, ... ] metadati chi / quando sistema di coordinate images2D un elenco di foto [ pano 0, pano 1, ... ] scan 0 punti + pose scan 1 … points prototype X Y Z · R G B · intensity pose = posizione e orientamento dello scanner posizione (x, y, z) + rotazione (quaternione) ogni foto ha anche una propria pose, così il visualizzatore sa dove collocarla
A ogni scansione e a ogni foto è associata una propria pose, cioè la posizione del dispositivo e la direzione in cui è rivolto (memorizzata come quaternione). Questo consente di unire più scansioni in un unico modello allineato.

Due modi di scrivere un punto

Uno scanner laser non ragiona realmente in termini di X, Y, Z. Rimane fermo in un punto e ruota, rilevando per ogni punto tre valori: la distanza percorsa dal raggio, l'azimut (l'angolo orizzontale, da sinistra a destra) e l'elevazione (l'angolo verso l'alto o il basso). Queste sono coordinate sferiche, il linguaggio naturale dello scanner. La maggior parte dei software, invece, preferisce le normali coordinate cartesiane X, Y, Z. E57 può memorizzare coordinate dell'uno o dell'altro tipo e per passare da un tipo all'altro basta un po' di trigonometria.

Due modi di scrivere un punto uno scanner ragiona in angoli e distanza — E57 può memorizzare i punti in entrambi i modi Coordinate sferiche — come vede il sensore scanner il punto distanza azimut (sinistra-destra) + elevazione (su-giù) distanza · azimut · elevazione naturale per uno scanner laser rotante Coordinate cartesiane — come le vuole il software Z X Y il punto X · Y · Z semplici coordinate su griglia che tutti capiscono trigonometria rapida
I punti sono disposti in una tabella compatta che E57 chiama CompressedVector: l'XML definisce una sola volta le colonne (X, Y, Z, colore, intensità...), quindi il blocco binario contiene una sequenza di righe con valori fittamente impacchettati.

Tre tipi di foto incorporate

Le foto in images2D non sono link a file contenuti in qualche cartella — il file JPEG o PNG vero e proprio è incorporato direttamente all'interno dell'E57. E c'è più di un tipo di foto incorporata. E57 racchiude ciascuna foto in una "rappresentazione" che indica al software quanto l'immagine sia affidabile dal punto di vista geometrico. La differenza si riduce a una sola domanda: quanto è completa la descrizione della fotocamera?

Tre modi in cui E57 contiene una foto stesso file, tre "rappresentazioni": differiscono per il livello di dettaglio con cui è descritta la fotocamera sphericalRepresentation un panorama completo a 360° × 180° avvolto su una sfera Misurabile ✓ ogni pixel = una direzione nota dallo scanner il panorama "guardati intorno da qui" prodotto dalla maggior parte degli scanner pinholeRepresentation obiettivo foto piana Misurabile ✓ una normale foto scattata con un obiettivo, completamente calibrata la lunghezza focale + la dimensione del sensore dicono al software l'angolo di ogni pixel visualReferenceRepresentation solo un'immagine Non adatta alle misurazioni ✗ nessun modello di camera — solo per l'occhio umano "ecco com'era il posto " — una miniatura, una foto del sito
Una soluzione ben studiata: una singola voce immagine può contenere sia un raster preciso (stenopeico o sferico) sia una semplice versione di riferimento visivo — così il visualizzatore mostra l'immagine più accessibile, conservando quella misurabile per i calcoli.
  • sphericalRepresentation — un panorama completo a 360° × 180°, la classica immagine equirettangolare 2:1 allungata. Poiché la proiezione è nota, ogni pixel corrisponde a una direzione precisa e si allinea perfettamente con la nuvola di punti. È il percorso principale del nostro flusso di elaborazione: leggiamo l'immagine, la adattiamo a un rapporto 2:1 esatto e la passiamo al visualizzatore di panorami.
  • pinholeRepresentation — una normale foto scattata con un obiettivo, descritta dal classico modello di camera stenopeica (lunghezza focale, dimensioni del sensore, centro ottico). Anche in questo caso il software può determinare la direzione di ogni pixel, ma solo entro un campo visivo più ristretto. In pratica, è soprattutto così che funziona Leica: inserisce direttamente nel file E57 una cubemap già pronta, composta dalle sei facce piane di un cubo rivolte verso l'esterno, e il nostro processo dedicato le unisce per creare un panorama completo. È uno dei casi più semplici da riconvertire in un'immagine a 360° pulita.
  • visualReferenceRepresentation — una foto senza alcun modello di camera, esplicitamente "solo per l'occhio umano". Non la si può usare per misurare né proiettarla sulla nuvola; è solo un'immagine di riferimento. Il nostro importatore conserva queste immagini come commenti allegati invece di collocarle in 3D.

Ecco il punto. sphericalRepresentation è la scelta più diffusa, ma è sorprendentemente facile commettere piccoli errori — ed è proprio per questo che la stessa scansione può apparire diversa da un programma all'altro.

  • Le zone cieche vengono ritagliate. Ogni scanner ha un punto che non riesce a vedere, in genere quello immediatamente sotto di sé, dove si trova il treppiede. Alcuni software di esportazione si limitano a ritagliare il panorama in quel punto, lasciando uno spazio vuoto o un'altezza non standard.
  • Pixel non quadrati. Un panorama corretto ha pixel quadrati (pixelWidth = pixelHeight); in alcuni file non lo sono, quindi l'immagine appare deformata finché non viene ridimensionata.
  • La direzione sbagliata è “avanti”. La rotazione memorizzata con un panorama indica quale direzione si trova al centro dell'immagine, e non esiste un accordo universale su cosa significhi davvero “avanti” — alcuni esportatori la orientano a nord, altri a est. Basta un piccolo errore per ruotare l'intera vista.
  • Gli strumenti di modifica possono perdere dati. Il passaggio di un file E57 attraverso CloudCompare, per esempio, può far perdere la posizione di acquisizione delle immagini pinholeRepresentation — le foto restano, ma non conservano più l'informazione su dove sono state scattate.

In sintesi, software diversi spesso visualizzano lo stesso file E57 in modo diverso. Il nostro importatore cerca di compensare le anomalie più comuni, ridimensionando i pixel non quadrati, correggendo l'orientamento del panorama e uniformando l'immagine al formato 2:1, affinché il tour appaia corretto indipendentemente dallo strumento che ha generato il file.

Quando il panorama è incorporato nella nuvola di punti stessa

Ecco una delle idee più eleganti — e meno apprezzate — dell'intero formato. Oltre ai panorami archiviati come immagini separate, un panorama può anche nascondersi all'interno della nuvola di punti stessa. Uno scanner laser non emette impulsi in modo casuale — scandisce una griglia ordinata di angoli, riga per riga, colonna per colonna, come un vecchio televisore che compone un'immagine sullo schermo. E57 può preservare quest'ordine: ogni punto riceve un rowIndex e un columnIndex che indicano da quale cella della griglia proviene. Una scansione salvata in questo modo si chiama strutturata.

Quando il panorama è incorporato nella nuvola di punti una scansione "strutturata" memorizza i suoi punti su una griglia — quindi la nuvola di punti è già un'immagine la scansione, così come è memorizzata: righe × colonne colonna → azimut (0°-360° tutt'intorno) riga → elevazione (su-giù) cielo: il laser non ha colpito nulla punti segnaposto fittizi (distanza = 0 / "nessun ritorno") leggere la griglia in ordine = pixel → panorama 2:1 istantaneo, senza riproiezione larghezza della griglia (columnMaximum + 1) = larghezza del panorama Poiché ogni punto ricorda il proprio rowIndex e columnIndex, l'immagine e la geometria 3D sono lo stesso oggetto. I punti fittizi del cielo sono il prezzo da pagare per mantenere la griglia perfettamente rettangolare: il software sa che deve ignorarli.
In una scansione strutturata, la nuvola di punti e il panorama sono lo stesso oggetto: l'immagine non è una foto separata, ma nasce dalla disposizione stessa dei punti.

Il vantaggio: se i punti sono disposti su una griglia, la nuvola di punti è già un'immagine. Leggila riga per riga e ogni punto finisce su un pixel — il panorama riappare senza bisogno di alcuna sofisticata riproiezione. Il file registra persino la dimensione della griglia nei suoi indexBounds (columnMaximum, rowMaximum), così il software conosce in anticipo la risoluzione — il nostro sintetizzatore ricava la larghezza dell'immagine risultante direttamente da columnMaximum + 1.

Ma una griglia deve essere un rettangolo perfetto, e il mondo reale non lo è. Che dire delle direzioni in cui il raggio è stato emesso verso il cielo aperto e non è tornato nulla? La risposta è pragmatica: riempire quelle celle con punti fittizi — molto spesso con una distanza esattamente pari a 0, cioè "raggio emesso, nessun oggetto colpito". Questi punti mantengono integro il rettangolo, ma non rappresentano geometria reale, quindi chi legge il file deve avere cura di escluderli. Il nostro software contrassegna ogni punto a distanza zero, lo colloca a una distanza fittizia molto elevata affinché i calcoli sulla griglia continuino a funzionare e non tratta mai quei punti fantasma nel cielo come superfici reali quando costruisce la mappa di profondità o esporta la nuvola di punti.

Ritrasformare una scansione in una foto in cui puoi immergerti

Non tutte le scansioni arrivano su una griglia già pronta — alcune sono solo un insieme sparso e non strutturato di punti. La buona notizia: il panorama è ancora recuperabile, ed è qui che il formato incontra il nostro lavoro. Poiché una scansione è in realtà "una sfera completa di punti misurati come angoli attorno a un unico punto", puoi srotolarla in un panorama piatto.

Da una nuvola di punti a una foto in cui puoi guardarti intorno il trucco alla base di questo progetto: srotolare la sfera di punti in un panorama piatto 1 · la scansione ti circonda ogni punto ha un angolo rispetto al centro srotola 2 · gli angoli diventano una griglia piatta su ↕ giù ← 360° completi da sinistra a destra → riempi gli spazi vuoti 3 · tre immagini panorama a colori intensità (b/n) mappa di profondità La nuvola di punti è il panorama — misurata in angoli, si srotola in un'immagine piatta 2:1. I dati cromatici colorano i pixel, l'intensità laser offre una nitida visualizzazione in scala di grigi e la distanza diventa una mappa di profondità.
Una nuvola di punti, tre immagini: i dati cromatici colorano i pixel, l'intensità laser genera un'immagine nitida in scala di grigi e senza ombre, mentre la distanza diventa una mappa di profondità. È questo che rende un panorama piatto misurabile e percorribile.

Proietta ogni punto in base al suo angolo — da sinistra a destra lungo la larghezza dell'immagine e dall'alto verso il basso lungo l'altezza — su un pixel del panorama allungato nel classico formato equirettangolare 2:1. La mappa di profondità è l'ingrediente magico: con una distanza associata a ogni pixel, un panorama apparentemente piatto diventa misurabile e percorribile — fai clic su due punti di una parete e il software può calcolare la distanza reale, perché conserva i dati 3D sottostanti.

Allora, perché E57 è importante?

Perché è il punto d'incontro neutrale. Un tecnico del rilievo esegue la scansione di un ponte con hardware di una marca, un ingegnere apre il file con un software diverso e un architetto lo archivia per i vent'anni successivi — ed E57 è il formato su cui tutti e tre possono contare, senza dipendere da un singolo fornitore. Conserva insieme, in un unico file, colore, intensità, geometria, panorami e le fondamentali posizioni del sensore, secondo uno standard aperto che chiunque può implementare.

Un'ultima curiosità: il momento dell'acquisizione memorizzato in un file E57 è espresso in tempo GPS, ovvero in secondi trascorsi dal 6 gennaio 1980, quando è iniziato il conteggio del tempo GPS, e non dalla consueta epoca informatica del 1970. Se lo interpreti male, una scansione eseguita oggi sembra risalire al 2013.

Vuoi approfondire?

  • libE57.org — la libreria open source di riferimento e la risorsa principale dedicata al formato
  • ASTM E2807 — lo standard ufficiale
  • libE57Format · Image2D — le definizioni esatte delle rappresentazioni sferica, stenopeica e di riferimento visivo
  • Paul Bourke’s E57 notes — una breve descrizione tecnica dell'intestazione e della struttura
Assistente IA
Ciao! Puoi fare qualsiasi domanda su tour virtuali, nuvole di punti, 3D Gaussian Splatting, modelli 3D, uso del sito web, pagamenti e altro ancora. Troverò la risposta oppure inoltrerò la tua domanda al nostro team di assistenza.
La nostra IA non è riuscita a rispondere alla tua domanda. Il nostro team di assistenza sarà lieto di rispondere alla tua domanda. Fornisci il tuo indirizzo email. Non utilizziamo il tuo indirizzo email per inviarti newsletter, ma solo per rispondere alla tua domanda.