Cvičení 1 - Analýza obrazu

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.

Na šedotónovém obrazu lze provádět aritmetické operace přímo s prvky matic a výsledky uložit do výstupního pole, které bude mít stejný rozměr jako vstupní. Pokud jde o barevné obrazy, pak se operace provádí pro každou barevnou složku zvlášť a zvlášť se také ukládá výsledek do výstupního (barevného) obrazu. Mezi základní aritmetické operace s obrazem patří součet, rozdíl, součin, dělení a míchání. Každou uvedenou operaci lze navíc provádět se dvěma obrazy nebo jedním obrazem a konstantou. Matematické definice aritmetických operací součtu (S), rozdílu (D) a míchání (B) uvádí následující vztahy.

O rozložení jasu v obrazu vypovídá charakteristika, která se nazývá histogram a jíž v matematice odpovídá četnost prvku ve třídě. Graficky jde o závislost počtu výskytů dané jasové úrovně na hodnotě této úrovně. Horizontální osu histogramu tedy tvoří v případě šedotónového obrazu s 8 bitovou barevnou hloubkou hodnoty 0 až 255 a vertikální osu pak počty pixelů s danou úrovní v celém obrazu. Je zřejmé, že histogram čistě bílého, černého nebo jinak homogenního obrazu bude tvořen pouze jednou svislou čarou v příslušném místě histogramu a její výška bude odpovídat celkovému počtu bodů obrazu. Analýza histogramu je velmi častou metodou pro určení parametrů metod zpracování obrazu zejména pro stanovení optimální hodnoty prahu při segmentaci objektů a pozadí.

Pro jasovou transformaci nazývanou ekvalizace obrazu se využívá tzv. kumulovaný histogram, jehož tvar získáme integrací prostého histogramu. Normalizací kumulativního histogramu na rozsah hodnot <0,255> lze obdržet převodní charakteristiku jejíž aplikací na původní obraz získáme obraz ekvalizovaný. Základní vlastností ekvalizovaného obrazu je rovnoměrné (v případě diskrétních obrazů jen přibližně rovnoměrné) zastoupení jasových úrovní. Zjednodušeně řečeno je ve výstupním obrazu věnováno více jasového prostoru objektům, které zabírají větší plochu, než objektům menším.

B) Úkoly

  1. Pomocí funkce ones vytvořte jako dvourozměrnou matici obraz I o konstantní jasové hodnotě 50 a rozměrech [512,512] a výsledek zobrazte pomocí funkce imshow a title.

  2. Nad obrazem I a obrazem [lenaM.bmp] proveďte aritmetické operace součet, rozdíl a míchání a výsledky zobrazte do jednoho okna pomocí funkce subplot.

  3. Napište funkci [H] = ImageHistogram(I), která ve výstupním parametru H vrátí histogram vstupního obrazu I. Pomocí funkce vypočítejte a do jednoho okna přehledně zobrazte i s příslušnými histogramy obrazy [lenaM.bmp] a součtový obraz z předchozího bodu.

  4. Napište funkci [J] = ImageEqualize(I) pro ekvalizaci šedotónového i barevného obrazu. Správnost implementace ověřte na dvou obrazech [lenaM.bmp] a [lenaC.bmp]. Výsledky ekvalizace zobrazte společně s příslušnými histogramy. Funkce musí automaticky rozpoznat typ vstupního obrazu a barevný obraz vyhodnotit po jednotlivých složkách.

C) Dobré vědět

  • Šedotónové obrazy jsou v paměti zpravidla reprezentovány jako matice 8 bitových celočíselných hodnot (v Matlabu reprezentuje typ uint8). Pro aritmetické operace je však potřeba obrazy převést na vyšší datový typ kvůli saturaci mezních hodnot. V Matlabu je vhodné používat zejména typy uint16, int16 a double.

  • Funkce imshow pracuje standardně s typem uint8, a proto je potřeba u jiných datových typů provést před vykreslením typovou konverzi popř. uvést na místě druhého parametru funkce imshow hranaté závorky [] buďto s mezemi hodnot anebo prázdné pro automatický výpočet minimální a maximální hodnoty vykreslované matice.

  • Povolené funkce: zeros, ones, eyes, cumsum, find, plot, line

  • Nepovolené funkce: imhist, histeq

D) Ilustrace výsledků