E57 il "PDF delle nuvole di punti" un file 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 un'immagine piatta catturi la posizione esatta di un milione di minuscoli punti che coprono ogni parete, sedia e tazza di caffè. Fai ruotare un laser abbastanza velocemente e misura quanto è lontano tutto, ed ecco cosa ottieni: una nuvola di punti, una "fotografia" 3D fatta di punti misurati. Questo è un tour semplice e senza tecnicismi di ciò che vive davvero dentro un file E57 — e di un trucco intelligente che il nostro software fa con esso.

Perché serve un formato speciale?

Una foto normale è solo una griglia di pixel colorati — semplice. Una scansione 3D è più complessa. Per ciascuno dei suoi milioni di punti vuoi salvare dove si trova nello spazio (tre numeri: X, Y, Z), di che colore è, con quale intensità il laser è rimbalzato (la sua intensità — pensa a una "foto laser" in bianco e nero) e spesso le foto panoramiche scattate dallo scanner nello stesso momento.

Ora immagina che una persona scansioni con un Faro, un collega usi un Leica e il cliente apra il risultato in un software Autodesk. Tre macchine, tre programmi — e tutti devono poter leggere lo stesso file, anni dopo, senza supplicare un fornitore per un decodificatore segreto. Questo è il problema che E57 risolve. È uno standard aperto e neutrale rispetto ai fornitori (pubblicato come ASTM E2807 e basato sulla libreria open source libE57). Lo chiamano il "PDF delle nuvole di punti": un file portabile che tutti sanno leggere.

L'idea chiave: una mappa di testo con muscoli binari

In sostanza, un file E57 è un ibrido di due cose molto diverse unite insieme: un piccolo blocco di XML — testo semplice, leggibile dall'uomo, che funge da indice — e grandi blocchi di dati binari che contengono i milioni di numeri grezzi, archiviati in modo compatto per velocità.

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 X, Y, Z + colore Immagini (binarie) panorami JPEG / PNG incorporati Sezione XML "mappa" leggibile di tutto inizio del file fine del file l'intestazione registra esattamente dove inizia la mappa XML (xmlPhysicalOffset) Il software apre prima l'intestazione da 48 byte — dice "la mappa è 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 da dietro in avanti: 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 sa ancora quanto sarà grande tutto, quindi trasmette prima i dati grezzi e scrive un riepilogo ordinato quando ha finito. Il vantaggio è enorme: per estrarre una scansione da un file da 20 gigabyte, il software legge la piccola intestazione, salta alla mappa XML, trova la riga che dice "la scansione #3 si trova al byte 4.812.000.000" e va dritto lì.

Una rete di sicurezza discreta: l'intero file è suddiviso in "pagine" da 1024 byte e ogni pagina riserva i suoi ultimi 4 byte a un checksum — un'impronta che permette al software di accorgersi se il file è stato danneggiato.

Tutto pende da una sola 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 pende da una sola radice la sezione XML è un albero di cartelle — apri la radice e scendi 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 = dove si trovava lo scanner posizione (x,y,z) + rotazione (quaternione) ogni foto porta anche la propria pose, così il visualizzatore sa dove collocarla
Ogni scansione e foto ha la propria pose — la posizione dello scanner più la sua direzione di orientamento (memorizzata come quaternione) — ed è ciò che permette a più scansioni di combaciare in un unico modello allineato.

Due modi di scrivere un punto

Uno scanner laser non ragiona davvero in X, Y, Z. Sta fermo in un punto e ruota, e per ogni punto conosce tre cose: portata (quanto ha viaggiato il raggio), azimut (quanto gira attorno, da sinistra a destra) ed elevazione (quanto sale o scende). Queste sono coordinate sferiche — la lingua madre dello scanner. La maggior parte dei software, però, preferisce le coordinate cartesiane X, Y, Z. E57 memorizza volentieri entrambe, e convertirle è solo un po' di trigonometria veloce.

Due modi di scrivere un punto uno scanner ragiona in angoli & distanza — E57 può memorizzare i punti in entrambi i modi Sferico — come vede il sensore scanner il punto portata (distanza) azimut (sinistra-destra) + elevazione (su-giù) distanza · azimut · elevazione naturale per uno scanner laser rotante cartesiano — come lo vuole il software Z X Y il punto X · Y · Z semplici coordinate a griglia che tutti capiscono rapido trigonometria
I punti si trovano in una tabella compatta che E57 chiama CompressedVector: l'XML definisce le colonne una sola volta (X, Y, Z, colore, intensità...), poi il blocco binario contiene riga dopo riga valori compressi in modo compatto.

Tre tipi di foto incorporata

Le foto in images2D non sono link a file in qualche cartella — il vero JPEG o PNG è nascosto direttamente dentro l'E57. E c'è più di un tipo di foto incorporata. E57 avvolge ciascuna in una "rappresentazione" che dice al software quanto può fidarsi dell'immagine dal punto di vista geometrico. La differenza si riduce a una sola domanda: quanto è descritta completamente la fotocamera?

Tre modi in cui E57 contiene una foto stesso file, tre "rappresentazioni" — differiscono per quanto è descritta la fotocamera sphericalRepresentation un panorama completo a 360° × 180° avvolto su una sfera Misurabile ✓ ogni pixel = una direzione nota direzione dallo scanner il " guarda intorno da qui " panorama che producono la maggior parte degli scanner pinholeRepresentation obiettivo foto piatta Misurabile ✓ una normale foto con obiettivo, completamente calibrata la lunghezza focale + la dimensione del sensore consentono al software di conoscere l'angolo di ogni pixel visualReferenceRepresentation solo un'immagine Non per misurare ✗ nessun modello di fotocamera - solo per l'occhio umano "ecco com'era il posto " — una miniatura, una foto del sito
Un tocco ordinato: una singola voce immagine può contenere sia un raster preciso (a foro stenopeico o sferico) sia una semplice versione di riferimento visivo — così il visualizzatore mostra l'immagine amichevole mentre conserva quella misurabile per i calcoli.
  • sphericalRepresentation — un panorama completo a 360° × 180°, la familiare immagine allungata equirettangolare 2:1. Poiché la proiezione è nota, ogni pixel corrisponde a una direzione esatta, quindi si allinea perfettamente con la nuvola. Questa è la strada principale nella nostra pipeline: lo leggiamo, sistemiamo la tela in un 2:1 pulito e lo passiamo al visualizzatore di panorami.
  • pinholeRepresentation — una foto con obiettivo normale, descritta dal classico modello di camera stenopeica (lunghezza focale, dimensione del sensore, centro ottico). Questo basta al software per conoscere anche la direzione di ogni pixel, solo con un campo visivo più stretto. In pratica è soprattutto così che funziona Leica: scrive un cubemap già pronto — le sei facce piatte del cubo rivolte verso l'esterno — direttamente nell'E57, e il nostro percorso delle facce del cubo le unisce esattamente in un panorama completo. È uno dei casi più semplici da trasformare di nuovo in una pulita immagine a 360°.
  • 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 le conserva come commenti allegati invece di collocarle in 3D.

Ecco il punto. sphericalRepresentation è la scelta più diffusa, ma è sorprendentemente facile sbagliarla in modo sottile — ed è proprio per questo che lo stesso scan può apparire diverso da un programma all'altro.

  • Le zone cieche vengono ritagliate. Ogni scanner ha un punto che non può vedere — in genere proprio verso il basso, dove si trova il suo treppiede. Alcuni esportatori si limitano a ritagliare lì il panorama, lasciando un vuoto o un'altezza non standard.
  • Pixel rettangolari. Un panorama pulito ha pixel quadrati (pixelWidth = pixelHeight); alcuni file non li hanno, quindi l'immagine appare deformata finché non viene ridimensionata.
  • La direzione sbagliata è “forward”. 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 “forward” — alcuni esportatori la orientano a nord, altri a est. Un piccolo errore qui ruota l'intera vista.
  • Gli strumenti di modifica possono perdere dati. Il round-trip di un E57 tramite CloudCompare, per esempio, può far perdere la posizione di acquisizione delle immagini pinholeRepresentation — le foto restano, ma non sanno più dove sono state scattate.

In sintesi: sul campo, software diversi mostrano spesso lo stesso E57 in modo diverso. Il nostro importatore cerca di attenuare le stranezze più comuni — rendere quadrati i pixel rettangolari, correggere l'orientamento del panorama e standardizzare la tela 2:1 — così un tour risulta corretto indipendentemente dallo strumento che ha scritto il file.

Quando il panorama è incorporato nella nuvola 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 spara a caso — percorre una griglia ordinata di angoli, riga per riga, colonna per colonna, come un vecchio televisore che disegna uno 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 una scansione "strutturata" memorizza i suoi punti su una griglia — quindi la nuvola è già un'immagine la scansione, così come è memorizzata: righe × colonne colonna → azimut (0° ... 360° attorno) 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 come un rettangolo perfetto — il software reale sa saltarli.
In una scansione strutturata la nuvola e il panorama sono lo stesso oggetto — l'immagine non è una foto separata, ma la stessa disposizione dei punti.

Il vantaggio: se i punti sono disposti su una griglia, la nuvola è già un'immagine. Leggila riga per riga e ogni punto finisce su un pixel — il panorama torna senza alcuna reproiezione ingegnosa. Il file registra persino la dimensione della griglia nei suoi indexBounds (columnMaximum, rowMaximum), così il software conosce in anticipo la risoluzione — il nostro sintetizzatore prende la larghezza di output 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 sparato 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 inviato, nessun colpo". Mantengono integro il rettangolo, ma non sono geometria reale, quindi un lettore attento deve metterli da parte. Il nostro segnala ogni punto a distanza zero, lo parcheggia a una distanza fittizia molto lontana così che la matematica della griglia continui a funzionare, e non tratta mai quei punti fantasma del cielo come superfici reali quando costruisce la mappa di profondità o esporta la nuvola.

Trasformare una scansione di nuovo in una foto in cui puoi entrare

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. Perché una scansione è in realtà "una sfera completa di punti misurati come angoli attorno a un unico punto", quindi puoi srotolarla in un panorama piatto.

Da una nuvola di punti a una foto in cui puoi guardarti intorno il trucco dietro questo progetto: srotolare la sfera di punti in un panorama piatto 1 · la scansione ti circonda ogni punto ha un angolo rispetto al centro srotolare 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. Il colore dipinge i pixel, l'intensità del laser fornisce una vista in scala di grigi nitida e la distanza diventa una mappa di profondità.
Una nuvola, tre immagini: il colore dipinge i pixel, l'intensità del laser fornisce una scala di grigi nitida e senza ombre, e la distanza diventa una mappa di profondità — ed è questo che rende un panorama piatto misurabile e percorribile.

Annota l'angolo di ogni punto, lascia che sinistra-destra scorra sulla larghezza dell'immagine e su-giù sulla sua altezza, e ogni punto finisce su un pixel — il familiare panorama equirettangolare 2:1 allungato. La mappa di profondità è l'ingrediente magico: con una distanza dietro ogni pixel, un panorama che sembra piatto diventa misurabile e percorribile — fai clic su due punti di una parete e il software conosce la distanza reale, perché non ha mai dimenticato i dati 3D sottostanti.

Allora, perché E57 è importante?

Perché è il punto d'incontro neutrale. Un rilevatore scansiona un ponte con un marchio di hardware, un ingegnere lo apre in un software diverso e un architetto lo archivia per i prossimi vent'anni — ed E57 è l'unico file su cui tutti e tre possono contare, senza che un fornitore tenga le chiavi. Tiene insieme colore, intensità, geometria, panorami e le importantissime posizioni del sensore in un unico posto, come standard aperto che chiunque può implementare.

Un ultimo fatto curioso: l'ora di acquisizione dentro un E57 è conteggiata in tempo GPS — secondi dal 6 gennaio 1980, il momento in cui gli orologi dei satelliti GPS si sono accesi — e non dalla solita epoca informatica del 1970. Sbagliare questo dettaglio fa leggere una scansione di oggi come se fosse avvenuta nel 2013.

Vuoi approfondire?

Assistente IA
Ciao! Sentiti libero di fare qualsiasi domanda su tour virtuali, nuvole di punti, 3D Gaussian Splatting, modelli 3D, utilizzo del sito, pagamenti e altro. Troverò la risposta o inoltrerò la tua domanda al nostro team di supporto.
La nostra IA non è riuscita a rispondere alla tua domanda. Il nostro team di supporto sarà lieto di rispondere alla tua domanda. Per favore, fornisci il tuo indirizzo email. Non usiamo l'email per le newsletter. La usiamo solo per rispondere alla tua domanda.