HDR sférické panorama

Sférická panoramata jsou v poslední době velmi oblíbená, takže jsem se pokusil o jejich tvorbu v amatérských podmínkách a za použití open-source či freeware programů.

Aktualizace (2018): níže uvedené informace se týkají doby středověku, ale některé nástroje se stále mohou hodit pro automatizaci tvorby panorama.

Při tvorbě sférického panorama se obvykle vyskytnou následující problémy:

  • Velký jasový rozsah: snímá se obloha, proti slunci a po slunci. Řešením je nasnímat scénu do HDR (High Dynamic Range) obrázků a jejich prezentaci jako HDR nebo převod na běžný LDR (Low Dynamic Range) obrázek pomocí některé metody mapování tónů.
  • Paralaxa: Snímání bez 3D panoramatické hlavy, která umožňuje rotaci fotoaparátu podle středu vstupní pupily objektivu, by vedlo ke vzniku paralaxy, která následně komplikuje „slepování“ snímků dohromady. Takže jsem jednu jednoduchou sestavil – viz článek Panoramatická hlava – levné řešení.
  • Čas: je třeba nasnímat větší množství snímků (v závislosti na zobrazovacím úhlu použitého objektivu), což chvíli potrvá. Takže je téměř nemožné snímat pohyblivé scény. Problémy též činí listí na stromech, apod.

Pořízení snímků

Stativ je lépe umístit tak, aby fotoaparát nebyl na přímém slunci – kvůli zabránění odlesků apod. Při snímání na výšku s objektivem 10 mm a přepočítacím faktorem 1.6 je třeba cca 6 snímků k pokrytí 360˚ panorama v horizontálním směru včetně rozumného přesahu mezi jednotlivými snímky. Snímat lze ve dvou řadách (sklon nahoru včetně nadhlavníku, mírný sklon dolů) + 1 dodatečný snímek přímo k podnožníku. To znamená celkem 6 x 2 + 1 snímek, tj. 13 snímků pro vytvoření sférického panorama.

Pokud má snímaná scéna málo detailů (např. zdi/strop/podlaha bez kresby), pak je vhodné volit větší množství snímků s většími přesahy, vytváření kontrolních bodů v huginu bude podstatně snažší.

HDR obrázky budu tvořit z 6 expozičních variant s krokem 1.5 EV. Kontrolou histogramu zkušebních snímků jsem zjistil, že rozsah expozic je dostatečný (odpovídající záměru – těžko zvládnout zachování kresby ve slunečním kotouči). V mém případě to byla řada 1″, 1/3″, 1/8″, 1/20″, 1/60″, 1/180″ při cloně 11 a citlivosti 100 ISO.

Pro urychlení snímání jsem na fotoaparátu nastavit AEB (automatic exposure bracketing) +/- 1.5 EV, manuální režim s clonou 11, zaostřil na hyperfokální vzdálenost (nebo raději blíže k nekonečnu), ručně nastavil vyvážení bílé, aktivoval předsklápění zrcátka pro odstranění chvění (pano hlava není příliš stabilní) a nasnímal nejprve řadu 3 snímků z výchozího expozičního času 1/3″ a pak řadu 3 snímků z času 1/60″. Vyplatí se snímat vždy 3 + 3 AEB snímky časově blízko k sobě – po automatickém přejmenování souborů dle času snímání z EXIFu umožňuje lepší orientaci ve velkém množství souborů a také se sníží riziko většího pohybu mraků atd.

Celkem je nasnímáno 78 (13 x 6) snímků do RAW formátu.

Vytvoření HDR snímků

Skript Konverze snímků z RAW formátu přejmenuje soubory dle času snímání a následující skript dále doplní na konec souboru označení pořadového čísla souboru (tj. vždy po 6 expozičních variantách – nutno ověřit, zda nejsou v adresáři nadbytečné snímky!).

#!/bin/bash
# Rename LDR files for HDR generation
# The script expects a series of input images sorted by EXIF time or sequentially
# No other images with the same extension should be in the working directory
ext=crw # Which files should be processed
no=6 # No of multiple exposures
x=1
seq=0 # Start from 0 to match hugin's style
for i in *.${ext}; do
if [ ${x} -gt ${no} ]; then
x=1
seq=`expr ${seq} + 1`
fi
rename '/.${ext}/_exp_${seq}.${ext}/' ${i}
x=`expr ${x} + 1`
done

Pro samotnou tvorbu HDR snímků preferuji program Bracketing to HDR (je součástí CinePaintu, návod viz HDR Tutorial – nenechte se odradit teorií v úvodu tutoriálu, používání je prostoduché). Tento způsob sice nepodporuje dávkové zpracování, ale vede ke kvalitnějšímu výsledku než např. pfscalibrate z balíku pfstools. Dávkové zpracování vstupních snímků nabízí např. komerční Photomatix (MS Windows/Mac OS).

Plugin Bracketing to HDR nepodporuje čtení přímo RAW souborů, můžeme však bez problémů využít přímo JPEG soubory vytvořené fotoaparátem a vzniklé HDR soubory pojmenovat srozumitelným způsobem, např. seq_[00|01|…|16].hdr.

Takto vypadají snímky seřazené dle pozice v budoucím panorama (po konverzi na LDR – viz níže):

Tvorba panorama

Hugin podporuje přímo HDR formát (v preferencích lze nastavit logaritmické zobrazení snímků s jasovým rozsahem více jak 8bit – jinak bude snímek nejspíše tonout ve tmě). Bohužel, rozšíření Huginu pro automatické generování kontrolních bodů AutoPano-SIFT HDR formát nepodporuje.

Řešením je vytvořit panorama z LDR (JPEG) snímků a nakonec pouze nahradit jména vstupních souborů v *.pto souboru projektu pro Hugin. Pro účely testování (optimalizace, doplňování kontrolních bodů) je to i varianta méně náročná na výkon počítače.

LDR snímky lze z HDR vytvořit různým způsobem (např. aplikací gamma křivky, logaritmické křivky či komplikovanějších metod). V tomto kroku je cílem vytvořit LDR snímek, který bude obsahovat všechny jasy HDR snímku, nezáleží na tom, zda je snímek vizuálně hezký či nikoliv. Použil jsem metodu reinhard02 z pfstmo (doplněk balíku pfstools) s výchozími hodnotami:

#!/bin/bash
#
# generate tone-mapped LDR images for autopano-sift
#
for i in exp_*.hdr; do
pfsin ${i} | pfstmo_reinhard02 -v | pfsout tm_${i}.jpg
done

Dále standardní postup: načetl jsem všechny JPEG snímky do Huginu, nastavil objektiv 10 mm a přepočítací faktor 1.6, označil výchozí snímek pro pozici a expozici, nechal AutoPano-SIFT vytvořit výchozí kontrolní body.

AutoPano-SIFT vytvoří kontrolní body pro každý sousedící snímek, tzn. že nalezne levý, pravý, horní a dolní snímek. Vzhledem k charakteru některých snímků (např. nebe), nevytvoří body žádné – ty je nutné doplnit ručně. Taktéž mu bohužel činí potíže snímky širokoúhlým objektivem (můj případ – situace se zlepší po vypnutí RANSAC filtration) nebo snímky různě přeházené (může pomoci spouštět autopano vždy jen na řadu sousedících snímků, tj. první řada, druhá řada, a dále postupně snímky nad sebou). Volbou „Auto Refinement“ v AutoPano-SIFT odstraníte body, které „nelícují“ přesně, některé body jsou umístěny úplně nesmyslně. V některých případech je jednodušší zkalibrovat objektiv (tj. určit parametry zkreslení, vyosení) a ručně spojit jednotlivé snímky 3-4 body.

Snímky optimalizuji postupně – tj. nejprve pozici + ověřit či smazat kontrolní body s největší odchylkou, poté postupně pro úhel pohledu, zkreslení objektivu a posun středu objektivu (běžná chyba u širokoúhlých objektivů). Není rozumné optimalizovat pro všechny parametry okamžitě na počátku, často vede k nesmyslným hodnotám. (Pokud používám „kalibrovaný“ objektiv, pak samozřejmě optimalizuji pouze pro pozici, ostatní parametry jsou fixní.)

Nyní už jen stačí vytvořit příslušné panorama z HDR snímků. Nejjednodušší je nahradit jména vstupních snímků v souboru projektu (*.pto – ASCII soubor) a projekt znovu otevřít v Huginu. V poslední záložce je možné změnit výstupní rozlišení (zvolil jsem automaticky), výstupní formát TIFF a geometrickou výstupní projekci (equirectangular) a pak už jen počkat pár desítek minut na výsledek.

Výsledný soubor lze zkontrolovat v CinePaintu (musí být typ 32bit) a uložit do úspornějšího formátu (HDR nebo EXR). Pokud je třeba, je možné přímo editovat HDR snímek – protože monitor zobrazuje běžně LDR snímky, je třeba si vybrat, jaká část HDR snímku má být viditelná nebo nastavit dostatečně velké gamma (menu Image/Expose).

Pozn.: Enblend (používaný Huginem pro prolínání jednotlivých snímků) bohužel podporuje 360° panorama pouze v horizontálním směru – tzn., že umí upravit tonalitu sousedních snímků (-180° a +180°), aby na sebe plynule navazovaly. Ono bohužel znamená, že neřeší návaznost tonality pro zenit (nadhlavník) a nadir (podnožník). To je ve výsledku patrné hlavně u jednolité barevné plochy, např. oblohy.

Nepříliš ideálním řešením může být konverze sférického panorama z geografické (equirectangular) projekce do projekce kubické (používané QuickTimem), kde je koule rozložena na 6 snímků zobrazených v běžné gnómonické (rectilinear) projekci, která umožňuje snadnou editaci. Těchto 6 snímků může být i základem pro vytvoření QTVR panorama. Konverzi z equirectangulární projekce do kubické projekce umí perlový skript erect2cubic ze sady PanoTools::Script (viz níže).

Převod HDR na LDR

Programů na převod HDR na LDR existuje několik, z nekomerčních např. ty založené na pfstools – buď z příkazové řádky nebo lze použít vynikající program s grafickým rozhraním Qtpfsgui. Příklad ukazuje použití operandu „durand02“ s výchozími parametry z příkazové řádky. Více viz manuálové stránky.

$ pfsin panorama.hdr | pfstmo_durand02 | pfsout panorama_ldr.tif

Výstupní soubor je 8bit TIFF – v CinePaintu/GIMPu lze upravit křivky, doostřit a zkonvertovat do JPEG.

Prezentace na webových stránkách

Způsobů, jak prezentovat kubické panorama, je několik. Pro nejrozšířenější formát QuickTime je nutné nejprve převést panorama z equirectangulární projekce na kubickou a následně do formátu MOV. Tento formát je proprietární záležitost, řešením pro linux je perlový skript erect2qtvr-gui z balíku Panotools::Script (je součástí databáze CPAN). Prohlížení je možné díky freePV (freePV nepodporuje prohlížení všech MOV videí, pouze QTVR) nebo samozřejmě originální QuickTime Player.

Výsledné panorama v QTVR formátu zde – 1.6 MB).

Dodělat: vložit panorama do příspěvku…

Slovníček

Tvorba panoramat používá různé typy projekcí. Vzhledem k tomu, že mnou použité programy jsou v angličtině, pro orientaci uvádím malý slovníček (nákresy a bližší vysvětlení viz Wikipedia – Map projections:

  • Rectilinear projection – gnómonická projekce používaná většinou fotografických objektivů (kromě fish-eye objektivů). Lze jí zobrazit pouze jednu hemisféru, linie se zobrazují jako linie, plochy více vzdálené od středu obrazu jsou relativně větší.
  • Equirectangular projection – geografická projekce, patří do skupiny cylindrických (válcových) projekcí. Lze jí zobrazit celou kouli, dodržuje vzdálenosti mezi jednotlivými body na kouli. Oblasti v nadhlavníku (vertikálně +90°) a podnožníku (vertikálně -90°) jsou značně zkreslené.
  • Planar panorama – běžné panorama používající gnómonickou projekci. Hodí se pro panorama s malým zobrazeným úhlem (cca do 170°).
  • Cylindrical panorama – válcové panorama založené na geografické projekci, vhodné pro zobrazení 360° v horizontálním směru a omezeně ve vertikálním směru. Zřejmě nejpoužívanější.
  • Spherical panorama – sférické panorama, vhodné pro zobrazení celé koule (360° horizontálně, 180° vertikálně). Je založeno na geografické projekci. Je nutné použít speciální prohlížeč.
  • Cubic panorama – kubické panorama, vhodné pro zobrazení celé koule. Vychází z běžného plochého (gnómonického) zobrazení šesti stran krychle. Je nutné použít QuickTime přehrávač.
  • 3D Virtual tour – prohlížeč umožňující zobrazit sférické či kubické panorama – zobrazuje se vždy výřez, pozorovatel stojí na místě a má možnost se otáčet všemi směry. Prohlížeče jsou založené na technologii Java, QuickTime, Flash apod.

Použité programy

  • CinePaint – grafický editor podporující editaci obrázků s větší bitovou hloubkou (16bit TIFF, 32bit HDR, apod.);
  • PFStools – balík programů pro příkazovou řádku pro práci s HDR snímky.
  • PFStmo – rozšíření pro PFStools pro tone-mapping HDR snímků na LDR snímky.
  • Qtpfsgui – uživatelské rozhraní k PFStools – umožňuje různé operace s HDR snímky (konverze OpenEXR, RadianceRGB, TIFF; rotace, změna velikosti; tone-mapping).
  • Hugin – uživatelské rozhraní k řadě programů pro tvorbu panorama.
  • Pano2QTVR – freeware pro konverzi snímku v geometrické projekci do formátu MOV.
  • QuickTime player – přehrávač pro MOV soubory.

Problémy

Při vytváření HDR snímků kombinací LDR snímků s různou expozicí též dochází k různým chybám. CinePaint často vytváří žluté/zelené fleky kolem přepálených míst; pfstools zase černé fleky na monotónních plochách, atd. Pak nezbývá, než HDR snímek retušovat, např. v CinePaintu – po otevření může být snímek příliš tmavý či naopak světlý. Pomůže zvolit menu View/Expose a nastavit vhodnou kombinaci gamma či expozice (pozor, zde se nejedná o změnu parametrů snímků, pouze o změnu zobrazení HDR snímku na LDR monitoru).

Enblend 3.0 má problémy se čtením alpha kanálu 32bitových TIFFů, je lépe použít verzi 2.5. nebo současnou vývojovou verzi z CVS (18. srpna 2007).

Ač Enblend podporuje práci s HDR soubory, nebyl zatím příliš testován a často jsou na výsledném prolnutém snímku patrné různé chyby (černé či jinak barevné skvrny, oblasti se sníženým kontrastem). Chyba byla reportována zde a zde.

Problém s artefakty lze do značné míry řešit následovně: před zpracováním v huginu je nutné aplikovat gamma korekci na zdrojové hdr snímky – popis viz zde.

3 odpovědi na “HDR sférické panorama”

  1. Článek je trochu starší, dnes používám panorama ve flashi z důvodu kompatibility s různými operačními systémy. (Java ani QuickTime nejsou tolik rozšířené.)
    Zvolil jsem placený FlashPanorama Player (http://flashpanoramas.com/player/), protože v době rozhodování jsem nic jiného nenašel. Dnes bych nejspíše volil open source PanoSalado (http://panosalado.com).

  2. Hezký článek.
    V čem jsou tvořeny flash virtuální panoramata?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..