Hlavní navigace

Grafika v UNIXu - než začneme skenovat

31. 8. 2001
Doba čtení: 7 minut

Sdílet

Možná jste již slyšeli něco o barevných profilech nebo alespoň o gama křivce. Uživatelům komerčních systémů na klíč bývají tato tajemství skryta pod rouškou magického „co vidíš, to dostaneš“, často s dovětkem „Hlavně se nikdy nepokoušej něco změnit v ‚Nastavení monitoru‘ a ‚Nastavení tiskových barev‘!“ Ale nám, kteří chceme dostat dobrý výsledek i bez těchto magických nastavení, nezbývá, než pochopit základní souvislosti.
Kruhy

Již dlouho je známo, že lidské oko vnímá trojbarevně. První modely, které měly vytvářet libovolnou barvu kombinaci tří základních barev, byly tedy jasné – systém RGB (červená–zelená–modrá) pro aditivní míchání (tam, kde se jednotlivé příspěvky sčítají – např. obrazovky nebo barevná světla) a systém CMY (azurová–purpurová–žlutá) pro systémy subtraktivní (tam, kde se jednotlivé příspěvky potlačují – např. míchání barev). Ve školních učebnicích se setkáváme i dnes s pěknými diagramy s barevnými kroužky. Jenže tak jednoduché to zase není. Fyzikální podstata světla ani lidské vnímání takovou symetrii nevykazují, a pokud se pokusíte na základě těchto poznatků převést z obrazovky cokoli na papír, díru do světa s tím věru neuděláte (zvlášť modrou pak nepoznáte).

Z těchto představ vznikly jednoduché barevné prostory RGB, CMY, HSV a další. Měly však mnoho nevýhod. Nevystihovaly citlivost lidského oka a byly závislé na použitých základních barvách (a barvivech). A tak vznikla věda o vnímání barev – kolorimetrie.

Gama křivka – základ úspěchu

Bezesporu nejdůležitější hodnotou, která musí zajímat dokonce i ty, kteří pracují černobíle, je gama. Pod tímto číslem se skrývá mocnina, podle níž je světelná intenzita závislá na vstupní veličině.

Podle fyzikálních zákonů o vlivu elektromagnetického pole na elektrony, putující z elektronového děla na stínítko obrazovky, je jas funkcí přibližně 2,5. mocniny přivedeného napětí. Napětí je pak (většinou) lineárně závislé na hodnotě, která je zapsaná ve videopaměti (není však přímo úměrné, neboť napětí při hodnotě nula nemusí být nulové). Nekorigované PC má tedy hodnotu gama 2,5. Některé platformy se však snaží korigovat toto zkreslení přímo v hardwaru nebo na nízkých úrovních operačního systému (např. NeXT na koriguje 1/2,5. mocninou na 1,0, Mac 1/1,45. mocninou na 1,8, SGI 1/1,7. mocninou na 1,47). Tato opravná funkce se nazývá gama korekce.

Nelineární je však i tiskový proces. Většina tiskových procesů pracuje s drobnými černými či barevnými tiskovými body v plné barvě. Tyto body může na jedné straně zmenšovat potlačení tiskového bodu (podleptání tiskové desky, potlačení osamělého náboje u laserového tisku či tepelná setrvačnost u tepelného tisku), na druhé straně je zvětšuje nárůst tiskového bodu (nahromadění barvy v místě tiskového bodu). Ukazuje se, že u světlých barev (do 3–5 %) převažuje potlačení, ve zbytku škály pak výrazně převažuje nárůst. Všechny tyto procesy je možné matematicky modelovat a korigovat. Lze však vzít zavděk i přibližným odhadem. V tomto případě si vystačíme s poznatkem, že souhrn těchto vlivů odpovídá přibližně 1,8. mocnině světlosti předlohy.

Naproti tomu skenery (a snímače digitálních fotoaparátů a kamer) jsou přibližně lineární – jejich hodnota gama odpovídá přibližně 1. Podobně jsou na tom i filmové osvitové jednotky.

A nakonec je nelineární i vnímání lidského oka. Zdroj světla, který vnímá člověk subjektivně jako poloviční, má ve skutečnosti zářivost jen 18 %. Lidské vnímání světelné intenzity je zhruba logaritmické. Přesné rozlišování barev pálilo v době před nástupem počítačů zejména výrobce barev pro tiskárny a textilky, a tak se v roce 1931 sešli odbornící na barvy v organizaci CIE (Commission Internationale de l'Eclairage) a vytvořili hypotetického standardního pozorovatele a jemu odpovídající barevný prostor, nezávislý na použité technologii. Tento prostor, dnes nazývaný CIE-XYZ, umožňuje popsat jakoukoliv barvu (dokonce i takovou, kterou nelze namíchat ze třech základních), či přesněji vjem z této barvy, pouze dvěma hodnotami (velmi zjednodušeně je lze nazvat „poměrná červenost“ a „poměrná modrost“). Třetí hodnotou je pak „světlost“ barvy.

Diagram
větší obrázek

Ukázka barevného diagramu CIE-XYZ tak, jak jej zobrazí ppmcie z balíku NetPBM. Trojúhelník uprostřed vymezuje barvy popsatelné systémy RGB (kladnými hodnotami), na oblouku na obvodu jsou barvy spektra, uprostřed pak bílé body pro různé barevné teploty.

Po nástupu počítačů vznikla potřeba přizpůsobit prostor CIE-XYZ tak, aby bylo možné co nejomezenějším počtem bitů, které budou každé složce přiděleny, pokrýt co nejlépe možnosti barevného rozlišení oka (odborně se to nazývá perceptuální uniformita). A tak vznikly barevné prostory CIE Luv* a CIE Lab*, oba značně výpočetně náročné. To sice nevadí při přípravě pro tisk, ale při zobrazování v reálném čase ano. S dalšími podobnými prostory přišli tvůrci norem pro barevné televizní vysílání. A tak vznikly jednoduché barevné prostory, které používají pouze mocninnou gama korekci. Pro nás je nejdůležitější sRGBgama korekcí 2,2.

Při testech se ukázalo, že obraz na obrazovce nevypadá nejpodobněji originálu tehdy, je-li hodnota gama zcela vykorigovaná, jak by se dalo čekat, ale tehdy, odpovídá-li tato hodnota 1/1,1.–1/1,2. mocnině gama. V anglosaské literatuře se tento efekt nazývá rendering intent a má zřejmě souvislost s osvětlením okolí.

Stručné shrnutí: Fyzikální jevy při zobrazování způsobují, že se barevné hodnoty v obrázcích nezobrazuje lineárně, ale podle jisté, přibližně mocninné gama křivky. Abychom tuto nelinearitu vykompenzovali, musíme provést korekci gama, což je tedy záměrné zkreslení barevných hodnot tak, aby co nejlépe kompenzovaly zkreslení monitoru a nelinearitu lidského oka.

K čemu je to v praxi?

Když sečteme všechny výše uvedené vlivy dohromady, zjistíme, že je vhodné ukládat obrázky s hodnotou gama zhruba 2,2. Od této hodnoty se také odvíjí mnoho zobrazovacích norem, např. sRGB pro Web, dále Photo CD, i standardy analogové a digitální televize.

Takové obrázky mají mnoho výhod – vypadají přirozeně na většině obrazovek bez jakékoliv korekce (zpětnou korekci zajistí sama obrazovka), celkem slušně si vystačí s osmibitovou škálou a potřebná korekce pro tisk je také minimální.

Mají však i nevýhody, na které musíme pamatovat. Některé filtry z kreslících programů dávají na obrázcích s vykompenzovanou gamou odlišné výsledky, které pak neodpovídají fyzikální podstatě jevu, který simulují (rozostření, zaostření, rozklad na body apod.). V takových případech je vhodné pracovat s lineárním barevným prostorem, pokud možno šestnáctibitovým, a gamu zkorigovat teprve ve výsledku.

Máme tedy dvě možnosti:

  • Co nejdříve (nejlépe ještě ve skeneru nebo digitálním fotoaparátu) gama křivku vykorigovat úpravou naměřených hodnot 1/2,2. mocninou („zesvětlit je“) a následně již obrázek ukládat jako zkorigovaná osmibitová data. Tato metoda je ideální tehdy, nepotřebujeme-li s obrázkem provádět žádné na gama křivce silně závislé úpravy. Data budou již bez jakékoliv úpravy zobrazitelná na obrazovce. Pro tisk je můžeme dokorigovat („ztmavit“) 1,22. mocninou. Bez této korekce vyjdou o málo světlejší než originál (ale stále ještě přijatelné). Pokud chceme obrázek připravit jen pro tisk, provedeme korekci pouze na 1/1,8. mocninu a pro náhled na obrazovce jej „přisvětlíme“ 1/1,22. mocninou. Gama korekci umí provést například program XSaneSANE, dokonce i ve skeneru (pokud to umí skener), umí to GIMP v tabulce Úrovně (horní prostřední číslo), umí to i pnmgammaNetPBM.
  • Druhou možností práce, které dáme přednost, chceme-li data dále zpracovávat pomocí různých filtrů, je práce v lineárním barevném prostoru. V tomto případě musí náš software umět provádět gama korekci při náhledu na obrazovku. Uměl to například GIMP-1.1, ale modul display_gamma z něj byl před vydáním verze 1.2 odstraněn. Umí to i náhled v XSane. Korekci gama v tomto případě provedeme až na konci, těsně před tiskem nebo digitálním výstupem. Nechceme-li v tomto případě přijít o rozlišení v tmavých odstínech, musíme počítat zhruba s 14bitovými daty.

Ukázky

Tabulka č. 187

fotografie bez kompenzace gama
Lineárně naskenovaný obrázek před korekcí gama. Obrázek se zobrazí příliš tmavý, stíny se ztrácejí.

fotografie s kompenzací gama
Tentýž obrázek po provedení korekce gama vypadá na obrazovce podobně jako původní fotografie.

Na prvním z následujících obrázků jsou v horní polovině pruhy vykresleny plnou barvou s 0 %, 25 %, 50 %, 75 % a 100 %, ve spodní polovině jsou pak složeny z bílých a černých teček v příslušném poměru. Na druhém jsou odstíny horních pruhů upraveny tak, aby odpovídaly hodnotě gama 2.2. Zatímco na prvním obrázku mají horní a dolní pruhy viditelně odlišné odstíny, na dolním obrázku je tento rozdíl do značné míry vykompenzován korekcí gama (záleží na nastavení černé na monitoru).

stupníce bez kompenzace gama

stupníce s kompenzací gama

tmavé a větlé terčíky Okolní osvětlení znemožňuje, aby jas monitoru začínal na nule (tedy aby funkce inzenzity byla čistě mocninná). Je třeba hledat kompromisní nastavení – takové, kdy jsou nejnižší nenulové hodnoty na hranici viditelnosti. Na následujícím obrázku jsou tmavé a světlé terčíky. Pokud nevidíme ani jeden tmavý terčík, znamená to, že je třeba zvýšit jas monitoru. Pokud je vidíme všechny jasně, je třeba jas snížit. Pokud naopak nevidíme světlé terčíky, je monitor přesvícený a není již schopen rozlišovat světlé odstíny.

Stupnice Dolní polovina tohoto obrázku byla nejdříve uložena v osmibitovém lineárním modelu a teprve poté byla gama vykompenzována. Při detailním pohledu vidíme, že přechod je v oblasti nejtmavších barev skokový.

Další čtení

Cloud23

Nezmínili jsme se zde o mnoha detailech, jako např. o doporučeném odchýlení od mocninné křivky v gama korekci nejtmavších odstínů. K barevným profilům jsme se též nedostali – vrátíme se k nim v některém z pozdějších pokračování.

K dalšímu čtení doporučuji každému vážnějšímu zájemci skvěle zpracované stránky Charlese Poyntona o barvách a gama křivce. Na stránkách projektu SCARSE jsou též výborně zpracované informace od Andreie Frolova a kalibrační obrázky.