Cvičení 2 - Diskrétní obraz

A) Teoretický úvod

Šedotónový obraz je jako dvojrozměrná diskrétní veličina v počítači reprezentován maticí řádu 2. Řádky a sloupce matice určují samotnou obrazovou rovinu, prvky matice pak jasové hodnoty v příslušném obrazovém bodě (pixel). Pokud jde o šedotónový obraz (někdy nesprávně označován jako černobílý), jsou jednotlivé prvky matice tvořeny skalárem udávající hodnotu intenzity jasové funkce. Takový šedotónový obraz je zpravidla uložen v paměti počítače v osmibitové barevné hloubce tj. se 256 stupni šedi. Na každý obrazový bod je tedy zapotřebí 1 Byte paměti. Reprezentaci matice dat při zpracování diskrétního šedotónového obrazu o rozměru 8x8 pixelů ukazuje následující obrázek.

V případě barevného obrazu je dvojrozměrná matice definována zvlášť pro každou základní barevnou složku (červená, zelená a modrá). Tyto matice určují intenzity jednotlivých spektrálních složek v příslušných místech obrazu a teprve jejich aditivním složením vznikne dojem barevného obrazu. Graficky lze tento proces vyjádřit jako překrytí tří obrazů za použití metriky prostého součtu prvků. Vznik barevného obrazu ze tří matic základních spektrálních složek ukazuje následující obrázek.

Třetí a poslední běžný typ obrazu z hlediska barevné hloubky je binární obraz. Prvky matice jsou pouze 0 resp. 1 a reprezentují černou resp. bílou barvu. Bitová hloubka u těchto obrazů je tedy vždy rovna jedné. Binární obrazy se zpravidla používají pro definici obrazových masek. Prostým násobením prvků obrazu a masky téže velikosti lze filtrovat odpovídající části obrazu. Kromě výše uvedených typů obrazů existují ještě speciální tzv. multispektrální obrazy, které nejsou předmětem kurzu.

B) Úkoly

  1. Vytvořte matici představující obrazovou rovinu šedotónového obrazu o rozměrech 640x480 bodů s nulovými prvky.

  2. Sestavte blok programu, který bez dalšího zpracování pouze postupně přečte jasové hodnoty pixelů ve zvoleném obdélníkovém výřezu obrazu. Implementaci řešte nejprve obecným způsobem pro práci s libovolným dvojrozměrným polem hodnot, poté optimalizujte použitím vektorových a maticových operací Matlabu do jednoho řádku kódu.

  3. Vygenerujte šedotónový obraz s výše uvedenými rozměry a nahodile se překrývajícími obdélníky o různých hodnotách.

  4. Obdobně jako v předchozím případě vygenerujte barevný obraz složením tří šedotónových obrazů představující složky červené, zelené a modré barvy. Obrazy navrhněte tak, aby ve výsledném barevném obrazu vznikly všechny kombinace tří základních barev. Pro srovnání vykreslete současně všechny tři složkové obrazy a obraz barevný do jednoho okna.

  5. Načtěte obraz [obraz05.bmp] z disku, proveďte nulování jeho prostřední třetiny, zobrazte jej a opět uložte na disk.

C) Dobré vědět

  • Datové typy pro obrazy: pro vykreslení obrazu je vhodný datový typ uint8 (rozsah 0..255). Pozor! Pro práci s prvky matice je zpravidla nutné hodnoty přetypovat na vyšší datový typ (int16, uint16, double, ...) kvůli případnému přetečení při aritmetických operacích. Naopak neustálé používání rozsahově vyššího datového typu např. double není vhodné z hlediska rychlosti zpracování a z hlediska správného vykreslení jasových úrovní.

  • Povolené funkce: imread, imwrite, imshow, subplot, image, imagesc, figure, colormap, title

  • Nepovolené funkce: -

D) Ilustrace výsledků