Univerzita Karlova v Praze Matematicko-fyzikální fakulta DIPLOMOVÁ PRÁCE Michal Havlena Pořizování HDR dat Kabinet software a výuky informatiky Vedoucí diplomové práce: RNDr. Josef Pelikán Studijní program: Informatika
Děkuji RNDr. Josefu Pelikánovi za cenné připomínky a rady při tvorbě této práce. Nepostradatelným pomocníkem se mi stal také server google.com. Prohlašuji, že jsem svou diplomovou práci napsal samostatně a výhradně s použitím citovaných pramenů. Souhlasím se zapůjčováním práce. V Praze dne 12. srpna 2005 Michal Havlena 2
Obsah 1 High Dynamic Range 6 1.1 Úvod... 6 1.2 Pořizování HDR dat... 7 1.2.1 Pořizování skládáním... 7 1.2.2 Přímé pořizování... 9 1.2.3 Formáty pro ukládání HDR dat... 10 1.3 Zobrazování HDR dat... 12 1.3.1 Globální metody komprese... 13 1.3.2 Lokální metody komprese... 13 1.3.3 Přímé zobrazování... 16 1.4 Využití HDR dat... 17 1.4.1 Zpracování obrazu... 17 1.4.2 Grafické akcelerátory... 18 2 Panoramatické snímky 21 2.1 Přínos panoramatických snímků... 21 2.2 Pořizování panoramatických snímků... 22 2.2.1 Formáty pro ukládání panoramatických snímků... 22 2.2.2 Netradiční metody pořizování panoramat... 24 2.2.3 Klasické pořizování panoramat spojováním... 25 2.3 Tvorba HDR panoramat... 28 2.3.1 Možnosti složení konstrukcí... 28 2.3.2 Metoda využívající kompresi HDR dat... 30 3 Popis aplikace HDR Panorama 32 3.1 Modulární návrh aplikace... 32 3.2 Acquirer pořizování snímků... 34 3.2.1 Spolupráce s fotoaparátem Canon EOS... 35 3.3 Combiner skládání do HDR obrazu... 36 3.3.1 Skládání pomocí gamma křivky... 36 3.4 Tonemapper komprese HDR obrazu... 37 3.4.1 Logaritmická komprese... 37 3.5 Stitcher spojování do panoramatu... 38 3.5.1 Program Hugin... 38 3.6 Warper převod panoramatických formátů... 41 3.7 RadianceIO vstup a výstup HDR dat... 42 3
4 Dokumentace k HDR Panorama 44 4.1 Vnitřní datové struktury... 44 4.1.1 ShotImages... 44 4.1.2 RadianceBuffer... 45 4.2 Dialogy aplikace... 46 4.2.1 Výběr časů expozice pro pořizování HDR dat... 46 4.2.2 HDR Manager... 47 4.2.3 Options dialog... 47 4.2.4 About dialog... 47 4.3 Hlavní okno aplikace... 48 4.3.1 Stavy aplikace... 48 4.3.2 Vizualizace průběhu výpočtu... 49 4.3.3 Prohlížeč obrázků... 50 4.4 Ukládání nastavení aplikace... 51 4.5 Přerušení rozdělaného výpočtu... 52 4.5.1 Export a import sérií snímků... 52 4.5.2 Navázání na kontrolní bod... 53 4.6 Kuchařka k přidání další implementace modulu... 54 4.6.1 Přidání implementace základního modulu... 54 4.6.2 Přidání implementace modulu Warper... 54 4.6.3 Přidání implementace modulu RadianceIO... 54 5 Závěr 56 Literatura 58 A Manuál k HDR Panorama 59 B Popis formátu pto 61 4
Název práce: Pořizování HDR dat Autor: Michal Havlena Katedra: Katedra software a výuky informatiky Vedoucí diplomové práce: RNDr. Josef Pelikán e-mail vedoucího: Josef.Pelikan@mff.cuni.cz Abstrakt: Práce se zabývá návrhem systému využívajícího digitální fotoaparát k automatickému pořizovaní high dynamic range (HDR) map okolí. Systém pořizuje snímky s různými časy expozice a s různými směry pohledu. Použitím HDR komprese na složené snímky získá pro každý směr pohledu nový obrázek a tyto obrázky jsou použity ke snadnému nalezení řídících bodů na celé ploše budoucího panoramatu. Pak je spuštěna externí aplikace, která spojí pořízené snímky odděleně pro každý čas expozice za použití těchto řídících bodů, a žádaná HDR mapa okolí je nakonec získána složením spojených panoramat. Aplikace popsaná v druhé části práce implementuje tento systém. Důraz je kladen na to, aby aplikace byla dostatečně modulární a umožňovala vícenásobné implementace jednotlivých kroků. Přiložená aplikace HDR Panorama obsahuje ukázkové implementace navržených rozhraní a umožňuje s použitím fotoaparátu Canon EOS a programu Hugin HDR mapy okolí pořizovat a následně je ukládat do souborů ve formátu RGBE nebo OpenEXR. Klíčová slova: digitální fotografie, high dynamic range, spojování obrázků, mapa okolí Title: HDR Data Acquisition Author: Michal Havlena Department: Department of Software and Computer Science Education Supervisor: RNDr. Josef Pelikán Supervisor s e-mail address: Josef.Pelikan@mff.cuni.cz Abstract: The thesis proposes a system for automatic high dynamic range (HDR) environment maps acquisition using a digital camera. The system acquires images with different shutter speeds and in different directions. It uses HDR compression on combined images to obtain a new image for each direction and these images are used to easily find control points on the whole area of the future panorama. Then an external application is run to stitch acquired images separately for every shutter speed using these control points and the desired HDR environment map is finally obtained by combining the stitched panoramas. The application described in the second part of the thesis implements this system. The focus is given on the fact that the application should be as much modular as possible to allow multiple implementations of all the individual steps. Enclosed application HDR Panorama contains sample implementations of the proposed interfaces and allows to acquire HDR environment maps using a Canon EOS camera and Hugin stitcher and to save them in the RGBE or OpenEXR file format. Keywords: digital photography, high dynamic range, image stitching, environment map 5
Kapitola 1 High Dynamic Range 1.1 Úvod Snahou člověka vždy bylo realisticky zachycovat svět kolem sebe od prvních obrázků na stěnách jeskyně přes malířské umění a klasickou fotografii až po dnešní digitální videokamery v mobilních telefonech. Postupem času se výsledky stále více přibližovaly realitě, jeden problém však zůstával nevyřešen. V reálném světě nacházíme velké rozdíly v množství světla ve scéně. Podle Reinhard a kol. [1] je rozdíl množství světla v nočních scénách a ve scénách na sněhu za slunného dne až deset řádů absolutního rozsahu, rozdíl množství světla v osvětlených a ve stinných částech jedné scény pak může být i více než čtyři řády rozsahu. Tento rozdíl v rámci jedné scény se nazývá dynamický rozsah 1 scény a naším cílem je jej celý přenést do pořízeného snímku. Jedním z nejpalčivějších problémů dnešní digitální fotografie je právě omezená schopnost zachytit na snímcích dostatečně velký dynamický rozsah současný formát digitálních snímků zvládne pojmout maximálně dva řády rozsahu. Volbou clonového čísla a času expozice při fotografování volíme, kterou část dynamického rozsahu scény přeneseme do snímku a kterou ztratíme (bude podexponována do černé nebo přeexponována do bílé). Proto bylo již v devadesátých letech minulého století navrženo přejít na jiný formát snímků na formát schopný zachytit velký dynamický rozsah High Dynamic Range 2. Hlavní myšlenka nového formátu spočívá v tom, že místo klasických bitmap, které uchovávají hodnotu světlosti pixelu v položce typu byte poskytující rozsah 0 255, použijeme položku typu float, která svým rozsahem předčí i největší možné rozdíly v reálných scénách. Určitou daní za velký rozsah je pak omezená přesnost, která však při zpracování a zobrazení snímku nevadí. Tento nový formát i přes své nesporné výhody však teprve pomalu proniká mezi veřejnost do všeobecného používání. Současná běžná pořizovací ani zobrazovací zařízení nejsou schopna data v tomto formátu přímo pořizovat respektive zobrazovat, až poslední verze oblíbeného Adobe Photoshop konečně přináší možnost práce s daty v tomto formátu. Problematice pořizování a zobrazování HDR dat se věnují části 1.2 respektive 1.3, v části 1.4 pak shrneme výhody nového formátu i s příklady praktického použití. 1 z anglického dynamic range 2 dále budeme používat zkratku HDR 6
1.2 Pořizování HDR dat Pokud se rozhodneme pořídit HDR data, máme dvě možnosti. Když vlastníme speciální pořizovací zařízení, získáváme data přímo v požadovaném formátu. Pravděpodobnější variantou však je, že máme k dispozici pouze klasický digitální fotoaparát 3 a z něj získaná sekvence snímků nám slouží jako vstupní data algoritmu, který snímky z této sekvence určitým způsobem složí do výsledného HDR snímku. 1.2.1 Pořizování skládáním Bez újmy na obecnosti budeme nyní uvažovat pouze černobílé fotografie, kde hodnoty pixelů odpovídají světlosti daného bodu. Přechod k barevným fotografiím je pak zřejmý rozkladem na kanály RGB. Při výrobě HDR snímku využijeme fyzikální vlastnost zvanou reciprocita. Ta říká, že hodnota expozice na daném bodě snímacího CCD čipu, kterou získáme jako součin hodnoty ozáření tohoto bodu a času expozice, X = E t (1) je závislá pouze na tomto součinu a ne na jeho jednotlivých složkách. Prodloužením času expozice na dvojnásobek při poloviční hodnotě ozáření tedy dostaneme shodnou hodnotu expozice. Jak říkají Debevec a Malik [2], tato vlastnost je při pořizování digitálních fotografií zaručena, pokud hodnota čtená z CCD odpovídá absolutnímu počtu dopadnutých fotonů za určitý čas, což běžně používané CCD čipy dělají. I při omezeném rozsahu hodnot expozice, které je čip schopen změřit, tedy můžeme získat velký rozsah z nich spočtených hodnot ozáření tím, že budeme pořizovat snímky stejné scény s různými časy expozice. Hodnotu ozáření určitého bodu pak určíme jako X E =. t Alternativně lze výslednou hodnotu expozice ovlivňovat také změnou clonového čísla, toto však není z důvodu změny hloubky ostrosti doporučováno. Tím ale naše práce nekončí. Na výsledném snímku pořízeném digitálním fotoaparátem totiž nejsou hodnoty pixelů rovny hodnotám expozice na čipu a tato závislost navíc není ani lineární. Funkce převádějící hodnoty expozice na daném bodě čipu na hodnoty pixelu se nazývá charakteristická křivka zařízení, označíme ji f. Naším dalším úkolem je tuto křivku odhalit. Debevec a Malik [2] prezentují metodu výpočtu této křivky přímo z pořízených snímků. Tato metoda numericky vypočte hledanou křivku až na konstantu, což vzhledem k tomu, že se HDR data často normují do intervalu <0, 1>, nepřináší žádné problémy. Pokud bychom přesto potřebovali mít správné absolutní hodnoty osvětlení, můžeme si pomoci vyfotografováním svítidla o známých parametrech. U digitální fotografie však často stačí uvažovat jednoduchou křivku gamma 2,2, protože digitální proces nepřináší při zpracování žádné nelinearity a tato křivka je do procesu vložena uměle kvůli napodobení vzhledu celuloidové fotografie. Při použití jednotné křivky pro všechny kanály RGB navíc odpadá nutnost znovu vyvažovat bílou. 3 Algoritmy na převod série klasických snímků do HDR snímku lze použít i na obrázky vzniklé naskenováním papírových fotografií, případně přímo celuloidových negativů. Těmito postupy se ale ve své práci nebudu zabývat, píšou o nich například Debevec a Malik [2]. 7
Když uvážíme, že charakteristická křivka zařízení je spojitá monotónní funkce, můžeme pak hodnotu ozáření každého bodu spočítat jako E = 1 f ( Z), t kde Z = f (X ) (2) je hodnota pixelu na daném místě snímku. Nyní je na místě otázka, kolik klasických snímků potřebujeme ke konstrukci příslušného HDR snímku a jaké mají být rozdíly jejich časů expozic. K tomu si musíme objasnit pojem pracovní oblast 4 čipu. Je to takový rozsah hodnot expozice, který odpovídá střední části charakteristické křivky zařízení. Její konce, kde velká změna hodnoty expozice způsobí pouze malou změnu hodnoty pixelu, není vhodné k výpočtu hodnoty expozice z hodnoty pixelu použít. K pokrytí celého dynamického rozsahu scény je nutné, aby hodnota ozáření každého bodu padla po přepočítání na expozici alespoň na jednom snímku do pracovní oblasti čipu. Minimální počet pořízených snímků je tedy při označení dynamického rozsahu scény R a pracovního rozsahu čipu C R C. Pokud zvolíme tento počet snímků, musíme pro pokrytí celého dynamického rozsahu scény nastavit rozdíl časů expozice tak, aby se rozsahy hodnot ozáření, kterým pro daný čas expozice odpovídá pracovní rozsah čipu, nepřekrývaly. Pak padne hodnota ozáření každého bodu po přepočítání na expozici do pracovního rozsahu čipu na právě jednom snímku a hodnota pixelu na příslušném místě tohoto snímku je pak použita k výpočtu hodnoty ozáření daného bodu. Takto navržený postup je však velmi citlivý na šum. Ukazuje se, že ideálním rozdílem časů expozice jsou maximálně dva expoziční stupně 5, protože pak padne přepočítaná hodnota ozáření do pracovního rozsahu na více snímcích a můžeme ke snížení vlivu šumu použít průměrování. Nejjednodušším způsobem, jak průměrování aplikovat, je jako hodnotu ozáření daného bodu brát aritmetický průměr hodnot ozáření spočítaných z hodnot pixelů na snímcích, kde tyto hodnoty padnou po přepočítání charakteristickou křivkou zařízení do pracovní oblasti čipu. Častěji používanou a kvalitnější metodou je pak výpočet váženého průměru hodnot ozáření. Váha hodnoty ozáření spočítané z hodnoty pixelu se odvozuje z hodnoty pixelu z následujícím způsobem: 1 w( z) = z Z pro z Z + Z ) min 2 ( min max 1 2 ( Z min Z max w( z) Z z pro z > + ), (3) = max kde Z min a Z max jsou minimální a maximální hodnota pixelu, typicky 0 a 255. Největší váhu mají hodnoty ozáření ze snímků, kde je hodnota pixelu nejblíže středu rozsahu. 4 anglicky working range 5 anglicky stops 8
1.2.2 Přímé pořizování Největší nevýhodou výše popsané metody využívající k pořízení HDR dat skládání klasických snímků je její časová náročnost. Samotné pořízení snímků i následný běh algoritmu potřebují desítky sekund, navíc je nutné, aby během pořizování snímků byla scéna statická. Tyto problémy by odpadly, kdybychom navrhli zařízení, které by pořizovalo současně snímky s různými časy expozice. Přesně tímto problémem se zabývali Aggarwal a Ahuja [3] a navrhli prototyp kamery, která je schopná pořizovat dokonce HDR videosekvence, tedy HDR data v reálném čase. Obrázek 1.1: Prototyp HDR kamery z článku [3]. Princip kamery je poměrně jednoduchý. Jak naznačuje další obrázek, paprsky jsou hned za objektivem rozděleny zrcadlovým jehlanem na několik svazků, každý z nich dopadá na jeden obyčejný osmibitový senzor. Obrázek 1.2: Princip HDR kamery z článku [3]: (a) Umístění čočky, jehlanu a senzorů k současnému pořízení snímků s různými časy expozice. (b) Rozdělení povrchu čočky na jednotlivé senzory. 9
Z výpočtů v článku vyplývá, že pokud je osa jehlanu rovnoběžná s optickou osou objektivu a vzdálenost vrcholu pyramidy od středu čočky je nulová, není poloha zobrazovaného bodu scény na povrchu každého ze senzorů závislá na vzdálenosti tohoto bodu od objektivu a toto zařízení se po drobných jasových korekcích chová stejně jako klasické zařízení s jedním senzorem. Pro docílení různých časů expozice na jednotlivých senzorech autoři navrhují množství metod. Je například možné umístit před senzory barevně neutrální filtry s různým přenosem, při konfiguraci s trojbokým jehlanem například 1, 0,5 a 0,25. Dostaneme pak poměr časů expozice 1:2:4, tedy tři snímky s rozdílem jeden expoziční stupeň. Podobného výsledku lze docílit, pokud změníme integrační dobu jednotlivých senzorů. Tato metoda však není autory vzhledem k tomu, že vede u nestatické scény k nepatrně odlišným obrazům na jednotlivých senzorech, doporučována. Další možností je posunout vrchol jehlanu tak, aby osa jehlanu nebyla totožná s optickou osou objektivu, ale stále s ní zůstala rovnoběžná. To způsobuje, že na každý ze senzorů dopadá různé množství světla a vhodnou volbou polohy vrcholu jehlanu můžeme nastavit poměr časů expozice také na 1:2:4, navíc bez zbytečných ztrát světla na filtrech. Stejná skupina vědců zkoumá také možnosti, jak zrychlit pořizování HDR dat při minimálních úpravách běžného hardware. Navrhli například metodu, jak zakrytím poloviny plochy snímacího CCD čipu běžné digitální kamery barevně neutrálním filtrem s přenosem 0,25 pořizovat HDR obraz současně s pořizováním panoramatického snímku. Při rotaci kamery je obraz každé části scény pořízen postupně zakrytou i nezakrytou částí čipu a máme tedy snímek daného místa ve dvou časech expozice s rozdílem dvou expozičních stupňů. Podrobnosti k implementaci této metody včetně prezentovaných výsledků můžete nalézt v Aggarwal a Ahuja [4]. 1.2.3 Formáty pro ukládání HDR dat Pro uložení HDR dat potřebujeme formát, který je schopen uschovat bitmapu složenou z položek typu float. Z běžně používaných formátů určených k ukládání obrázků toto zvládne pouze TIFF ve své variantě pro práci s bitmapami s plovoucí desetinnou čárkou 6. Nás však budou více zajímat formáty vyvinuté speciálně za účelem ukládání HDR dat, které zohledňují při případné kompresi jejich specifika. Prvním a také jednodušším z těchto formátů je RGBE, který vymyslel v roce 1992 G. Ward. Ten vychází z toho, že hodnota červeného, zeleného a modrého kanálu pro konkrétní pixel se u většiny obrázků řádově neliší a proto navrhl, aby se tato tři desetinná čísla (RGB) zapisovala se společným exponentem (E). U obrázků je navíc málo důležitá absolutní přesnost uschovaných dat, takže lze data ukládat s poloviční přesností 8 bitů mantisy a 8 bitů exponentu. Formát používá 32 bitů na pixel, které rozděluje následujícím způsobem: 3 8 bitů pro mantisy hodnot jednotlivých barevných kanálů 8 bitů pro společný exponent Z popsaného principu okamžitě vyplývají výhody a nevýhody tohoto formátu. Když opomineme fakt, že nelze ukládat hodnotu alfa kanálu, dochází při použití tohoto formátu k velké ztrátě přesnosti hodnot některých barevných kanálů, pokud je hodnota jiného barevného kanálu o hodně větší, rozdělení 16-ti bitů na 8 bitů mantisy a 8 bitů exponentu také není ideální. Na druhou stranu si při ukládání vystačíme s 32 bity na pixel a následnou aplikací jednoduché RLE komprese docílíme přijatelné velikosti souboru. 6 floating point TIFF 10
Druhým formátem je OpenEXR, který vyvinula v roce 1999 společnost Industrial Light & Magic jako formát využívaný při produkci digitálních vizuálních efektů. Tento formát prošel v následujících letech dalším vývojem a v roce 2003 se stal volně dostupným. Jeho hlavní rysy jsou následující: 32-ti nebo 16-ti bitová přesnost ukládaných obrazových HDR dat nově vyvinutý 16-ti bitový desetinný typ half 7 je schopen zachytit devět řádů dynamického rozsahu s krokem 1024 odstínů na expoziční stupeň kompatibilita s grafickým hardware moderní grafické karty používají při ukládání HDR dat právě typ half, při komunikaci s grafickou kartou tedy nedochází k žádným konverzím možnost zvolit rozdílnou velikost datového a zobrazovaného okna toho lze využít k potlačení okrajového jevu při zpracování obrazu (datové okno je větší než zobrazované) nebo k zobrazení výseku obrázku (zobrazované okno je větší než datové) bezeztrátová a ztrátová komprese existuje možnost do formátu přidávat nová kompresní schémata, mezi připravená kompresní schémata patří: o PIZ bezeztrátová waveletová komprese o ZIP tradiční bezeztrátová komprese o RLE jednoduchá bezeztrátová komprese o PXR24 speciální ztrátová komprese libovolný počet ukládaných kanálů kromě základních barevných kanálů a alfa kanálu můžeme uložit například kanál s hodnotami normálového vektoru nebo kanál odpovídající z-bufferu. Každý kanál může mít různý datový typ, na výběr je z těchto typů: o half 16-ti bitový desetinný typ pro ukládání obrazových dat o float 32-ti bitový desetinný typ pro ukládání dat bufferů o uint 32-ti bitový celočíselný typ pro ukládání identifikátorů možnost ukládat data sekvenčně nebo dlaždicově dlaždicové uložení umožňuje rychlý přístup k datům při zoomování nebo při posouvání obrazu ve velkém souboru data ve více rozlišeních v jednom souboru toto je užitečné hlavně při práci s texturami, konkrétně podporuje tyto formáty: o mipmap data jsou přítomna v původním rozlišení a pak vždy v rozlišení polovičním v obou rozměrech než bylo předchozí rozlišení, celá posloupnost končí až u velikosti 1 1 o ripmap podobné jako mipmap, ale navíc obsahuje data zmenšená v každém rozměru jinou mocninou dvojky, i zde posloupnost končí až u velikosti 1 1 možnost uložení metadat tato data jsou při načítání souboru ignorována, lze je však číst přes speciální rozhraní přístup přes C++ rozhraní Z výše uvedeného seznamu je zřejmé, že formát nabízí o mnoho více než potřebujeme. Součástí rozhraní je naštěstí také jednoduchý přístup, který lze použít, pokud chceme pouze číst a zapisovat obyčejná RGBA data typu half do sekvenčního souboru bez podpory více rozlišení a metadat. Všechny zde popsané vlastnosti formátu OpenEXR jsou podrobněji vysvětleny v oficiálním dokumentu OpenEXR skupiny, který mám seznamu použité literatury uveden pod číslem [5]. 7 Typ half má 1 znaménkový bit, 10 bitů mantisy a 5 bitů exponentu, jeho rozsah je zhruba 6,0*10-8 až 6,5*10 4, přičemž čísla menší než 6,1*10-5 nejsou normalizovaná. 11
1.3 Zobrazování HDR dat Dalším problémem spojeným s HDR daty je jejich zobrazování na běžných zobrazovacích zařízeních. Tato zařízení mají dynamický rozsah zpravidla pouze kolem dvou řádů, což je pro HDR data velmi málo. Alternativou k níže popsaným možnostem zobrazování HDR dat je vlastnit speciální zobrazovací zařízení, dva prototypy takových zařízení představíme v části 1.3.3. První možností, jak HDR data na běžném zařízení zobrazit, je nezobrazovat je celá, ale zobrazit pouze řez těmito daty pro nějaký konkrétní čas expozice, kdy se určitá část desetinných hodnot pixelu namapuje na interval <0, 255> a zobrazí jako běžný obrázek. O tomto řezu mluvíme většinou jako o virtuálním snímku. Obvykle však chceme zobrazit data v jejich celém rozsahu, musíme tedy najít způsob, jak na interval <0, 255> namapovat celý rozsah desetinných hodnot. Bez újmy na obecnosti budeme i zde uvažovat pouze černobílá data, kde hodnoty pixelů odpovídají světlosti 8 daného bodu. Všechny níže popsané metody pracují buď shodně nad všemi barevnými kanály, nebo převedou na začátku barvu pixelu například podle vzorce L = 0.30R + 0.59G + 0.11B (4) na jeho světlost, pracují se světlostí a nakonec ji převedou zpět do barevných kanálů vzorcem C out C s in = Lout L, (5) in kde za C dosazujeme postupně R, G a B. Parametr s ovlivňuje barevnou sytost výsledného obrazu, ideální hodnota většinou leží mezi 0,4 a 0,6. Převod HDR dat do běžného obrázku nazýváme kompresí HDR dat a nabízejí se dva možné přístupy. Pokud budeme vytvářet mapování 9 nezávislé na poloze pixelu na obrázku, mluvíme o globálních metodách komprese 10. Tato skupina metod vyniká svojí rychlostí a jednoduchostí, protože si stačí předpočítat převodní tabulku a aplikovat ji na hodnoty jednotlivých pixelů. Abychom se vyhnuli inverzím kontrastu na hranách, je nutné, aby převodní zobrazení odpovídající tabulce bylo vzájemně jednoznačné a monotónní. Nevýhodou je často nedostatečná komprese. Hlavně v případě, že HDR data pokrývají víceméně celý dynamický rozsah, je zachování lokálního kontrastu velmi problematické. Druhou možností je snažit se najít mapování, které určitým způsobem zohledňuje polohu pixelu na obrázku, například jeho okolí zde jde o lokální metody komprese 11. Hlavní výhodou těchto metod je fakt, že jedné vstupní hodnotě pixelu může na jednom místě na obrázku odpovídat po kompresi odlišná výstupní hodnota pixelu než na jiném, což při vhodném zakomponování informací o okolí vede ke značnému vylepšení lokálního kontrastu výsledku. Mezi nevýhody této skupiny metod pak patří především výpočetní složitost a možnost vzniku všemožných artefaktů, způsobených právě lokální variancí převodního zobrazení. 8 anglicky luminance 9 anglicky tonemapping 10 tyto metody se někdy označují jako TRC Tone Reproduction Curves 11 tyto metody se někdy označují jako TRO Tone Reproduction Operators 12
1.3.1 Globální metody komprese Nejednodušší globální metodou komprese je lineární uniformní komprese, kde jsou vstupní data rovnoměrně mapována na interval <0, 255>. Tato metoda kromě značného potlačení lokálního kontrastu navíc často vede k neúměrnému ztmavení celého obrázku, protože v HDR datech se často vyskytují malá velmi světlá místa (slunce, svítidla, ), která způsobí, že zajímavé části obrázku jsou mapovány do malé oblasti hodnot kolem černé a tedy prakticky neviditelné. Značným vylepšením této jednoduché kompresní metody je logaritmická komprese. Ta zohledňuje kromě výše zmíněné časté vlastnosti HDR dat také fakt, že lidské oko vnímá intenzitu světla zhruba logaritmicky. Zlogaritmováním vstupních dat převedeme velmi světlá místa do malé oblasti kolem bílé barvy a zbude nám poměrně velká oblast pro zajímavé části obrázku, lokální kontrast je ale i přesto velmi potlačen. Globální metody komprese se nadále vyvíjely, mezi další používané patří například gamma korekce nebo různá vylepšení ekvalizace histogramu. Nejlepší z těchto metod zapojují také zkušenosti z fotografické praxe, případně se opírají o medicínské studie zabývající se lidským viděním. Pěkný shrnující přehled těchto metod s jejich stručným popisem poskytuje například Lischinski a kol. [6]. 1.3.2 Lokální metody komprese Lokální metody komprese dosahují typicky lepších výsledků než metody globální. Najdeme u nich dva základní směry, kterými se ubírají. První z těchto směrů čerpá z bohaté praxe celuloidové fotografie a snaží se stejné principy aplikovat i na fotografii digitální. Jednu z metod tohoto typu popisuje Reinhard a kol. [1]. Nejprve musíme nastavit požadovanou průměrnou světlost výsledného obrázku, k tomu slouží hodnota key 12 scény. Ta říká, jestli je scéna subjektivně světlá, normální nebo tmavá hi-key scénou je například bíle vymalovaný pokoj, low-key scénou naopak temné stáje. Hodnota key normální scény je volena jako 0,18. Při zvolené hodnotě key přepočítáme světlost vztahem a L ( x, y) = Lw ( x, y), (6) L avg kde a je zvolená hodnota key a L avg je průměrná světlost počítaná přes celý obrázek. Navržená metoda vychází z globální metody, která se snaží podobně jako logaritmická komprese minimalizovat vliv malých velmi světlých míst, zde se k výpočtu výsledné světlosti používá rovnice L d ( x, y) ( x, y) L( x, y) L =. (7) 1+ Výpočet tímto způsobem zaručuje, že malé světlosti projdou téměř beze změny, zatímco velké budou velmi zmenšeny. Zde přichází ke slovu fotografická praxe. V ní je běžné během zvětšování snímků z negativu na fotografický papír určitá místa zastiňovat 13 a snižovat tak jejich expozici, jiným naopak nadržovat 14 a tím jejich expozici zvyšovat. 12 v češtině se běžně používá toto anglické označení, včetně výrazů hi-key a low-key 13 anglicky dodging 14 anglicky burning 13
Po zanesení tohoto principu do výše zmíněné metody získáme novou metodu výpočtu výsledné světlosti L d ( x, y) ( x, y) V ( x, y) L =, (8) 1+ kde V(x, y) značí průměrnou světlost v okolí právě převáděného pixelu. Pokud je průměrná světlost v okolí převáděného pixelu větší než světlost tohoto pixelu, je výsledná hodnota zlomku menší než hodnota zlomku před úpravou v lokální metodu (zastiňování) a dojde tedy k zesílení lokálního kontrastu. V případě, že je průměrná světlost v okolí menší než světlost pixelu, je výsledná hodnota zlomku větší (nadržování) a lokální kontrast je opět zesílen. Pro správnou funkci metody je velmi důležitá správná volba okolí pixelu, ze kterého se průměrná světlost počítá. Autoři použili kruhové okolí s lokálně variabilním poloměrem. Tato variabilita poloměru okolí zaručuje, že bude zvolena vždy optimální velikost poloměru vzhledem k rozptylu světlosti v dané oblasti. Podrobnosti k výpočtu tohoto poloměru naleznete přímo ve zmiňovaném článku. Druhý směr lokálních kompresních metod vychází z předpokladu, že obrázek I(x, y) můžeme rozložit na složku odpovídající odrazivosti R(x, y) a na složku odpovídající osvětlení L(x, y) ( x y) R( x, y) L( x y) I, =,. (9) Složka R odpovídající odrazivosti bývá občas nazývána jako intrinsický obrázek scény a neobsahuje obvykle větší kontrasty než 100:1. Velké komprese s dokonalým zachováním kontrastů způsobených rozdílností textur a odrazivostí a citelným oslabením kontrastů způsobených přechody světla a stínu bychom docílili, kdybychom od obrázku oddělili složku L, zmenšili ji na novou složku L a pomocí ní spočítali nový obrázek I ( x, y) R( x, y) L' ( x y) I ' =,. (10) Rozdělení reálného obrázku na tyto dvě složky bohužel není možné. Pokud se snažíme tohoto rozdělení dosáhnout, musíme vždy k řešení přidat nějaké omezující podmínky týkající se vzhledu funkcí odpovídajících jednotlivým složkám. Shrnující přehled možností, jak tyto omezující podmínky definovat a proč, nám nabídne opět Lischinski a kol. [6]. Jádrem tohoto článku je však jejich vlastní metoda přinášející při kompresi HDR dat velmi zajímavé výsledky. V této metodě se její autoři opírají o fakt, že každá drastická změna světlosti v HDR datech se musí v nějakém měřítku obrazu projevit velkou hodnotou gradientu světlosti, jemné detaily, jako například textura, naopak odpovídají mnohem menším hodnotám gradientu. Cílem tedy je najít v různých měřítkách velké hodnoty gradientu a ty určitým způsobem ztlumit. Metoda je poměrně složitá, pokusím se zde nastínit její hlavní myšlenky bez uvažování různých měřítek s tím, že přesný popis metody naleznete v uvedeném článku 15. Definujeme funkci, která bude počítat požadované ztlumení gradientů jako 15 Metoda navíc ve skutečnosti nepracuje přímo s obrázkem ale s jeho logaritmem podle autorů totiž gradienty logaritmu světlosti přesně odpovídají lokálnímu kontrastu. 14
( x, y) α I Φ ( x, y) = I( x, y) α, (11) hodnotami parametrů α a β řídíme vlastnosti ztlumení. Parametr α určuje hranici, nad kterou jsou gradienty ztlumovány, parametr β zase velikost ztlumení. Experimentálně zjištěné ideální hodnoty těchto parametrů jsou α rovna 0,1 násobku průměrného gradientu a β mezi 0,8 a 0,9. Aplikací tohoto ztlumení na obrázek získáme funkci G(x, y) G ( x, y) I( x, y) Φ( x, y) β =. (12) Nyní potřebujeme najít obrázek takový, že funkce G(x, y) bude jeho gradientem. Existence takového obrázku není zaručena, určitě však existuje obrázek, jehož gradient se od G(x, y) liší nejméně z gradientů všech možných obrázků ve smyslu nejmenších čtverců. Požadovaný obrázek I (x, y) dostaneme jako řešení Poissonovy rovnice 2 I' = divg. (13) Pokud se snažíme porovnat výsledky jednotlivých kompresních metod, záleží na tom, jaká kritéria při hodnocení preferujeme. Logaritmická komprese je velmi rychlá, způsobuje však velkou ztrátu lokálních kontrastů, metoda podle Reinhard a kol. [1] přináší pěkný fotorealistický obrázek, komprese ale není dostatečná. Nejlepší komprese z výše zmíněných metod dosahuje metoda od Lischinski a kol. [6], která však dává nefotorealistické obrázky s velmi zvýrazněným lokálním kontrastem. Obrázek 1.3: Výsledky jednotlivých kompresních metod. Vlevo nahoře logaritmická komprese, vpravo nahoře komprese podle Reinhard a kol. [1], vlevo dole komprese od Lischinski a kol. [6] a vpravo dole na ukázku jedna ze vstupních fotografií pro tvorbu HDR dat, která byla následně metodami komprimována. 15
1.3.3 Přímé zobrazování S rostoucí oblibou pořizovat HDR data roste také potřeba zobrazovat tato data přímo bez nutnosti mapovat je algoritmem do běžného obrázku. Prohlížení HDR dat by se pak spíše podobalo pohledu na reálnou scénu než pohledu na monitor. S tímto cílem navrhli Seetzen a kol. [7] dvě zařízení, která přímé zobrazení HDR dat umožňují. Princip takovýchto zařízení spočívá v tom, že využívají LCD panel jako optický filtr s proměnlivým přenosem k modulaci vysoce intenzivního obrazu s nízkým rozlišením. Zdrojem tohoto obrazu je v případě prvního z navržených zařízení digitální dataprojektor, jak ukazuje následující obrázek. Obrázek 1.4: Nahoře vidíme princip HDR displeje z článku [7], dole pak fotografii jeho prototypu. Lampa uvnitř dataprojektoru generuje velké množství bílého světla. To postupně prochází dvěma LCD panely, které toto světlo modulují. LCD panel uvnitř projektoru je upraven tak, že je pouze černobílý, protože průchod barevnými filtry značně zmenšuje přenos panelu, jeho maximální dosažitelný kontrast je 800:1. Po průchodu Fresnelovo čočkou paprsky z projektoru rovnoběžně dopadají na druhý LCD panel s maximálním kontrastem 300:1. Maximální teoretický kontrast dosažitelný touto soustavou je tedy 240000:1, experimentálně bylo změřeno 54000:1 při jasu 2700cd/m 2, což hravě předčí všechna běžná zobrazovací zařízení. Kvůli potížím s moaré a s dokonalou kalibrací není možné dosáhnout přesného překryvu pixelů prvního a druhého LCD panelu, lepší je obraz projektoru mírně rozostřit a toto rozostření pak kompenzovat na druhém LCD panelu. 16
Podrobný popis, jak ze vstupního HDR obrazu spočítat obraz pro první a pro druhý LCD panel 16 spolu se zdůvodněním, proč lidskému oku nevadí rozostření obrazu projektoru, naleznete přímo ve zmiňovaném článku. Mezi hlavní nevýhody zmíněného řešení patří především velikost soustavy, cena projektoru a jeho energetické nároky a v neposlední řadě množství vznikajícího tepla. To je způsobeno tím, že světlo generované lampou projektoru postupně prochází dvěma filtry, i při zobrazení zcela bílé barvy jsou přenosy LCD panelů tak malé, že více než 98% světla je na filtrech pohlceno. Pokud lampu a první LCD panel nahradíme dvourozměrným polem bílých vysoce svítivých LED diod, světlo bude vznikat pouze tam, kde je skutečně potřeba, a energetické nároky se rapidně sníží. Toto pole je zdrojem vysoce intenzivního obrazu s nízkým rozlišením pro druhé zařízení navrhované ve zmíněném článku. Vzhledem k tomu, že je pole diod šestiúhelníkové a že záře jedné diody ovlivňuje okolní, je výpočet kompenzace na druhém LCD panelu obtížnější než v prvním případě a mezi jediné nevýhody tohoto řešení patří při použití současného grafického hardware nízká snímková frekvence. Ostatní parametry jsou však impozantní kontrast 280000:1 při jasu 8500cd/m 2. 1.4 Využití HDR dat HDR data nalézají široké uplatnění především v místech, kde dynamický rozsah běžného obrázku nestačí. Kromě popsaného použití ve fotografii se uplatňují například při vizualizaci medicínských dat. Mimo vylepšenou vizualizaci však přinášejí díky odstranění nutnosti při ukládání dat ořezat hodnoty příliš světlých nebo příliš tmavých pixelů na bílou respektive černou také dobrý základ pro všemožné výpočty ve zpracování obrazu. Druhou velkou oblastí využití HDR dat je herní průmysl, který pomalu objevuje jejich kouzlo. Podporu HDR dat v současném grafickém hardware rozebereme v části 1.4.2. 1.4.1 Zpracování obrazu Základní výhodou při použití HDR dat ve zpracování obrazu je možnost pořizovat virtuální snímky scény pro různé časy expozice. Pokud navíc pořizujeme HDR data správně, jsou pak úplně nezávislá na pořizovacím zařízení a lze tedy bez problémů v jednom obrázku míchat data pořizovaná různými zařízeními, bez toho, aby to působilo nepřirozeně nebo přímo rušivě. Je dokonce možné pořízená data míchat i s daty vyrobenými synteticky, například renderováním. Asi nejdůležitějším přínosem pro zpracování obrazu je ale správná propagace velmi světlých míst při používání různých konvolučních jader. Debevec a Malik [2] toto ukazují na příkladu syntetického rozmazání pohybem. Pokud simulujeme horizontální rozmazání pohybem konvolucí s obdélníkovým jádrem velikosti například 37 1 na obrázku s velkým dynamickým rozsahem, dostaneme při použití běžných a HDR dat zcela odlišné výsledky. Při výpočtu nad běžným obrázkem dojde díky tomu, že hodnota světlých pixelů odpovídající nejsvětlejším částem scény byla při ukládání oříznuta, k potlačení propagace těchto velmi světlých míst. U výpočtu nad HDR daty však toto nenastane. Zde jsou tyto světlé pixely opravdu o mnoho světlejší než okolní a nejsvětlejší místa jsou propagována správně. Vše vidíme na následujícím obrázku převzatém z článku [2]. 16 K výpočtu jsou použity pixelshadery moderních grafických karet, po zavedení rozšíření DVI standardu o desetinná data však bude možné výpočet provádět přímo ve speciálním hardware uvnitř zařízení. 17
Obrázek 1.5: Levý obrázek vznikl aplikací syntetického rozmazání na běžný snímek vidíme značný pokles světlosti oken. Pravý obrázek je virtuálním snímkem HDR dat, na která bylo aplikováno stejné syntetické rozmazání zde je světlost oken v pořádku a snímek se téměř neliší od reálného rozmazání. 1.4.2 Grafické akcelerátory Až do nedávné doby grafické akcelerátory neposkytovaly HDR datům žádnou nativní podporu. Objevovaly se proto různé postupy, jak implementovat jednotlivé techniky týkající se HDR dat pomocí toho, co grafické karty nabízejí. Jeden z těchto postupů umožňující používat na běžném grafickém akcelerátoru HDR textury popisuje Cohen a kol. [8]. Zatímco běžná 8-bitová přesnost celočíselných textur je pro zachycení dynamického rozsahu nedostačující, 16-bitová přesnost přináší 256 větší rozsah hodnot, což vede při použití standardní zobrazovací křivky k přibližně 200000 většímu zachytitelnému dynamickému rozsahu 17. Běžný grafický akcelerátor ale bohužel neumí s 16-bitovými texturami pracovat, můžeme však tuto texturu v rozdělit na dvě 8-bitové v 0 a v 1. První bude obsahovat 8 dolních a druhá 8 horních bitů původní textury. Pokud uvažujeme lineární zobrazovací křivku, určíme hodnotu texelu pro danou hodnotu expozice e jako () v = clamp( ev) = clamp( e( v + 256v )) = clamp( clamp( ev ) clamp( ev )) I + 0 1 0 256 1. (14) Tento výpočet je grafická karta schopna hardwarově akcelerovat, pouze musíme dbát na to, aby e bylo z intervalu <1/256, 1>. Pokud je e menší, projeví se oříznutí hodnot původní 16-bitové textury (nedostatek horních bitů), když je naopak větší, bude docházet ke kvantizaci hodnot textury (nedostatek dolních bitů). Protože chceme produkovat správné zobrazované hodnoty, musíme vzít opět do úvahy standardní zobrazovací křivku. Hodnoty 16-bitové textury přepočítáme inverzní funkcí k zobrazovací křivce, tedy v = v 1/2,2, rozdělením získáme 8-bitové textury v 0 a v 1. Povolený rozsah hodnot e pak bude <1/256 2,2, 1> a hodnotu texelu budeme počítat 2,2 2,2 2,2 2,2 () v 1/ clamp( e 1/ v' ) = clamp( clamp( e 1/ v' ) clamp( 256e 1/ v' ) I = +. 0 1 17 Standardní zobrazovací křivka je gamma 2,2, zachytitelný dynamický rozsah je tedy 256 2,2 větší. 18
V nejnovější GeForce6 řadě grafických akcelerátorů od společnosti nvidia již nalezneme plnou podporu pro práci s daty ve formátu OpenEXR. Podle technické zprávy, kterou vytvořili Green a Cebenoyan [9], umějí karty pracovat s 32-bitovým typem float i 16-bitovým typem half. Oproti předchozím řadám karet pracují nové karty s těmito typy velmi efektivně a implementují následující operace a datové struktury: aritmetika s plovoucí desetinnou čárkou pro veškeré matematické operace prováděné v shaderech desetinné snímkové buffery pro ukládání vypočítaných desetinných hodnot, autoři preferují z důvodu omezené šířky pásma spíše použití typu half desetinný blending fungující pouze s typem half umožňuje například použití algoritmů, které počítají iterativně pro každé světlo ve scéně, nebo operace využívající průhlednost desetinné textury ve formátu OpenEXR mohou být použity k uložení všech druhů textur, autoři však radí vzhledem k paměťovým nárokům dobře zvážit, které textury je skutečně nutné uchovávat v desetinném formátu desetinná filtrace je užitečná hlavně pro post-processing obrazu, nativní podpora této filtrace v hardware velmi zrychluje různé operace využívající k výpočtu konvoluci První počítačovou hrou, která tyto nové možnosti při tvorbě obrazu využívá, je Far Cry od společnosti Ubisoft. Podle prezentace Wenzel [10] renderuje tato hra plně v OpenEXR formátu s tím, že před zobrazením aplikuje na obraz dva filtry. Nejprve je opakovaně použito jemné rozmazání okrajů velmi světlých míst, které simuluje neschopnost oka pozorovat hranu, pokud je rozdíl světlosti jednotlivých částí příliš veliký a následně je použita globální varianta komprese podle Reinhard a kol. [1]. Obrázek 1.6: Vlevo vidíme výsledný obrázek, pokud použijeme tradiční rendering, vpravo pak obrázek vzniklý renderováním v OpenEXR formátu po aplikaci obou filtrů. Obrázky jsou převzaty z Wenzel [10]. V interaktivní aplikaci, jakou počítačová hra bezesporu je, můžeme navíc simulovat přizpůsobivost oka různým světelným podmínkám. Pokud avatar 18 vyjde ze tmy do světla, chtěli bychom, aby byl množstvím světla na chvíli oslepen, když naopak vejde do temné místnosti, chceme ho nechat chvíli rozkoukávat. Tohoto efektu docílíme, pokud mírně upravíme metodu komprese. Při přepočítávání světlosti scény podle hodnoty key nahradíme průměrnou světlost scény L avg funkcí, která se k průměrné světlosti scény pomalu přibližuje. Vneseme tak do celého procesu jistou setrvačnost. 18 Slovem avatar označujeme počítačovou reprezentaci uživatele, který vstoupil do virtuálního světa, v počítačové hře to je tedy postava, za kterou hrajeme. 19
Grafické akcelerátory od ATI v současné době formát OpenEXR nepodporují. Tyto akcelerátory implementují pro práci s HDR daty vlastní 24-bitový desetinný formát, který ale neumožňuje desetinný blending ani desetinnou filtraci. Podpora pro HDR však byla přítomna již v kartě Radeon 9700, jak ukazuje technická zpráva Mitchell [11]. Pro tuto kartu bylo v roce 2002 napsáno demo Rendering with Natural Light, které sofistikovaným způsobem renderuje HDR scénu v reálném čase. Demo využívá panoramatického HDR obrázku jako mapy okolí 19 k výpočtu osvětlení syntetických objektů. Samotná vizualizace pak probíhá přes rozmazání ostrých hran přechodu světla a stínu Gaussovským filtrem a následným pořízením virtuálního snímku podle požadovaného času expozice. Obrázek 1.7: Snímek z dema Rendering with Natural Light převzatý z [11]. 19 anglicky environment map více o panoramatických formátech naleznete v části 2.2.1 20
Kapitola 2 Panoramatické snímky 2.1 Přínos panoramatických snímků Při zachycování reality, kterou pozorujeme kolem sebe, do snímků řešíme kromě problémů s omezeným dynamickým rozsahem také problémy s omezeným zorným úhlem, který nám pořizovací zařízení respektive jeho objektiv nabízí. Tento úhel má pro běžný objektiv hodnotu pouze kolem 53, pokud však chceme zachytit celý prostor kolem nás, potřebujeme zorný úhel 360 /180. Problémy spojené s nedostatečným zorným úhlem snímku řeší lidé již několik desetiletí, proto jsou metody pořizování i vizualizace panoramatických snímků v současné době na velmi vysoké úrovni. Některé z těchto pořizovacích metod stručně popíšeme v části 2.2. Konkrétní podoba výsledného panoramatického snímku záleží na tom, pro jaké účely byl daný snímek pořízen. V oblasti hobby fotografie jde většinou o jednoduché širokoúhlé panoramatické snímky, kdy spojením několika málo fotografií focených s odlišným směrem pohledu při stejné úrovni horizontu získáme například pěkný pohled do krajiny. Nás však budou zajímat všesměrová panoramata, která zachycují celý 360 /180 prostor a jsou proto označována jako mapy okolí. Tato všesměrová panoramata nacházejí uplatnění například v systémech virtuální reality. Systém QTVR a jemu podobné simulují naši přítomnost ve snímaném prostoru, můžeme si interaktivně volit směr pohledu i velikost přiblížení. Mapy okolí mají v poslední době ještě jedno důležité využití. Pokročilé renderovací techniky moderních grafických karet využívají mapu okolí jako obraz vzdálené scény. Mapa okolí je v tomto případě uložena v textuře takového formátu, že ji lze adresovat směrovým vektorem. Při renderování jsou pak pro paprsky, které již neprotínají žádný objekt ve scéně, použita data z této textury podle směru daného paprsku. Modifikace této techniky využívá mapu okolí i pro výpočet lesklého osvětlení pocházejícího od vzdálených světel ve scéně. Pro střed scény je vygenerována mapa okolí, která obsahuje jednotlivá vzdálená světla, a ta je následně uložena do textury. Tato textura je pak použita ve všech místech scény jako obraz vzdálené scény, protože odchylka od přesného výpočtu je minimální. Přirozenějších výsledků dosáhneme, pokud mapu okolí negenerujeme, ale použijeme pořízený panoramatický snímek. Vzhledem k tomu, že výsledný panoramatický snímek má obsahovat obrazy světel, je potřeba, aby zachycoval velký dynamický rozsah. Tvorbou HDR panoramat se budeme zabývat v části 2.3. 21
2.2 Pořizování panoramatických snímků Klasickou metodou k pořízení panoramatického snímku je spojování snímků s odlišným směrem pohledu. Vzhledem k tomu, že zorný úhel běžného objektivu je skutečně velmi malý, potřebujeme mít na vstupu desítky fotografií. Snaha o snížení počtu potřebných fotografií vedla k vývoji netradičních metod pořizování. Dříve než se podíváme na jednotlivé metody umožňující všesměrové panoramatické snímky pořizovat, seznámíme se s formáty, ve kterých lze vzniklou mapu okolí uložit. 2.2.1 Formáty pro ukládání panoramatických snímků Jednotlivé formáty si budeme ukazovat na panoramatu vyrenderovaném aplikací Terragen od společnosti Planetside Software. Data, která chceme uložit odpovídají 3D kulové ploše, body na ní adresujeme pomocí prostorových úhlů θ a ϕ. Základním formátem je válcová projekce dobře známá z kartografie. Úhel θ zde obíhá 2π v rovině horizontu (rovina kolmá na osu y), úhel ϕ jde shora dolů. Souřadnice bodu na obrázku dostaneme z prostorových úhlů jako 1 θ ϕ u =, v =. (15) 2 2π π Obrázek 2.1: Válcová projekce latitude/longitude. Druhou možností je použít projekci na stříbrnou kouli. Touto projekcí získáme obrázek odpovídající odrazu scény ve stříbrné kouli. Zde úhel θ obíhá 2π v rovině pozorovatele (rovina kolmá na osu z), úhel ϕ jde zpředu dozadu. Obrázek je posunut, aby se bod [0, 0] nacházel uprostřed, souřadnice z prostorových úhlů spočítáme jako ϕ ( ) cos( θ ) sin 2 + 1 u =, 2 ϕ ( ) sin( θ ) sin 2 + 1 v =. (16) 2 Tato projekce velmi deformuje části obrázku nacházející se na obvodu kruhu odpovídajícího stříbrné kouli. Proto byla zavedena alternativní projekce do úhlové mapy. Zde je mapování úhlu ϕ lineární a příslušné vzorce vypadají 22
( θ ) ϕ π cos +1 u =, 2 ( θ ) ϕ π sin +1 v =. (17) 2 Obrázek 2.2: Vlevo projekce na stříbrnou kouli mirrored ball, vpravo projekce do úhlové mapy angular map. Je vidět, že projekce do úhlové mapy méně deformuje oblasti umístěné na obvodu kruhu. Posledním používaným formátem je projekce na krychli. Ta se díky velmi snadné adresaci směrovým vektorem používá jako formát textury odpovídající mapě okolí v grafických akcelerátorech. Obrázek 2.3: Projekce na krychli vertical cross. 23
2.2.2 Netradiční metody pořizování panoramat První z netradičních metod pořizování panoramatických snímků je fotografování scény přes stříbrnou kouli. Stříbrnou kouli umístíme na stojan do volného prostoru a fotografujeme ji ze stativu o stejné výšce jakou má stojan. Na povrchu stříbrné koule vidíme téměř celý okolní prostor, problémem zůstává pouze místo přímo za koulí, velmi zdeformovaný obraz na obvodu koule a přítomnost fotografa na snímku. Pokud použijeme postup, který navrhuje P. Debevec, pořídíme dva snímky pevně umístěné stříbrné koule s tím, že polohu fotografa změníme vzhledem ke středu koule o 90 20. Když pak formát obou snímků změníme z projekce na stříbrnou kouli na projekci do úhlové mapy a jeden z nich přitom přepočítáme tak, aby oba snímky odpovídaly stejnému směru pohledu, získáme dva snímky, které se ideálním způsobem doplňují. Na prvním snímku vidíme místa, která jsou na druhém snímku skryta za fotografem, navíc oblast poblíž obvodu kruhu vznikla přepočítáním obrazu z nezdeformovaných částí původního snímku na rozdíl od druhého snímku, kde vznikla roztažením velmi zdeformovaných obvodových dat. Naopak oblasti mezi středem a obvodem snímku jsou dobře zachyceny pouze na druhém snímku, na prvním snímku tato oblast odpovídá přepočítaným zdeformovaným obvodovým datům. K získání kvalitní mapy okolí bez fotografa a deformací tedy stačí použitím vhodné masky spojit tyto dva snímky dohromady. Obrázek 2.4: Snímky pořídil P. Debevec, všechny operace byly prováděny v jeho aplikaci HDRShop 1.0. V levém sloupci vidíme pořízené snímky stříbrné koule, v prostředním pak tyto snímky po převodu na projekci do úhlové mapy. Prostřední horní obrázek je navíc přepočítán, aby odpovídal stejnému směru pohledu jako dolní. Vpravo nahoře vidíme masku, která slouží ke spojení upravených snímků bílá oblast odpovídá částem převzatým z dolního a černá oblast částem převzatým z horního snímku, šedivá oblast znamená prolnutí těchto dvou snímků. Vpravo dole je pak vyobrazena výsledná mapa okolí. 20 Laickým rozumem se nabízí myšlenka, že ideální změna polohy je 180. To však není pravda, protože části scény za koulí na prvním snímku by na druhém snímku zakrýval fotograf. 24
Druhou a více používanou alternativní metodou je pořizování snímků objektivem s velmi malou ohniskovou vzdáleností, který má v důsledku toho velmi velký zorný úhel až 190. Takové objektivy označujeme jako rybí oka. Při použití těchto objektivů však narážíme na dva problémy. Vzhledem k extrémním optickým vlastnostem objektivu dochází na čočce ke chromatické aberaci, kterou je nutné následně opravovat a co je horší, velmi světlé objekty, jako je například slunce, výrazně ovlivňují světlost ve svém okolí. Tyto objektivy tedy nejsou příliš vhodné pro pořizování HDR dat. Obrázek 2.5: Tento snímek byl pořízen objektivem s velmi malou ohniskovou vzdáleností. Jasně vidíme, jak velmi světlé slunce výrazně ovlivňuje světlost ve svém okolí. Autorem snímku je J. Regester. Snímky pořízené rybím okem lze pomocí specializovaných nástrojů převést na válcovou projekci. Pokud je zorný úhel stále nedostatečný, můžeme použít metodu popsanou v části 2.2.3 ke spojení více snímků. 2.2.3 Klasické pořizování panoramat spojováním Jak již bylo zmíněno v úvodu části 2.2, klasickou metodou pořizování panoramatických snímků je spojování snímků s odlišným úhlem pohledu. Úhly pohledu jsou přitom voleny tak, aby pořízené snímky měly dostatečný překryv, ideální hodnota je uváděna jako 20% plochy snímku. Dalším důležitým pravidlem, které musíme při pořizování snímků pro následné spojení v panorama dodržovat, je správná rotace fotoaparátu. Aby byly zákryty různě vzdálených předmětů na všech snímcích stejné, je nutné, aby rotace probíhala kolem optického středu pořizovacího zařízení, který se většinou nalézá ve středu povrchu čočky objektivu. Za tímto účelem jsou vyráběny různé nástavce na stativ, které toto umožňují. Původní metoda využívá člověka k určení přibližné vzájemné polohy pořízených snímků a k označení odpovídajících si oblastí na dvojicích snímků. Spojení obrázků pak spočívá v určení polohy a natočení každého ze snímků na konstruované 3D kulové ploše, jedním z parametrů je také poloměr této plochy. Hodnota těchto parametrů je nalezena iterativním výpočtem, který se snaží maximálně zohlednit označené korespondence mezi snímky. 25