12 Metody snižování barevného prostoru Studijní cíl Tento blok je věnován základním metodám pro snižování barevného rozsahu pro rastrové obrázky. Postupně zde jsou vysvětleny důvody k použití těchto algoritmů k modifikaci rastrových předloh. Následně je objasněn princip vybraných algoritmů, které se v této oblasti používají. Algoritmy jsou probrány jak po teoretické tak některé i po praktické implementační stránce. Doba nutná k nastudování 3-4 hodiny Průvodce studiem Při studiu tohoto bloku se předpokládá, že student je seznámen se základy reprezentace rastrového obrazu, zná základní možnosti pro popis barev (barevný model), umí přistupovat k jednotlivým pixelům rastrového obrázku a je schopen pracovat s barvami jednotlivých pixelů stejně tak i s barevnými kanály. 12.1 Barevný prostor a důvody k jeho snižování Jak bylo uvedeno v předchozích blocích, jednotlivé barvy použité v konkrétním rastrovém obrázku jsou součástí určitého barevného prostoru. Samotný barevný prostor je popsán vybraným barevným modelem. Ten umožňuje definovat pomocí jednotlivých proměnných daného modelu (tzv. kanály) všechny barvy daného barevného prostoru. Barevné prostory jsou různě velké, to znamená, že mohou obsahovat různý počet dostupných barev. Na velikosti barevného prostoru podstatně závisí i samotná velikost (z hlediska paměťové náročnosti) celého rastrového obrázku. To je dáno tím, že na velikosti barevného modelu závisí množství paměti, které je nutno alokovat pro každý obrazový bod (pixel) daného rastrového obrázku. Velikost barevného prostoru se označuje pojmem barevná hloubka. KST/IPOGR 1-1 Petr Veselý
Pokud barevný prostor obsahuje pouze dvě barvy, potom každý pixel, mapovaný na některou z barev tohoto barevného prostoru, může zabírat v paměti prostor o velikosti pouze 1 bit. Pokud barevný prostor obsahuje maximálně 256 libovolných barev, potom každý pixel zabere při využití palety paměťový prostor o velikosti 1 Byte. A v případě, že barevný prostor obsahuje cca 16 milionů barev, potom bývá označen jako TrueColor a každý pixel mapující barvy tohoto barevného prostoru zabere v paměti místo o velikosti 3 Byte. Dále je nutno si uvědomit, že rastrový obrázek v režimu TrueColor, obsahující například barevnou fotografii, má možnost mít každý pixel nastaven na libovolnou barvu z příslušného barevného TrueColor prostoru, ovšem ve skutečnosti obsahuje podstatně méně různých barev, než je oněch 16 milionů. A základní otázka zní: Není to plýtvání místem? Odpověď je zřejmá: Ve většině případů ANO. Dalším důvodem pro snížení barevného prostoru obrázku může být cílená (uživatelem řízená) příprava před publikováním daného obrázku na zařízení, které není schopno zobrazit daný obrázek v plném barevném rozsahu. 12.2 Snižování barevného prostoru Existuje mnoho metod, které jsou schopny snížit barevnou hloubku, to znamená omezit množství možných použitých barev u daného rastrového obrázku. Některé z těchto metod jsou schopné ušetřit paměťovou náročnost rastrového obrázku při zachování stávající kvality obrazu (případě při téměř neznatelném snížení kvality). Mezi základní metody patří např. převod plnobarevného obrázku na odstíny šedé, vytváření a použití palet, prahování, půltónování, rozptylování a další. Následující obrázky demonstrují použití různých metod snížení hloubky barevného prostoru na pouhé 2 nebo 4 barvy. KST/IPOGR 1-2 Petr Veselý
Obrázek 1: Originální obrázek v 256 odstínech šedé Obrázek 2: Originální obrázek v 256 odstínech šedé Obrázek 3: Výsledek po použití různých metod snížení barevného rozsahu 12.2.1 Prahování Tato implementačně nejjednodušší metoda vytváří obraz ve kterém jsou viditelné ostré přechody mezi jednotlivými použitými barvami. Při použití pouze dvou barev (typicky černá a bílá), se používá nejčastěji jako příprava na další zpracování obrazu (segmentace, vyhledávání objektů). Z pohledu zachování reálného obrazu dává nejhorší výsledky (pokud to není výtvarný záměr). Při použití této metody nedochází ke zvýšení počtu obrazových bodů. Postup: Pro celý obrázek se zvolí jedna prahová hodnota v rozsahu 0, imax, kde imax je maximální intenzita barevného rozsahu převáděného obrázku. Nejčastěji se práh volí v polovině intervalu. pro každý pixel se provede: pokud je intenzita daného pixelu ivst_pix > práh, KST/IPOGR 1-3 Petr Veselý
potom ivýst_pix = 1 (resp. 255) jinak ivýst_pix = 0 Metodu lze upravit na vyšší počet výstupních barev (odstínů). 12.2.2 Půltónování Při této metodě je základním principem náhrada vícebarevného pixelu několika pixely s omezenou barevností. Tímto se zvyšuje počet obrazových bodů obrázku. Lze patřičně nastavit (zvýšit) hodnotu rozlišení, která může být s rastrovým obrázkem spojená, jinak dojde ke zvětšení tiskové velikosti obrázku. Na základě odstínu (barvy) původního pixelu nahradíme tento pixel na výstupu skupinou menších bodů s použitím pouze (například) dvou barev. Tato skupina bodů je definována na základě tzv. půltónovací matice. Příklad: matice na převedení 16 a 4 odstínů na 2 barvy 1 5 9 2 8 12 13 6 0 3 M p M p 4 15 14 10 2 1 0 11 7 3 Obrázek 4: Půltónovací matice 12.2.3 Náhodné rozptylování U této metody nedochází ke zvýšení počtu obrazových bodů. Princip a samotná implementace metody je velmi jednoduchá. Pro každý pixel se porovnává jeho jas (barva) s prahovou hodnotu. Ovšem na rozdíl od metody prahování je práh pro stanoven náhodně pro každý pixel zvlášť. Postup pro každý pixel upravovaného rastru se provede: vygenerování náhodného čísla irand v rozsahu 0, imax), kde imax je maximální intenzita barevného rozsahu převáděného obrázku pokud je intenzita daného pixelu ivst_pix > irand, KST/IPOGR 1-4 Petr Veselý
jinak ivýst_pix = 0 potom ivýst_pix = 1 (resp. 255) Stejně jako většina metod je možno ji volbou více prahů upravit na vyšší počet výstupních barev (odstínů). 12.2.4 Rozptylování s distribucí chyby Při většině metod snižování barevného rozsahu, dochází k úpravám barvy (jasu) jednotlivých pixelů. Typickým příkladem je prahování (případně rozptylování) při změně z rozsahu 256 odstínu na 2 odstíny čarnou a bílou. Při tomto drastickém snížení barevného rozsahu je každý pixel, dle svého jasu převeden na pixel s jasem 0 (černá) nebo 255 (bílá). Ovšem barevným (jasovým) posunem libovolného pixelu dochází k posunu celého obrázku, především ale blízkého okolí upravovaného pixelu. Metoda s rozptylováním chyby se snaží tyto chyby (které v ostatních metodách jsou zanedbávány) korigovat a jas o který byl daný pixel upraven (zvýšen nebo snížen) rozprostřít do ostatních okolních pixelů. Výpočet chyby: chyba = ipuvodni iupraveny ipuvodni je původní jas (barva) zpracovávaného pixelu iupraveny je nově vypočtený jas (barva) zpracovávaného pixelu Chyba se přenáší na sousední dosud nezpracované pixely, dle daného schématu a naznačených směrů. Existuje několik variant (schémat) pro rozpočítání chyby na okolí. Při zpracování se využívá pro uložení jednotlivých chyb, týkajících se nezpracovaných pixelů, dočasná paměť, která bývá implementována jako matice o velikosti odpovídající zpracovávaného obrázku nebo pouze několik řádků (dle metody), které se postupně zaměňují. Distribuční schéma Floyd-Steinberg KST/IPOGR 1-5 Petr Veselý
Následující obrázek ukazuje na několika pixelech princip distribuční metody. Jas pixelu je vyjadřován číselnou hodnotou z intervalu <0, 255>. Další Distribuční schémata Existuje celá řada odlišných distribučních schémat, která se snaží chybu rozdělit ještě lépe (rovnoměrněji) na dosud nezpracovanou oblast. Reálný rozdíl je u běžných rastrových předloh malý. Základní princip zůstává vždy stejný. Stucki - - x 8/42 4/42 2/42 4/42 8/42 4/42 2/42 1/42 2/42 4/42 2/42 1/42 Burkes - - x 8/32 4/32 2/32 4/32 8/32 4/32 2/32 KST/IPOGR 1-6 Petr Veselý
Stevenson - - - x 0 32/200 0 12/200 0 26/200 0 30/200 0 16/200 0 12/200 0 26/200 0 12/200 0 5/200 0 12/200 0 12/200 0 5/200 Pojmy k zapamatování Rastrový obraz, barevná hloubka, barevná paleta, prahování, rozptylování, distribuce chyby, distribuční schéma, paměťová náročnost rastru, pixel Otázky na procvičení 1. Jak je definován rastrový obraz? 2. Co je to pixel a jakou nese informaci? 3. Co je to barevná hloubka rastrového obrázku? 4. Proč je někdy vhodné snižovat barevnou hloubku rastrového obrazu? 5. Jaké jsou k tomu určeny metody? 6. Jaký je rozdíl mezi půltónováním a rozptylováním? 7. Jak funguje metoda distribuce chyby. 8. Jaká chyba vzniká? 9. Jak se aplikuje distribuční schéma? 10. Co je to prahování? Jak se stanovuje práh? Odkazy a další studijní prameny Žára, J., Beneš, B., Felkel, P. Moderní počítačová grafika. Computer Press, Brno, 1998. ISBN 80-7226-049-9. Foley, Van D. Computer Graphics. Principles and Practice. Addison-Wesley,1991. KST/IPOGR 1-7 Petr Veselý