Měření jasů v podexponovaných oblastech snímků kamerou Fuji S 5000

Při vypracovávání dubnové zprávy o osvětlení Protěže a Javoru jsme postřehli nemilý fenomén: z mírně podexponovaných oblastí snímků vycházely nižší jasy než ze snímků těchže míst, ale dobře proexponovaných. Zmínil jsem tehdy (na začátku části Metody měření), že to může souviset s nelinearitou digitalizace dat u tohoto typu kamery (Fuji S 5000).

Další zkoumání ukázalo, že se naštěstí o nelinearitu nejedná. Daný efekt byl zaviněn použitím obvyklého odečítání snímku pořízeného se zakrytým objektivem (takovým se říká „temný snímek“ aneb darkframe). U jiných fotoaparátů, a samozřejmě u vědeckých CCD kamer, se prostým odečtením temného snímku získá signál, který je pak už přímo úměrný množství světla dopadlého na pixel (a tedy jasu scény). U fotoaparátu, který jsme použili tentokrát, to je ale složitější.

Komplikace je v tom, že tento typ kamery odečítá od surových digitalizovaných dat nějakou konstantu (nebo alespoň žádnou kladnou nepřičítá), takže až polovina pixelů temného snímku má nulovou hodnotu, teprve druhá polovina má hodnoty nenulové, kladné. Ty mají zhruba normální rozdělení se standardní deviací asi 30 a se středem na nule. K úplnosti dat chybí ovšem ta polovina „pod nulou“. U jiných kamer se to řeší tak, že se k signálu přidává konstanta, např. 128, a nulových pixelů je pak jen zanedbatelné množství, temný snímek obsahuje takřka kompletní záznam šumu (vznikajícího jak v senzoru CCD či CMOS, tak i při měření a převodu jeho signálu do digitální podoby).

Nulové pixely nenesoucí informaci

Při přípravě dubnové zprávy byl již vyřešen jeden problém z toho vyplývající: u velmi málo exponovaných snímků s otevřeným objektivem, u kterých je také mnoho pixelů ještě nulových, nenesou ony nulové pixely žádnou informaci o světle. V extrémních případech, kdy je expozice velmi malá, se na snímku zaregistruje jen polovina dopadlého světla: totiž v nenulových pixelech. Skutečné množství dopadlého světla je až dvojnásobné. Kompenzaci tohoto efektu lze aplikovat jen na dostatečně velké soubory pixelů, a zcela správně funguje jen u scén s rovnoměrným jasem.

Ve výstupu z programu raw2lum je tato kompenzace případně vyjádřena koeficientem (menším než 1,0) u prostorového úhlu zaujímaného snímkem: úhrnné množství světla (hustota zaregistrovaného světelného toku) se vztahuje jen na onen menší prostorový úhel, kde byly nenulové pixely. Aplikuje se také u průměrných jasů v jednotlivých políčkách zvoleného rastru (či u hustot světelného toku z těchto políček). Jde-li ale např. o políčko, kde je jediná nepřeexponovaná lampa s černým okolím, může použitá kompenzace přecenit množství světla až téměř dvojnásobně. Takové extrémní případy naštěstí v naší zprávě nejsou: množství světla z jasných bodových zdrojů je počítáno jen při zahrnutí dobře proexponovaných pixelů.

Co vlastně odečítat, je-li temný snímek „nekompletní“

Odečtení temného snímku a kompenzace o nulové pixely je adekvátní u scén s rovnoměrným, velmi nízkým jasem, kde je téměř polovina pixelů nulových a medián hodnot pixelů je nula nebo jen několik jednotek. Je-li ale medián několik desítek (snímek není podexponovaný zcela, už na něm něco začíná být, ač velmi zašuměně, patrné), pak takový výpočet podcení jas scény. Pochopit to lze dobře na případě snímku hojně exponovaného: ten má všechny pixely nenulové, ale odečítáme od něj temný snímek s nenulovou střední hodnotou (typicky kolem 12). Neměli bychom ale odečítat nic, střední hodnota „správného“ temného snímku, který by měl i pixely se zápornou hodnotou, by byla zhruba nulová. Jsou-li typické hodnoty snímku kolem tisíce a víc, odečtení dvanáctky je zanedbatelné, expozici beztak neznáme s přesností na jedno procento. Jsou-li ale typické hodnoty kolem třiceti, pak odečtení dvanáctky ubere víc než třetinu signálu. To je právě důvod, proč jasy v podexponovaných oblastech snímků vycházely nečekaně nízké.

Řešení, aplikované od verze 1.21 programu raw2lum, se opírá o distribuční funkce hodnot pixelů temných snímků. Konkrétně, využívá integrálu funkce [percentil, hodnota pixelu pro něj]. Je-li střední hodnota pixelů zpracovávaného snímku v nějaké oblasti (po odečtení temného snímku) rovná nebo vyšší než hodnoty pro 99. percentil temných snímků (konkrétně, je-li vyšší než 80), pak k ní připočítávám setinu integrálu od nuly do 99, což je téměř totéž, jako střední hodnota temného snímku. Je-li střední hodnota dané oblasti zpracovávaného snímku menší než 80, pak integruji jen po percentil odpovídající dané hodnotě (pro hodnotu 30 je setina takového integrálu zhruba čtverka). Průběh takového určitého integrálu v závislosti na jeho horní mezi jsem aproximoval polynomem aplikovaným na sadu temných snímků.

Další statistickou analýzou temných a málo exponovaných snímků by se jistě dal nalézt ještě lepší postup. To ale není moc potřeba: porovnání hodnot pro políčka o velikosti 32x32 z málo a hodně exponovaných snímků ukázalo, že kompenzace je vyhovující, podíl jasů zjištěných z obou snímků nezávisí na hodnotě jasu dle dobře proexponovaného snímku (závisí jen na odchylkách skutečné expozice od té, která je zapsána v hlavičce snímku).

Oprava je plně adekvátní opět jen pro oblasti s rovnoměrným jasem. Neužívám ji pro celý snímek (ten má jasy málokdy všude stejné), ale jen pro jednotlivá políčka.

Oprava je v hrubší podobě užita i u barevně kódovaných zobrazení jasů tam, kde se v zašuměných oblastech jasy vyjadřují jako průměr přes více pixelů (obvykle 16, přičemž všechny musejí mít hodnoty menší než 100) – tam je oprava samozřejmě dost nejistá, neb střední hodnota z tak malého vzorku je také značně „šumící“. Navíc se v tomto případě nevyužívají samostatně hodnoty pro R a G pixely (ty jsou v této fázi výpočtu už zapomenuty), ale jen neopravená hodnota průměrného jasu s předpokladem, že obraz je mírně načervenalý (tj. že hodnoty červených a zelených pixelů jsou shodné; to pro umělé zdroje světla bývá splněno). I takto hrubá oprava ale do značné míry napravuje někdejší zřejmou neshodu mezi barevně kódovanými výstupy z důkladně a málo proexponovaných snímků, jako byla zejména dvojice 5245 a 5246 v adresáři javor.

Od verze 1.22 programu raw2lum se hodnoty zjištěné pro jednotlivá políčka vypisují souhrnně i na závěr – jde o alternativní výpočet intenzity osvětlení ze scény (suma přes políčka, která platí pro prostorový úhel scény vč. nulových pixelů, jen bez pixelů přeexponovaných a mimo rozsah) a o průměrný jas políčka. Pro kameru Fuji S 5000 se u snímků, kde mediány hodnot pixelů bývají na úrovni desítek a relativní standardní deviace jasů políček není větší než desítky procent, dají takto vypočtené sumární údaje dobrou informaci o intenzitě osvětlení ze scény či o jejím průměrném jasu (to může platit pro snímky oblohy poblíž zenitu).

Jak je to u jiných kamer?

To plně prozradí v každém jednotlivém případě až analýza programem raw2lum – u těch, které jsou vhodné pro fotometrii, by už první percentil měl být nenulový (může být záporný, pokud se od hodnot odečítá nějaká konstanta, obvykle taková, aby medián byl nulový). Rozhodně to platí pro Canon D60, Nikon 990, Olympus E-300. Včera v noci jsem ale zjistil, že mnohem novější Nikon D50 se bohužel chová obdobně jako Fuji S 5000, tj. zhruba polovina pixelů temného snímku je nulová – výhodou je u něj jen to, že hodnoty té nezahozené poloviny pixelů jsou fakticky asi poloviční (přesněji, ony jsou osminové, ale to jen vinou toho, že tato nová kamera převádí signál na hodnoty jen do čtyř tisíc místo do šestnácti tisíc). Je to sice mrzuté zjištění pro onu D50 (pro fotometrii slabého světla je nepříliš vhodná), ale potěšující z hlediska spousty práce, kterou jsem věnoval řešení tohoto problému – určitě se využije se nejen u oné staré kamery S 5000.

Pokud ale máte možnost výběru, měřte slabé světlo (či scény velkého rozsahu jasů) jen s kamerami, které nezahazují informaci z nemalé části pixelů.

Jan Hollan, v Brně 20. června 2006