E57 "PDF-ul norilor de puncte" un fișier în format deschis care conține milioane de puncte 3D măsurate, culorile lor și fotografiile panoramice asociate.
Baza de cunoștințe · formate de fișiere

E57 pe înțelesul tuturor: "PDF-ul norilor de puncte"

Imaginați-vă că fotografiați o cameră, dar, în locul unei imagini plate, înregistrați poziția exactă a unui milion de puncte minuscule de pe fiecare perete, scaun și cană de cafea. Dacă rotiți suficient de repede un laser și măsurați distanța până la fiecare obiect, obțineți un nor de puncte: o "fotografie" 3D alcătuită din puncte măsurate. Vă explicăm fără jargon ce conține, de fapt, un fișier E57 și un truc ingenios pe care îl aplică software-ul nostru.

De ce este necesar un format special?

O fotografie obișnuită este doar o grilă de pixeli colorați. O scanare 3D este mai complexă. Pentru fiecare dintre milioanele sale de puncte trebuie stocate poziția în spațiu (trei numere: X, Y, Z), culoarea, cât de puternic se reflectă raza laser (intensitatea — imaginați-vă o "fotografie laser" alb-negru) și, adesea, fotografiile panoramice realizate simultan de scaner.

Imaginați-vă că o persoană scanează cu un scaner Faro, un coleg folosește unul Leica, iar clientul deschide rezultatul într-un program Autodesk. Trei dispozitive, trei programe — și toate trebuie să poată citi același fișier chiar și peste ani, fără a cere producătorului un decodor secret. Aceasta este problema pe care o rezolvă E57. Este un standard deschis, independent de producător (publicat ca ASTM E2807 și bazat pe biblioteca open-source libE57). I se spune "PDF-ul norilor de puncte": un singur fișier portabil, pe care toți îl pot citi în același mod.

Ideea de bază: un cuprins text și date binare

În esență, un fișier E57 este un hibrid format din două părți foarte diferite: o mică secțiune XML — text lizibil, care servește drept cuprins — și blocuri mari de date binare, în care milioane de valori numerice sunt stocate compact pentru acces rapid.

Structura unui fișier E57 un fișier = un antet mic + blocuri mari de date binare + un "cuprins" text la final Antet 48 de octeți Datele punctelor (binare) milioane de puncte (X, Y, Z + culoare) Imagini (binare) panorame JPEG/PNG încorporate Secțiunea XML "harta" lizibilă a conținutului începutul fișierului sfârșitul fișierului antetul indică exact unde începe harta XML (xmlPhysicalOffset) Software-ul citește mai întâi antetul de 48 de octeți, care indică: "harta începe la octetul N". Apoi accesează harta XML, află ce conține fișierul și trece direct la blocul de date binare necesar. Pentru a găsi o singură scanare, nu trebuie să citească gigaocteți de date: harta îi oferă acces imediat.
Un fișier E57 se citește începând cu antetul de 48 de octeți, care indică unde se află "harta" XML de la final. Aceasta arată, la rândul ei, unde se află fiecare bloc de date binare.

De ce se află harta la final? Pentru că, atunci când scrie fișierul, scanerul nu știe încă ce dimensiune vor avea datele. Prin urmare, scrie mai întâi datele brute, apoi adaugă un cuprins ordonat. Avantajul este considerabil: pentru a extrage o scanare dintr-un fișier de 20 GB, software-ul citește antetul mic, accesează harta XML, găsește linia "scanarea nr. 3 începe la octetul 4.812.000.000" și trece direct acolo.

O măsură de siguranță discretă: fișierul este împărțit în "pagini" de 1024 de octeți, iar ultimii 4 octeți ai fiecărei pagini sunt rezervați pentru o sumă de control — o amprentă care permite software-ului să detecteze dacă fișierul a fost deteriorat.

Totul pornește de la o singură rădăcină

Dacă deschideți această hartă XML, găsiți o structură arborescentă, asemănătoare celei a dosarelor de pe computer. Există o singură rădăcină, root, și două ramuri principale: data3D, o listă numerotată de scanări, și images2D, o listă numerotată de fotografii (de obicei, panoramele 360° realizate de scaner).

Structura arborescentă E57: totul pornește de la o singură rădăcină secțiunea XML are structura arborescentă a dosarelor: porniți de la rădăcină și navigați până la orice scanare sau fotografie root data3D o listă de scanări [ scan 0, scan 1, ... ] metadate cine / când sistem de coordonate images2D o listă de fotografii [ pano 0, pano 1, ... ] scan 0 puncte + pose scan 1 … points prototype X Y Z · R G B · intensity pose = poziția și orientarea scanerului poziție (x, y, z) + rotire (cuaternion) fiecare fotografie are și propria pose, astfel încât vizualizatorul știe unde să o plaseze
Fiecare scanare și fotografie are propria pose — poziția și orientarea dispozitivului (stocată sub forma unui cuaternion). Aceasta permite alinierea mai multor scanări într-un singur model.

Două moduri de a stoca un punct

Un scaner laser nu lucrează direct cu X, Y și Z. Stă într-un loc și se rotește, determinând pentru fiecare punct trei valori: distanța parcursă de fascicul, azimutul (unghiul orizontal, spre stânga sau dreapta) și unghiul de elevație (în sus sau în jos). Acestea sunt coordonate sferice — sistemul firesc al scanerului. Majoritatea programelor preferă însă coordonatele carteziene X, Y și Z. E57 poate stoca punctele în oricare dintre cele două sisteme, iar conversia dintre ele necesită doar câteva calcule trigonometrice.

Două moduri de a stoca un punct scanerul măsoară unghiuri și distanțe — E57 poate stoca punctele în ambele sisteme Coordonate sferice — perspectiva senzorului scaner punctul distanță azimut (stânga-dreapta) + unghi de elevație (sus-jos) distanță · azimut · unghi de elevație sistem firesc pentru un scaner laser rotativ Coordonate carteziene — formatul preferat de software Z X Y punctul X · Y · Z coordonate simple pe o grilă, ușor de înțeles → trigonometrie rapidă
Punctele sunt stocate într-un tabel compact, numit CompressedVector în E57: coloanele (X, Y, Z, culoare, intensitate...) sunt definite o singură dată în XML, iar blocul binar conține rânduri succesive de valori stocate compact.

Trei tipuri de fotografii încorporate

Fotografiile din images2D nu sunt linkuri către fișiere dintr-un dosar: fișierele JPEG sau PNG se află chiar în interiorul fișierului E57. Există însă mai multe tipuri de fotografii încorporate. Fiecare are o "reprezentare" care îi arată software-ului cât de precis poate interpreta geometria imaginii. Diferența ține de o singură întrebare: cât de complet este descrisă camera?

Trei moduri în care E57 stochează o fotografie același fișier, trei "reprezentări" — diferă prin cât de complet este descrisă camera sphericalRepresentation o panoramă completă de 360° × 180° proiectată pe o sferă Se pot face măsurători ✓ fiecare pixel = o direcție cunoscută față de scaner panorama de tipul "priviți în jur din acest punct", creată de majoritatea scanerelor pinholeRepresentation obiectiv fotografie plană Se pot face măsurători ✓ o fotografie obișnuită, realizată cu un obiectiv, complet calibrată distanța focală + dimensiunea senzorului permit calcularea unghiului fiecărui pixel visualReferenceRepresentation doar o imagine Nu permite măsurători ✗ fără niciun model al camerei — doar pentru vizualizare "așa arăta locul atunci" — o miniatură, o fotografie de la fața locului
Un detaliu util: o singură înregistrare poate conține atât o imagine raster precisă (cu proiecție perspectivă sau sferică), cât și o versiune simplă, pentru orientare vizuală. Astfel, vizualizatorul afișează imaginea ușor de interpretat și păstrează versiunea precisă pentru calcule.
  • sphericalRepresentation — o panoramă completă de 360° × 180°, imaginea echirectangulară 2:1 cu aspectul alungit cunoscut. Proiecția fiind cunoscută, fiecare pixel corespunde unei direcții precise, astfel încât imaginea se aliniază perfect cu norul de puncte. Acesta este fluxul nostru principal de procesare: citim imaginea, o ajustăm la un raport exact de 2:1 și o trimitem către vizualizatorul de panorame.
  • pinholeRepresentation — o fotografie obișnuită, descrisă prin modelul camerei cu orificiu (distanță focală, dimensiunea senzorului, centru optic). Și aici software-ul poate determina direcția fiecărui pixel, dar numai într-un câmp vizual mai restrâns. În practică, această metodă este folosită mai ales de Leica: un cub panoramic gata pregătit — șase fețe plane orientate spre exterior — este stocat direct în fișierul E57, iar noi îmbinăm aceste fețe într-o panoramă completă. Este unul dintre cele mai simple cazuri de conversie într-o imagine 360° clară.
  • visualReferenceRepresentation — o fotografie fără niciun model de cameră, destinată exclusiv vizualizării. Nu poate fi folosită pentru măsurători sau proiectată pe norul de puncte; este doar o fotografie de referință. Importatorul nostru o păstrează ca atașament la un comentariu, fără a o poziționa în 3D.

Există însă o problemă. sphericalRepresentation este varianta cea mai răspândită, dar se pot strecura ușor erori greu de observat. De aceea, aceeași scanare poate arăta diferit de la un program la altul.

  • Zonele oarbe sunt decupate. Orice scaner are o zonă pe care nu o poate vedea — de obicei, chiar sub el, unde se află trepiedul. Unele programe de export decupează pur și simplu panorama în acea zonă, lăsând un gol sau o imagine cu înălțime nestandard.
  • Pixeli care nu sunt pătrați. O panoramă corectă are pixeli pătrați (pixelWidth = pixelHeight); în unele fișiere nu este așa, iar imaginea pare întinsă până când este redimensionată.
  • Direcția “înainte” este greșită. Rotirea stocată împreună cu panorama indică direcția aflată în centrul imaginii, dar nu există o convenție universală pentru ce înseamnă “înainte”: unele programe de export aleg nordul, altele estul. O mică eroare aici rotește întreaga imagine.
  • Instrumentele de editare pot pierde date. De exemplu, dacă un fișier E57 este deschis și salvat din nou în CloudCompare, imaginile pinholeRepresentation își pot pierde poziția de captură: fotografiile rămân, dar informația despre locul în care au fost făcute dispare.

Pe scurt, în practică, programe diferite afișează adesea diferit același fișier E57. Importatorul nostru încearcă să corecteze aceste particularități frecvente: redimensionează pixelii care nu sunt pătrați, corectează orientarea panoramei și aduce imaginea la raportul standard de 2:1. Astfel, turul virtual arată corect indiferent de programul care a creat fișierul.

Când panorama este inclusă chiar în norul de puncte

Una dintre cele mai ingenioase — și mai puțin cunoscute — idei ale formatului este că, pe lângă panoramele stocate ca imagini separate, o panoramă poate fi ascunsă chiar în norul de puncte. Un scaner laser nu emite fascicule la întâmplare: parcurge o grilă ordonată de unghiuri, rând cu rând și coloană cu coloană, asemenea unui televizor vechi care formează imaginea pe ecran. E57 poate păstra această ordine: fiecare punct primește un rowIndex și un columnIndex, care indică celula din grilă din care provine. O scanare stocată astfel se numește structurată.

Când panorama este inclusă în norul de puncte o scanare "structurată" stochează punctele într-o grilă — astfel, norul de puncte este deja o imagine scanarea, așa cum este stocată: rânduri × coloane coloană → azimut (0°-360° de jur împrejur) rând → unghi de elevație (sus-jos) cer: fasciculul laser nu a întâlnit niciun obiect puncte fictive care ocupă locurile libere (distanță = 0 / "fără reflexie") ↓ citiți grila în ordine = pixeli → panoramă 2:1 obținută imediat, fără reproiectare lățimea grilei (columnMaximum + 1) = lățimea panoramei Fiecare punct își păstrează valorile rowIndex și columnIndex, astfel că imaginea și geometria 3D sunt unul și același lucru. Punctele fictive din cer permit păstrarea unei grile perfect dreptunghiulare, iar software-ul știe să le ignore.
Într-o scanare structurată, norul de puncte și panorama sunt unul și același lucru: imaginea nu este o fotografie separată, ci rezultă chiar din dispunerea punctelor.

Avantajul este că, atunci când punctele sunt dispuse pe o grilă, norul de puncte este deja o imagine. Citite rând cu rând, punctele corespund fiecare câte unui pixel, iar panorama poate fi refăcută fără nicio reproiectare. Fișierul înregistrează dimensiunile grilei în indexBounds (columnMaximum, rowMaximum), astfel că software-ul cunoaște de la început rezoluția. Modulul nostru de sinteză preia lățimea imaginii rezultate direct din columnMaximum + 1.

Grila trebuie însă să fie perfect dreptunghiulară, spre deosebire de lumea reală. Ce se întâmplă în direcțiile în care fasciculul a fost îndreptat spre cer și nu s-a întors niciun semnal? Soluția este practică: celulele respective sunt completate cu puncte fictive, adesea cu o distanță de exact 0, adică "fascicul emis, fără obstacol întâlnit". Aceste puncte păstrează forma dreptunghiulară a grilei, dar nu reprezintă geometrie reală, așa că software-ul trebuie să le excludă. Modulul nostru marchează fiecare punct cu distanța zero și îi atribuie o distanță fictivă mare, pentru ca calculele pe grilă să funcționeze în continuare. La crearea hărții de adâncime sau la exportul norului de puncte, nu confundă niciodată aceste puncte fictive din cer cu suprafețe reale.

Cum transformăm o scanare într-o fotografie panoramică în care puteți privi în jur

Nu toate scanările sunt organizate într-o grilă: unele sunt simple colecții de puncte fără structură. Vestea bună este că panorama poate fi refăcută totuși. Aici intervine soluția noastră. O scanare reprezintă, în esență, "o sferă completă de puncte măsurate după unghiul lor față de un singur loc de captură". Această sferă poate fi desfășurată într-o panoramă plană.

De la un nor de puncte la o fotografie panoramică în care puteți privi în jur principiul din spatele acestui proiect: desfășurarea sferei de puncte într-o panoramă plană 1 · scanarea vă înconjoară fiecare punct are o poziție unghiulară față de centru → desfășurare 2 · unghiurile devin o grilă plană sus ↕ jos ← 360° pe orizontală → → completarea golurilor 3 · trei imagini panoramă color intensitate (alb-negru) hartă de adâncime Norul de puncte este chiar panorama: punctele, poziționate după unghiuri, formează prin desfășurare o imagine plană 2:1. Culorile dau nuanță pixelilor, intensitatea semnalului laser oferă o imagine clară în tonuri de gri, iar distanțele formează o hartă de adâncime.
Un nor de puncte, trei imagini: culoarea umple pixelii, intensitatea semnalului laser oferă o imagine clară, în tonuri de gri, fără umbre, iar distanțele formează o hartă de adâncime. Aceasta permite măsurători și deplasarea printr-o panoramă altfel plată.

Fiecare punct este proiectat în funcție de unghi pe un pixel al cunoscutei panorame echirectangulare 2:1, întinse pe orizontală: de la stânga la dreapta pe lățimea imaginii și de sus în jos pe înălțime. Harta de adâncime este esențială: datorită distanței asociate fiecărui pixel, într-o panoramă care pare plată puteți face măsurători și vă puteți deplasa. Faceți clic pe două puncte de pe un perete, iar software-ul calculează distanța reală dintre ele folosind datele 3D păstrate în fundal.

De ce contează E57?

Pentru că este un format neutru de schimb. Un topograf scanează un pod cu echipamentul unui producător, un inginer deschide datele în alt software, iar un arhitect le arhivează pentru următorii douăzeci de ani. Toți trei se pot baza pe același fișier E57, fără să depindă de un furnizor. Ca standard deschis pe care îl poate implementa oricine, E57 păstrează într-un singur fișier culorile, intensitatea, geometria, panoramele și pozițiile esențiale ale senzorilor.

Și încă un detaliu interesant: momentul capturii stocat într-un fișier E57 este exprimat în timp GPS — secunde scurse din 6 ianuarie 1980, când a început acest sistem de măsurare a timpului — nu față de 1970, ca în sistemele informatice obișnuite. Dacă îl interpretați greșit, o scanare făcută astăzi va părea că datează din 2013.

Doriți să aflați mai multe?

  • libE57.org — biblioteca de referință cu sursă deschisă și site-ul principal al formatului
  • ASTM E2807 — standardul oficial
  • libE57Format · Image2D — definițiile exacte ale reprezentărilor sferice, de tip cameră cu orificiu și de referință vizuală
  • Paul Bourke’s E57 notes — o prezentare tehnică succintă a antetului și a structurii
Asistent AI
Bună ziua! Puteți întreba orice despre tururi virtuale, nori de puncte, 3D Gaussian Splatting, modele 3D, utilizarea site-ului, plăți și multe altele. Voi căuta răspunsul sau voi transmite întrebarea dvs. echipei de asistență tehnică.
Asistentul nostru AI nu a putut răspunde la întrebarea dvs. Echipa noastră de asistență tehnică vă va răspunde cu plăcere la întrebare. Introduceți adresa dvs. de e-mail. Nu folosim adresa dvs. de e-mail pentru a trimite buletine informative. O folosim doar ca să vă răspundem la întrebare.