Ako prekonvertovať farebný obrázok na čiernobiely

Andrej Probst, 17. september 2015, Grafika, čítalo 5520 ľudí

V grafických editoroch často nájdeme funkciu, ktorá prevedie plne farebný obrázok alebo fotku na čiernobielu. Zamysleli ste sa niekedy nad tým, ako sa to robí? Ukážeme si tri metódy (určite ich existuje viac) prevádzania farebnej palety na čiernobielu. Možno budete prekvapený, že vaše intuitívne riešenie nebude pre ľudské oko optimálne.

Reprezentácia farieb pomocou RGB

Jednotlivé farby budeme reprezentovať vo formáte RGB (formátov existuje viac: CMYK, HSV, HSL… Vyberáme ten najviac používaný.), to znamená, že každú farbu dokážeme rozložiť do troch zložiek a to do intenzity troch farieb: červenej (Red), zelenej (Green) a modrej (Blue). Tieto tri farby nám stačia na to, aby sme namiešali akúkoľvek farbu. Každá zložka nech nadobúda hodnoty od 0 do 255, kde 0 znamená najmenšiu intenzitu a 255 najväčšiu intenzitu. Tu je ukážka niekoľkých farieb, ako sa dajú zostrojiť v RGB reprezentácii:

  • Čierna – R = 0, G = 0, B = 0. Všetky tri zložky majú najmenšiu intenzitu.
  • Biela - R = 255, G = 255, B = 255. Ak je intenzita najvyššia, dostaneme bielu farbu.
  • Červená – R = 255, G = 0, B = 0.
  • Zelená – R = 0, G = 255, B = 0.
  • Modrá – R = 0, G = 0, B = 255.

Týmto systémom dokážeme popísať 256 * 256 * 256 = 16 777 216 rôznych farieb.

Čiernobiela paleta

Farby máme definované, pozrime sa na to, aké hodnoty v RGM formáte, má čiernobiela paleta. Neprekvapí nás, že odtiene šedej majú hodnoty všetkých troch zložiek rovnaké. Čiže R = G = B. V nami použitej reprezentácii dokážeme popísať 256 farieb z čiernobielej palety. To je výrazne menej, ako všetkých možných farieb.

Ako previesť farebnú paletu s vyše 16 miliónmi farieb na 256 odtieňov šedej? Predtým, než sa pustíte ďalej do čítania, urobte si malú prestávku a skúste sami navrhnúť prevodovú tabuľku. Tu je zatiaľ fotka, ktorú budeme prevádzať na čiernobielu formu.

Flowers

Intuitívne riešenie: priemer intenzít

Zrejme ako prvé vás napadlo urobiť priemer intenzít jednotlivých zložiek. Každú farbu s intenzitami R, G a B prevediem nasledovne: Rn, Gn aj Bn budú mať rovnakú hodnotu a to (R + G + B) / 3.

Flowers - priemer intenzít

Priemer zložky s najmenšou intenzitou a najvyššou intenzitou

Druhé riešenie zoberie len dve zložky a tie spriemeruje. Vyberie zložku s najnižšou intenzitou a s navjyššou intenzitou: Rn, Gn aj Bn budú mať rovnakú hodnotu a to (MAX(R + G + B) + MIN(R +G + B)) / 2.

Flowers - Priemer zložky s najmenšou intenzitou a najvyššou intenzitou

Vážený priemer intenzít s najväčšou váhou zelenej zložky

Ľudské oko nevníma všetky tri základné zložky rovnako. Najviac citlivé je na zelenú farbu a najmenej na modrú. Preto pri prevode farieb použijeme priemerovanie, ale jednotlivým farebným zložkám pridelíme iné váhy: Rn, Gn aj Bn budú mať rovnakú hodnotu a to R * 0,21 + G * 0,72 + B * 0,07. Výsledný obrázok je najlepší z tých predchádzajúcich.

Vážený priemer intenzít s najväčšou váhou zelenej zložky

Táto metóda sa najčastejšie využíva v grafických programoch. Neznamená to však, že je vždy najvýhodnejšia. Nájdu sa obrázky, pre ktoré je vhodnejšie využiť inú metódu.

Na záver

Pre jednoduchšie porovnanie, tu sú všetky tri čiernobiele obrázky vedľa seba po poradí, ako sme transformácie predstavovali. Ktorý obrázok sa vám najviac páči?

Flowers - priemer intenzít
 Flowers - Priemer zložky s najmenšou intenzitou a najvyššou intenzitou
Vážený priemer intenzít s najväčšou váhou zelenej zložky

Čo Ty na to?





Čo na to ostatní?

Honza, 18. september 2015 14:17:01

Andreji, tohle je ptákovina, takhle se to fakt nedělá. Respektive, když se to tak udělá, tak ta ČB fotka bude přinejlepším "nic moc". Na druhou stranu je to v době různých instantních "mrvítek" možná jedno ...

Andrej Probst, 18. september 2015 14:17:35

Takto to robí Gimp. Určite sa nájdu aj iné algoritmy. Toto je len pár príkladov, ako na to.