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