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.
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).
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.
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?
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ă.
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ă.
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