E57 "PDF pro mračna bodů" jeden soubor v otevřeném formátu, který obsahuje miliony zaměřených 3D bodů, jejich barvy a panoramatické fotografie, které k nim patří.
Znalostní báze · formáty souborů

E57 jednoduše: "PDF pro mračna bodů"

Představte si, že fotografujete místnost. Místo plochého snímku ale zachytíte přesnou polohu milionu drobných bodů na každé stěně, židli i hrnku s kávou. Když laserem rychle snímáte okolí a měříte vzdálenost ke všemu kolem, vznikne mračno bodů: 3D "fotografie" složená ze zaměřených bodů. Bez zbytečného žargonu si ukážeme, co se v souboru E57 vlastně skrývá, a jeden užitečný trik, který s ním umí náš software.

Proč je vůbec potřeba speciální formát?

Běžná fotografie je jen mřížka barevných pixelů. U 3D skenu je to složitější. U každého z milionů bodů je potřeba uložit, kde se v prostoru nachází (tři čísla: X, Y, Z), jakou má barvu, jak silně se od něj odrazil laserový paprsek (jeho intenzitu — představte si černobílou "laserovou fotografii") a často i panoramatické fotografie, které skener současně pořídil.

Představte si, že jeden člověk skenuje skenerem Faro, kolega používá skener Leica a klient otevírá výsledek v softwaru Autodesk. Tři zařízení, tři programy — a všechny musí dokázat přečíst stejný soubor i za několik let, aniž by bylo nutné žádat výrobce o tajný dekodér. Právě to řeší E57. Jde o otevřený standard nezávislý na výrobci (publikovaný jako ASTM E2807 a založený na open-source knihovně libE57). Říká se mu "PDF pro mračna bodů": jeden přenositelný soubor, který každý dokáže přečíst stejným způsobem.

Základní princip: textová mapa a binární data

Soubor E57 je v podstatě kombinací dvou velmi odlišných částí: krátkého úseku XML — čitelného textu, který slouží jako obsah souboru — a velkých bloků binárních dat, v nichž jsou kvůli rychlému přístupu úsporně uloženy miliony číselných hodnot.

Struktura souboru E57 jeden soubor = malá hlavička + velké binární bloky + textový "obsah" na konci Hlavička 48 bajtů Data bodů (binární) miliony bodů (X, Y, Z + barva) Obrázky (binární) vložená panoramata ve formátu JPEG/PNG Část XML čitelná "mapa" celého obsahu začátek souboru konec souboru hlavička udává přesnou pozici začátku XML mapy (xmlPhysicalOffset) Software nejprve přečte 48bajtovou hlavičku. Ta uvádí, na kterém bajtu začíná mapa. Pak přejde k XML mapě, zjistí, co soubor obsahuje, a přejde přímo k potřebnému binárnímu bloku. K nalezení jednoho skenu není potřeba číst gigabajty dat — díky mapě je přístup okamžitý.
Soubor E57 se čte od začátku i od konce: 48bajtová hlavička odkazuje na XML "mapu" na konci souboru a ta ukazuje, kde se nacházejí jednotlivé binární bloky.

Proč je mapa až na konci? Skener při zápisu souboru ještě neví, jak velká data budou. Nejprve proto průběžně zapisuje surová data a po dokončení přidá přehledné shrnutí. Výhoda je značná: chcete-li získat jeden sken z 20gigabajtového souboru, software přečte malou hlavičku, přejde k XML mapě, najde údaj "sken č. 3 začíná na bajtu 4 812 000 000" a přesune se přímo tam.

Nenápadná pojistka: celý soubor je rozdělen na "stránky" o velikosti 1 024 bajtů. Poslední 4 bajty každé stránky obsahují kontrolní součet — otisk, podle kterého software pozná, zda je soubor poškozený.

Vše vychází z jednoho kořene

V XML mapě najdete stromovou strukturu podobnou složkám v počítači. Má jediný kořen root a dvě hlavní větve: data3D s číslovaným seznamem skenů a images2D s číslovaným seznamem fotografií (obvykle panoramat 360° pořízených skenerem).

Stromová struktura E57: vše vychází z jednoho kořene část XML tvoří strom složek — od kořene můžete přejít k libovolnému skenu nebo fotografii root data3D seznam skenů [ scan 0, scan 1, ... ] metadata kdo / kdy souřadnicový systém images2D seznam fotografií [ pano 0, pano 1, ... ] scan 0 body + pose scan 1 … points prototype X Y Z · R G B · intensity pose = poloha a orientace skeneru poloha (x, y, z) + otočení (kvaternion) každá fotografie má také vlastní pose, aby prohlížeč věděl, kam ji umístit
Každý sken i fotografie mají vlastní pose — polohu zařízení a jeho orientaci (uloženou jako kvaternion). Díky tomu lze několik skenů spojit do jednoho prostorově zarovnaného modelu.

Dva způsoby zápisu bodu

Laserový skener nepracuje přímo se souřadnicemi X, Y, Z. Stojí na jednom místě a otáčí se. U každého bodu zaznamenává tři hodnoty: vzdálenost (jak daleko paprsek dosáhl), azimut (vodorovný úhel doleva či doprava) a výškový úhel (úhel nahoru či dolů). Jde o sférické souřadnice — pro skener přirozený způsob měření. Většina softwaru však dává přednost kartézským souřadnicím X, Y, Z. E57 umí ukládat body oběma způsoby a převod mezi nimi vyžaduje jen jednoduché trigonometrické výpočty.

Dva způsoby zápisu bodu skener měří úhly a vzdálenost — E57 umí body ukládat oběma způsoby Sférické souřadnice — jak měří senzor skener bod vzdálenost (od skeneru) azimut (doleva a doprava) + výškový úhel (nahoru a dolů) vzdálenost · azimut · výškový úhel přirozený zápis pro rotující laserový skener Kartézské souřadnice — jak je potřebuje software Z X Y bod X · Y · Z jednoduché souřadnice v pravoúhlé soustavě, kterým každý rozumí → rychlá trigonometrie
Body jsou uloženy v kompaktní tabulce, kterou E57 nazývá CompressedVector: XML jednou definuje sloupce (X, Y, Z, barva, intenzita...) a binární blok pak obsahuje řádek po řádku úsporně uložené hodnoty.

Tři typy vložených fotografií

Fotografie v images2D nejsou odkazy na soubory v nějaké složce — soubory JPEG nebo PNG jsou uloženy přímo v souboru E57. Vložených fotografií je navíc několik typů. Každou z nich E57 ukládá jako "reprezentaci", která softwaru říká, nakolik se může spolehnout na geometrii snímku. Rozdíl spočívá v jediné otázce: jak podrobně je popsán fotoaparát?

Tři způsoby uložení fotografie v E57 stejný soubor, tři "reprezentace" — liší se tím, jak podrobně je popsán fotoaparát sphericalRepresentation úplné panorama 360° × 180° promítnuté na kouli Lze měřit ✓ každý pixel = známý směr od skeneru panorama pro "rozhlédnutí z tohoto místa", které vytváří většina skenerů pinholeRepresentation objektiv rovinná fotografie Lze měřit ✓ jedna běžná fotografie z fotoaparátu, plně kalibrovaná ohnisková vzdálenost + velikost snímače umožňují softwaru určit směr každého pixelu visualReferenceRepresentation jen obrázek Nevhodné k měření ✗ zcela bez modelu fotoaparátu — pouze pro vizuální orientaci "takhle to na místě vypadalo" — náhled, fotografie místa
Praktický detail: jeden záznam obrázku může obsahovat jak přesný rastrový obrázek (v perspektivní nebo sférické projekci), tak prostý obrázek pro vizuální orientaci. Prohlížeč tak může zobrazit přehledný obrázek a přesná data ponechat pro výpočty.
  • sphericalRepresentation — úplné panorama 360° × 180°, tedy známý roztažený ekvirektangulární obrázek s poměrem stran 2:1. Protože je projekce známá, každému pixelu odpovídá přesný směr a panorama lze správně zarovnat s mračnem bodů. Takto panoramata zpracováváme nejčastěji: obrázek načteme, upravíme plátno na přesný poměr stran 2:1 a předáme jej prohlížeči panoramat.
  • pinholeRepresentation — běžná fotografie pořízená objektivem, popsaná klasickým modelem dírkové komory (ohniskovou vzdáleností, velikostí snímače a optickým středem). I z těchto údajů dokáže software určit směr každého pixelu, ale jen v užším zorném poli. V praxi takto pracuje především Leica: přímo do souboru E57 ukládá hotovou kubickou mapu — šest stěn krychle orientovaných směrem ven. Při zpracování tyto stěny spojíme do úplného panoramatu. Jde o jeden z nejjednodušších způsobů, jak získat kvalitní obrázek 360°.
  • visualReferenceRepresentation — fotografie zcela bez modelu fotoaparátu, určená výslovně jen k prohlížení. Nelze podle ní měřit ani ji promítnout na mračno bodů; slouží pouze jako referenční snímek. Při importu takové fotografie ukládáme jako přílohy komentářů, nikoli do 3D prostoru.

Má to však háček. sphericalRepresentation je oblíbená volba, ale překvapivě snadno se v ní udělá nenápadná chyba. Proto může tentýž sken v různých programech vypadat jinak.

  • Slepé oblasti se oříznou. Každý skener má místo, které nedokáže zachytit — typicky přímo pod sebou, kde stojí jeho stativ. Některé programy při exportu panorama v tomto místě jednoduše oříznou, takže v něm vznikne mezera nebo má nestandardní výšku.
  • Nekvadratické pixely. Správné panorama má čtvercové pixely (pixelWidth = pixelHeight). V některých souborech to tak není, a obrázek proto vypadá roztaženě, dokud se nepřepočítá jeho měřítko.
  • Špatně určený směr “vpřed”. Otočení uložené s panoramatem určuje, jaký směr leží uprostřed obrázku. Neexistuje však jednotná dohoda, co “vpřed” znamená — některé programy při exportu nastavují sever, jiné východ. I malá chyba zde otočí celý pohled.
  • Při úpravách se mohou ztratit data. Když například soubor E57 otevřete a znovu uložíte v programu CloudCompare, může se ztratit poloha pořízení obrázků pinholeRepresentation. Fotografie zůstanou zachované, ale údaj o místě jejich pořízení zmizí.

V praxi tedy různé programy často zobrazují stejný soubor E57 odlišně. Náš import se snaží běžné odchylky napravit: upravuje měřítko nekvadratických pixelů, opravuje orientaci panoramatu a sjednocuje plátno na poměr stran 2:1. Virtuální prohlídka tak vypadá správně bez ohledu na to, který program soubor vytvořil.

Když je panorama uloženo přímo v mračnu bodů

Jeden z nejelegantnějších — a nejméně známých — principů celého formátu spočívá v tom, že panorama nemusí být uloženo jako samostatný obrázek. Může se skrývat přímo v mračnu bodů. Laserový skener nevysílá paprsky náhodně: postupně prochází pravidelnou úhlovou mřížku, řádek po řádku a sloupec po sloupci, podobně jako stará televize vykresluje obrazovku. E57 dokáže toto pořadí zachovat: každý bod má hodnoty rowIndex a columnIndex, které určují jeho místo v mřížce. Takto uložený sken se nazývá strukturovaný.

Když je panorama uloženo v mračnu bodů "strukturovaný" sken ukládá body do mřížky — mračno bodů tak už samo tvoří obrázek uložený sken: řádky × sloupce sloupec → azimut (0°-360° kolem dokola) řádek → výškový úhel (nahoru a dolů) obloha: laserový paprsek na nic nenarazil fiktivní výplňové body (vzdálenost = 0 / "bez odrazu") ↓ číst mřížku po řadě = pixely → okamžitě vznikne panorama 2:1 bez reprojekce šířka mřížky (columnMaximum + 1) = šířka panoramatu Protože má každý bod svůj rowIndex a columnIndex, jsou obraz a 3D geometrie jedním a týmž objektem. Fiktivní body oblohy udržují mřížku přesně obdélníkovou — software ví, že je má přeskočit.
Ve strukturovaném skenu jsou mračno bodů a panorama jedním a týmž objektem — obraz není samostatná fotografie, ale vzniká samotným uspořádáním bodů.

Výhoda: pokud body leží v mřížce, mračno bodů už je obrazem. Při čtení po řádcích připadne každému bodu jeden pixel — panorama tak vznikne bez jakékoli složité reprojekce. Soubor navíc ukládá rozměry mřížky v indexBounds (columnMaximum, rowMaximum), takže software zná rozlišení předem. Náš nástroj pro tvorbu panoramat přebírá šířku výsledného obrazu přímo z hodnoty columnMaximum + 1.

Mřížka ale musí tvořit přesný obdélník, zatímco skutečný svět tak pravidelný není. Co se stane ve směrech, kde paprsek zamířil do volné oblohy a nevrátil se žádný odraz? Řešení je jednoduché: tyto buňky se vyplní fiktivními body, velmi často se vzdáleností přesně 0, což znamená "paprsek byl vyslán, ale na nic nenarazil". Mřížka díky nim zůstane celistvá, nejde však o skutečnou geometrii, takže je software musí vynechat. Náš software označí každý bod s nulovou vzdáleností a přiřadí mu pomocnou velkou vzdálenost, aby výpočty s mřížkou dál fungovaly. Při tvorbě hloubkové mapy ani při exportu mračna bodů tyto fiktivní body oblohy nepovažuje za skutečné povrchy.

Jak ze skenu znovu vytvořit fotografii, ve které se můžete rozhlížet

Ne každý sken má připravenou mřížku — někdy jde jen o neuspořádanou množinu bodů. Dobrá zpráva je, že panorama lze i tak obnovit. Právě tady přichází na řadu naše řešení. Sken je v podstatě "celá sféra bodů zaměřených pod různými úhly z jednoho místa", kterou lze rozvinout do plochého panoramatu.

Od mračna bodů k fotografii, ve které se můžete rozhlížet princip tohoto projektu: rozvinout sféru bodů do plochého panoramatu 1 · sken vás obklopuje každý bod má vůči středu svou úhlovou polohu → rozvinout 2 · úhly se převedou na plochou mřížku nahoru ↕ dolů ← celých 360° zleva doprava → → vyplnit mezery 3 · tři obrázky barevné panorama intenzita (černobíle) hloubková mapa Z mračna bodů vznikne panorama: body se podle úhlových souřadnic rozvinou do plochého obrazu s poměrem stran 2:1. Barvy vyplní pixely, intenzita odrazu laseru vytvoří ostrý obraz ve stupních šedi a z údajů o vzdálenosti vznikne hloubková mapa.
Jedno mračno bodů, tři obrazy: barvy vyplní pixely, intenzita odrazu laseru vytvoří ostrý obraz ve stupních šedi bez stínů a z údajů o vzdálenosti vznikne hloubková mapa. Díky ní lze v plochém panoramatu měřit a pohybovat se.

Každý bod se podle úhlových souřadnic promítne na pixel známého roztaženého ekvirektangulárního panoramatu s poměrem stran 2:1: zleva doprava po šířce obrazu a shora dolů po jeho výšce. Klíčová je hloubková mapa. Díky vzdálenosti uložené pro každý pixel lze v panoramatu, které vypadá ploše, měřit a pohybovat se. Klikněte na dva body na stěně a software určí jejich skutečnou vzdálenost, protože má stále k dispozici původní 3D data.

Proč je tedy E57 důležitý?

Protože umožňuje výměnu dat bez závislosti na výrobci. Zeměměřič naskenuje most zařízením jedné značky, inženýr otevře data v jiném softwaru a architekt je uloží na dalších dvacet let. Všichni tři se mohou spolehnout na jediný soubor E57. Otevřený standard, který může implementovat kdokoli, uchovává pohromadě barvy, intenzitu, geometrii, panoramata i zásadní údaje o poloze senzorů.

A ještě jedna zajímavost: čas pořízení uložený v souboru E57 se udává v čase GPS — v sekundách od 6. ledna 1980, kdy se čas GPS začal počítat — nikoli od roku 1970, který se běžně používá ve výpočetní technice. Při nesprávném výkladu by dnešní sken vypadal, jako by vznikl v roce 2013.

Chcete vědět víc?

  • libE57.org — referenční knihovna s otevřeným zdrojovým kódem a hlavní zdroj informací o formátu
  • ASTM E2807 — oficiální norma
  • libE57Format · Image2D — přesné definice sférické projekce, projekce dírkovou komorou a vizuální referenční reprezentace
  • Paul Bourke’s E57 notes — stručný technický popis hlavičky a struktury souboru
Asistent AI
Dobrý den! Zeptejte se mě na cokoli o virtuálních prohlídkách, mračnech bodů, 3D Gaussian Splatting, 3D modelech, používání webu nebo platbách. Buď najdu odpověď, nebo váš dotaz předám technické podpoře.
Naše AI nedokázala odpovědět na váš dotaz. Technická podpora vám ráda odpoví. Zadejte svou e-mailovou adresu. Vaši e-mailovou adresu nepoužíváme k zasílání novinek, pouze k zodpovězení vašeho dotazu.