# Základní bitmapová grafika

## Bitmapová grafika

**Bitmapový (rastrový) obrázek**
- vytvářen většinou vstupních zařízení (fotoaparát, kamera, scanner, ...)
- vzniká také rasterizací vektorové grafiky
- obrázek je složen z matice MxN diskrétních pixelů
	- interně jednorozměrné pole
	- pro přístup k pixelu [i, j] nutno spočítat index


**Pixel** = picture element = obrazový element
- nese informaci o barevné hodnotě
- **přímé uložení**
	- většina používaných formátů
	- barevná hodnota uložena na fixní počet bitů (nejčastěji 24)
 - **nepřímé uložení**
	 - hodnota pixelu v poli je index do tabulky barev (palety)
	 - vhodné pro obrázky s malým počtem unikátních barev (GIF)
	 - nejčastěji 256 nebo 4096 unikátních barev + 8/12 bitový index
- mnoho bitmapových formátů či knihoven z důvodu urychlení požaduje, aby **1. pixel i-tého řádku začínal vždy na začátku bytu** - za posledním pixelem i-tého řádku tedy může být několik nevyužitých bitů

## Modelování reálného světa

**Cíl modelování**
- zachytit reálnýá svět vstupním zařízením
- vytvořit umělý model inspirovaný reálným světem
- zobrazit model (obrázek) na výstupním zařízení

**Fotorealistické modelování**
- snaha, aby lidské vnímání světa počítačové grafiky bylo totožné s vnímáním reálného světa

**Lidské oko**
- světelné zdroje emitují fotony
- pokud fotony viditelného světla dopadnout na sítnici oka, dochází k vizuálnímu vjemu
- sítnice (retina)
	- tyčinky
		- extrémní citlivost (už při 1 fotonu)
		- nejcitlivější na modrozelené světlo (cca 505 nm)
		- dlouhá setrvačnost
		- noční vidění
	- čípky
		- málá citlivost (až při stovkách fotonů)
		- denní vidění
		- krátká setrvačnost
		- tři typy: L, S, M (každý na jinou vlnovou délku)

**Jas**
- skalární veličina
- ovlivněn vlnovou délkou (modrá žárovka se jeví tmavší než bílá)
- oko vnímá hodnoty od tisícín po tisíce $Cd \cdot m^{-2}$
- současná zařízení (LCD, tiskárny) však produkují hodnoty jasu jen velmi omezené
- **kontrast**
	- = poměr mezi nejsvětejší a nejtmavší hodnotou, kterou zařízení zvládne
	- výrobci uváděné kontrasty jsou obvykle nerealistické
	- v praxi jsou kontrasty úplně jinde
	- **důsledek**: černou a bílou na různých zařízeních vnímáme různě
- jas není vnímán lineárně ($L = I^{0.4}$)
- jak vnímán v kontextu okolí

**Barva**
- fotony různé vlnové délky vnímány jako různě barevné
- výsledná barva složena mozkem podle podráždění jednotlivých typů čípků
- barva vnímána v závislosti na kontextu
+ relativní podráždění čípků: hodnoty L, M, S
+ vnímaný jas B = L + M + S
+ vnímaná barevnost C = (L/B, M/B, S/B)
- **důsledek**: lidské oko je podstatně citlivější na jas než na barvu

## Matematická reprezentace barvy

**CIE xy**
- standardizovaný matematický model barevného prostoru
- libovolný barevný odstín popsatelný dvojicí reálných čísel x, y
	- směs různých vlnových délek
- používá se pro definování alternativních reprezentací barvy

**Ideální obrazovka**
- 1 zobrazovací element může vysílat (emitovat) fotony o libovolné vlnové délce
- rychlost emitování fotonů lze velmi dobře řídit (libovolný jas)
- fyzikálně obtížně realizovatelné

**Současné reálné obrazovky**
- pixel zobrazován několika málo zobrazovacími elementy
- realističnost zobrazení závisí zejména na
	- volbě typů zobrazovacích elementů, tj. jaké vlnové délky mají fotony, které elementy emitují (**barevný rozsah**)
	- schopnosti zobrazovacích elementů emitovat různě velké množství fotonů za jednotku času (**jasový rozsah**)
- pro napodobení většiny reálných barev postačí červený (R), zelený (G) a modrý (G) zobrazovací element (RGB barevný prostor)
- počet fotonů, který má element emitovat za jednotku času, určen relativně na intervalu 0.0 - 1.0
- **problém**
	- volba základních barev R, G, B se liší podle výrobce
	- různá zařízení mají různý zobrazovací gamut
	- částečným řešením je zavedení standardizovaného teoretického barevného systému RGB
		- dochází ke transformaci teoretických hodnot na hodnoty displeje
		- ne vždy musí být barva na zařízení reprodukovatelná

**sRGB**
- = standardizovaný barevný systém
- základní barvy odpovídají "průměrným" základním barvám v zobrazovacích zařízeních
- příliš omezený pro moderní zařízení

**scRGB**
- barevný sytém od Microsoftu a HP
- definice shodná s sRGB
- hodnoty r, g, b omezeny na -0.5 až 7.5 místo 0.0 až 1.0
- bohatší barvy

**Tiskárny**
- zcela odlišný přístup (papír je bílý, potřeba modifikovat množství odraženého světla)
- barviva CMY
	- C (cyan, azurová) - pohltí R
	- M (magenta, purpurová) - pohltí G
	- Y (yellow, žlutá) - pohltí B
- barviva nejsou čistá, smíšení nedokonalé
- z těchto barviv nelze namíchat černou - vyřešeno přidáním K (černé)

**CMYK**
- barevný prostor o trojici/čtveřici čísel (c, m, y, k)
- čistota barev podle výrobce

Barva nemůže být reprezentována v počítači jedním univerzálním způsobem.
- barvy je možné mezi systémy převádět
- může dojít ke ztrátě v důsledku odlišnosti gamutů

### Barevné systémy

**RGB**
- barevný systém používaný zobrazovacími i vstupními zařzeními
- nativně užíván v bitmapových obrázcích
- hojně rozšířený (jako sRGB)
- **problém**: specifikace barvy není intuitivní

**CMY(K)**
- pro tiskové účely

**HSV**
- hue - odstín (0 - 360 stupňů)
- saturation - sytost (0 - 1)
- value - jas (0 - 1)
- jednodušší na zadání

Grafické knihovny obvykle umožňují zadáním RGB i HSV složek.

**YCbCr, YCoCg, CIE Lab**  
- jasová složka separována (Y, L)  
- barevnost ve zbývajících složkách  
- výhodné pro kompresní účely (využívá citlivosti oka na jas)

### Ukládání barvy

- potřeba uložit v podporovaném formátu (omezená přesnost)
- desetiné datové typy
	- přesnější
- celočíselné datové typy
	- často používané
	- omezenější přesnost, ale úspornější
	- fixní počet bitů

**8 bitů** (byte)
- rozsah 0 - 255
- u RGB je to 16.7 miliónu různých barev
- nejrozšířenější, pro většinu aplikací postačuje

**High-Color**
- RGB barva ve 2 bytech
- dvě možnosti
	- jeden bit volný (např. pro průhledný/neprůhledný)
	- 5 bitů pro R a B, 6 bitů pro G
- jen 32768 nebo 65536 barev

**scRGB**
- hodnota $x \in (-0.5, 7.5)$ uložena na 16 bitech jako $8192 \cdot x + 4096$
- 48 bitů na pixel (případně 64 při použítí 16 bitů pro průhlednost)

**12, 14 nebo 16 bitů**  
- 4096, 16384 nebo 65536 úrovní  
- obvykle ukládáno na 2 byty  
- nejvyšší bity se nepoužijí  
- používá se např. ve filmovém průmyslu

### Digitalizace barvy

- vstupní zařízení obsahují fotocitlivé senzory na základní barvy (nejčastěji RGB)

**Diskretizace jasového rozsahu**
- proces kvantizace
- jasový rozsah rozdělen na m úrovní
- skutečná hodnota zaokrouhlena na hodnotu nejbližší úrovně

**Uniformní diskretizace**
- nejjednodušší, nebere v úvahu lidské vnímání

**Neuniformní diskretizace**
- jasová hodnota podrobena gama korekci $L = I^{0.4}$
- ukládám L místo I (skutečná hodnota jde zjistit jako $I = L^{2.5}$)
- prováděno automaticky většinou zařízení
- menší chyba reprezentace obrazu

## Formáty bitmapové grafiky

- typicky obsahují hlavičku následovanou daty (pixely)
- hlavička
	- signatura formátu
	- rozlišení obrázku
	- počet barevných složek a počet bitů každé
	- způsob uložení dat (komprese, little/big endian)

**BMP**
- podporován většinou graf. knihoven
- základ (nejrozšířenější část)
	- bezeztrátový formát
	- RGB barevný systém
	- podpora palety o 1, 16 nebo 256 barev
	- podpora přímé reprezentace barev
		- 16 bpp (HighColor), 24 bpp (TrueColor) nebo 32 bpp (TrueColor)
- podpora průhlednosti v režimu 32 bpp (není standardní)
- data mohou být i obrázek v PNG nebo JPEG

**GIF**
- podporován většinou graf. knihoven
- bezeztrátový formát
- data komprimována LZW slovníkovou metodou (delší sekvence nahrazeny kratšími)
- RGB barevný systém s paletou 2, 4, 8, 16, 32, 64, 128 nebo 256 barev
- podpora průhlednosti (binární) a animací
- malá velikost, vhodné pro internet

**PNG**
- mnoho aplikací podporuje pouze částečně
- bezeztrátový formát
- data komprimovaná slovníkovou metodou
- RGB(A) barevný systém
	- paleta o 2, 4, 16 nebo 256 barvách
	- přímá reprezentace o 1, 2, 4, 8 nebo 16 bitů na barevnou složku
- podpora úplné průhlednosti
- vhodné pro rastrovanou vektorovou grafiku
- nevhodné pro zašumělá data (fotografie)

**JPEG**
- ztrátový formát (využití nedokonalosti lidského zraku)
- degradace kvality obrazu
- kompresní poměry 5:1 až 20:1
	- velká komprese = viditelné artefakty
- barevný systém YCbCr
	- přímá reprezentace barvy, TrueColor
- komprese založená na diskrétní kosinové transformaci následované kvantizací a RLE + slovníkovou kompresní metodou
- nepodporuje průhlednost
- vhodné pro fotografie určené k archivaci
	- JPEG (s EXIF) obvyklým výstupem z digitálních fotoaparátorů
- nevhodné pro uložení obrazu, který
	- bude postupně upravován
	- bude rozpoznáván počítačem