Color management v kostce

Color management neboli správa barev zdá se být noční můrou velké části digitálně fotografující obce. Přitom k jejímu používání není potřeba rozumět všem těm složitým matematickým procesům, co se odehrávají uvnitř. Základní principy jsou poměrně jednoduché.

Co je to barva?

Barva je určitá spektrální charakteristika lidským okem vnímatelného elektromagnetického záření. Což je sice pěkná definice, ale abychom mohli s barvami nějak rozumně pracovat (v počítači), potřebujeme je nějak identifikovat – označit přesnými čísly. Existují různé metody popisu barev, z nichž nejčastější je způsob vyjádření ve formě tří složek – R, G a B. Celý color management se prakticky točí kolem těchto tří hodnot a jejich významu.

Co je to barvový prostor, aneb není RGB jako RGB

Každý ví, že digitální obrázek je pole bodů (pixelů) a každý bod má přiřazenou nějakou barvu pomocí třech hodnot – RGB (červená, zelená modrá). Nicméně tyhle hodnoty nám o skutečné barvě neříkají téměř nic. Sice tušíme, že barva RGB(255, 0, 0) je červená. Ale jaká červená? Každá červená je jiná, každý monitor má jinou technologii zobrazování, takže ta čísla nemůžeme jen tak poslat na grafický výstup počítače a děj se vůle boží. Potřebujeme nějak vyjádřit, že to je přesně taková červená, jakou jsme předtím vyfotili, viděli, nakreslili, naskenovali apod. A chceme, abychom ji měli vždy na každém monitoru či tiskárně zobrazenou (pokud možno) zase jako tu stejnou červenou.

Pokusím se teď o přirovnání. Představte si krychli (něco jako Rubikovu kostku) složenou z mnoha malých krychliček (řekněme, že jich bude 256 × 256 × 256). Hodnoty R,G a B pak určují pozici přesně jedné z těcho krychliček uvnitř velké krychle. A tato krychlička má nějakou barvu. A teď si představte, že máte takových velkých krychlí několik. Jenže každá je jinak barevná. Pokud v každé z těchto krychlí najdete naši malou krychličku na stejných souřadnicích, bude mít každá z nich jinou barvu. Hodnoty RGB nám tedy neurčují přímo barvu, ale pouze pozici, na které se požadovaná barva nachází. Ony velké krychle jsou vlastně barvové prostory, které určují, jakou barvu na daných souřadnicích najdeme.

Ve skutečnosti počítač samozřejmě nehledá kostičky, ale převádí hodnoty RGB na hodnoty XYZ v prostoru CIE 1931 XYZ (popř. pozdější CIE LAB), který obvykle slouží jako referenční barvový prostor. Již v roce 1931 byl totiž mezinárodní vědeckou komisí definován obecný matematický model pro popis barev, známý právě jako CIE 1931 XYZ color space. Tento model popisuje všechny barvy, které je schopen vnímat průměrný člověk. Každý barvový prostor, který běžně pro práci používáme, obsahuje pouze nějakou část celého referenčního prostoru, a tedy i nějakou podmnožinu ze všech možných barev. Tomu, jak velkou část barev náš barvový prostor obsahuje, se říká gamut (rozsah či objem). Převody mezi jednotlivými barvovými prostory probíhají tak, že se hodnoty RGB převedou do referenčního prostoru, a z něho pak dále do cílového prostoru. (Pozn. softwarová implementace může být samozřejmě poněkud odlišná, ale pro představu to takto můžeme chápat).

Všimněte si, že gamut není počet barev – i všechny naše krychle jsme rozdělili na stejný počet kostiček (256 × 256 × 256). Počet barev je tedy určen pouze jemností rozdělení barvového prostoru na diskrétní hodnoty (což je dáno použitou bitovou hloubkou – obvykle 8 nebo 16 bitů na kanál).

Co je to barvový profil?

Barvový profil je v podstatě jen soubor, který popisuje nějaký barvový prostor. Popis může být čistě parametrický (gamma koeficient + primární složky a bílý bod), nebo na to můžeme jít hrubou silou (kalibrační sonda naměří spoustu hodnot pro jednotlivé „barvy“ a uloží je do tabulky). Proto jsou také některé profily o velikosti několika málo kB, zatímco jiné dosahují třeba stovek kB.

Pro zajímavost – barvový profil si můžeme vytvořit prakticky libovolný. Můžu tak třeba definovat barvový prostor, který zpřehází všechny tři osy – na osu R vynesu zelenou složku, na G modrou a na B červenou. Nebo můžu vytvořit prostor, kde bude jeho polovina černá a polovina bílá. Pokud takový profil přiřadím souboru, který byl původně v některém konvenčním prostoru, barvy se naprosto rozhodí.

K čemu to všechno je?

Existují různé barvové prostory. Některé popisují rozsah barev vstupního zařízení (skeneru, fotoaparátu), jiné rozsah výstupního zařízení (tiskárny, fotolabu, monitoru). To jsou tzv. závislé (na zařízení) barvové prostory. Pak existují ještě tzv. na zařízení nezávislé barvové prostory, které neodpovídají žádnému konkrétnímu zařízení, ale slouží pro obecnou práci s obrázky. Nejznámější nezávislé prostory jsou sRGB a AdobeRGB. Pro práci s obrázky, jejich úpravy i archivaci se doporučuje používat právě nezávislé barvové prostory. Proč? Protože jsou jednou pro vždy pevně definované, rozložení barev uvnitř těchto prostorů je rovnoměrné, mají vyváženou neutrální šedou (stejné hodnoty RGB dají vždy nějakou neutrální šedou), a jejich gamut je zvolen tak, aby vyhovoval co možná nejuniverzálnějšímu použití pro daný účel. Právě gamut je to, čím se barvové prostory liší nejvíce, ale to už není předmětem tohoto článku.

Co se dá provádět s barvovými profily?

Hodnoty barev každého obrázku náleží do nějakého barvového prostoru. A to i v případě, že tento prostor není explicitně určen – pak je nám barvový prostor utajen a můžeme ho jen odhadovat. V zásadě můžeme s každým obrázkem provádět následující operace:

  • Přiřazení barvového profilu. Tímto k souboru obrázku připojíme informaci o barvovém prostoru, do něhož patří všechny hodnoty RGB v obrázku obsažené. V Adobe Photoshopu se to provádí příkazem Assign Profile (Přiřadit profil). Touto operací se nezmění žádná obrazová data (RGB hodnoty obrázku). Pouze tím říkáte: „tento obrázek je v barvovém prostoru AdobeRGB (např.)“. Ovšem na monitoru se barvy změní! To proto, že ačkoliv RGB hodnoty obrázku zůstávají stejné, Photoshop nyní ví, jak je má chápat – přiřadí jim jiné reálné barvy (z referenčního prostoru CIE XYZ, resp. CIE LAB) – vzpomeňte – vyměníme barevnou krychli. Samozřejmě v reálu bychom prakticky nikdy neměli tuto volbu potřebovat, protože bychom vždy měli mít profil správně přiřazený.

  • Konverze do jiného barvového prostoru (Convert to Profile). Slouží k převodu obrázku do jiného barvového prostoru, při zachování barevnosti (pokud je to možné). V tomto případě se hodnoty RGB pixelů změní – přepočítají se na jiné tak, aby odpovídaly pokud možno stejným reálným barvám, ale v jiném prostoru. Vizuálně tedy barvy zůstanou pokud možno zachované. Pokud však některé barvy v obrázku nespadají do průniku gamutů obou prostorů, pak dochází i k určitému posunu těchto barev. A samozřejmě dochází také k zaokrouhlovacím chybám, které jsou však většinou nepozorovatelné.

Kdy a za jakých okolností tyto operace provádíme? Jak už jsem napsal výše, přiřazení barvového profilu pouze v případě nouze. Nejčastěji tehdy, když se nám do rukou dostane obrázek, který nemá žádný profil přiřazen. Pak musíme odhadnout, nebo jinak zjistit, v kterém prostoru asi tak může být. Nejčastěji to bude nejspíš prostor sRGB.

Na druhou stranu konverzi do jiného barvového profilu provádíme obvykle pouze v případě, kdy chceme obrázek poslat na nějaké konkrétní výstupní zařízení. Vždy si však ponecháme soubor s obrázkem v původním, pracovním barvovém profilu a zkonvertovaný obrázek uložíme pod jiným názvem jako kopii! Typickým případem je uložení pro web. Webové prohlížeče obecně neznají správu barev (s výjimkou nejnovějších verzí Safari a Firefoxu), ale standardem pro internet je prostor sRGB. Proto je nejlepší konvertovat obrázek do profilu sRGB, ale při uložení tento profil vypustit. Druhým typickým případem je příprava pro tisk, pokud máme k dispozici profil výstupního zařízení. Slušné fotolaby by si však měly bez problémů poradit i se souborem s připojeným nezávislým barvovým profilem.

Tak, to by pro dnešek stačilo. Snažil jsem se popsat principy barvových prostorů co možná nejstručněji a nejsrozumitelněji pro laiky bez jakýchkoliv grafů a vzorečků, tak snad se mi to aspoň trochu podařilo. Pokud jsem něco napsal blbě nebo nepřesně, klidně mě upozorněte v komentářích.