Cvičení 3 - Aritmetické operace
A) Teoretický úvod
Obdobně jako u veličin skalárních jsou i u vektorových a maticových definovány elementární aritmetické operace součet, rozdíl, násobení a dělení. Vzhledem k tomu, že na libovolný diskrétní obraz lze pohlížet jako na matici konečných hodnot, je patrné, že tyto elementární operace jsou definovány i pro obrazy.
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í. 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.
Aritmetické operace lze aplikovat jak na šedotónové, tak na barevné i na binární obrazy. Nejedná se ovšem o binární operace s obrazy, ale o aritmetické operace s binárními obrazy. Binární obrazy se zpravidla vyskytují jako masky aplikované na jiný šedotónový nebo barevný obraz.
V případě barevných obrazů se operace provádí pro každou barevnou složku zvlášť a zvlášť se také ukládá výsledek do výstupního obrazu. Pokud je třeba provést aritmetickou operaci nad jedním barevným a jedním šedotónovým obrazem, má situace tři řešení. Za prvé je možné provést aritmetickou operaci nad šedotónovým obrazem a jednou složkou barevného obrazu a zbylé dvě ponechat nezměněné. Za druhé lze tentýž postup aplikovat na všechny tři složky barevného obrazu s třetinovou vahou prvků šedotónového obrazu a výsledky sečíst a nakonec za třetí lze barevný obraz převést na šedotónový podle následujícího vzorce a dále pokračovat jako v případě dvou šedotónových obrazů.
Při převodu barevného obrazu na šedotónový za účelem strojového zpracování obrazových dat je možné koeficienty CR, CG a CB volit libovolně, nejčastěji však rovné 1/3, kdy mají všechny tři spektrální složky stejnou váhu. V případě převodu barevného obrazu na šedotónový pro interpretaci lidským okem je ale situace odlišná. Vzhledem k rozdílné citlivosti lidského oka na různé spektrální složky nejsou jednotlivé koeficienty Ci rovny přesně 1/3, ale empiricky zjištěným konstantám CR=0.299, CG=0.587, CB=0.114.
B) Úkoly
- Pomocí syntaxe pro přístup k jasové hodnotě pixelu obrazu nebo pomocí
maticových operací Matlabu proveďte s obrazy obraz05.bmp a obraz03.bmp popř. jedním obrazem a konstantou
následující aritmetické operace:
- součet obrazů: S(i,j) = P1(i,j) + P2(i,j) a R(i,j) = P1(i,j) + C
- rozdíl obrazů: D(i,j) = P1(i,j) – P2(i,j) a R(i,j) = P1(i,j) – C
- součin obrazů: M(i,j) = P1(i,j)*P2(i,j) a R(i,j) = P1(i,j)*C
- dělení obrazů: Q(i,j) = P1(i,j)/P2(i,j) a R(i,j) = P1(i,j)/C
- míchání obrazů: B(i,j) = X*P1(i,j) + (1-X)*P2(i,j) a R(i,j) = X*P1(i,j) + (1-X)*C, X<0;1>
Sledujte rozdíly při práci s nativním datovým typem šedotónového obrazu (uint8) a při přetypování na vhodný vyšší datový typ a při zobrazování s a bez [] na místě druhého parametru funkce imshow.
- Z výše uvedených operací vyberte takovou, která: a) celkově zvýší jas obrazu, b) zvýší kontrast obrazu. U barevného obrazu rubikovaC.bmp zvyšte jas nejprve pouze jedné složky a vzniklý barevný obraz zobrazte. Následně zvyšte jas všech složek a zobrazte do vedlejšího podokna.
- Pro barevný obraz rubikovaC.bmp proveďte konverzi na šedotónový obraz s různými koeficienty {CR, CG, CB} jednotlivých spektrálních složek. Do jednoho okna zobrazte původní barevný obraz, šedotónový obraz s koeficienty převodu 1/3 a s koeficienty respektující citlivost lidského oka a zvlášť jednotlivé barevné složky.
- Vygenerujte syntetický obraz o rozměrech 512×512 pixelů jako šachovnicovou masku pro binární filtraci přičemž rozměr jednoho políčka volte tak, aby byla celá maska rozdělena na 8×8 políček. Poté proveďte s obrazem lenaM.bmp prostorovou filtraci (operace násobení obrazu a masky).
C) Dobré vědět
- Všechny aritmetické operace z prvního bodu lze provést pro saturované (255+1 → 255 ; 0–1 → 0), případně přetékající (255+1 → 0 ; 0–1 → 255) mezní hodnoty nebo lze využít vyšších datových typů.
- Operace nad obrazem a konstantou jsou implementačně identické operaci nad dvěma obrazy, z nichž jeden je konstantní.
- U rozdílu a dělení sledujte rozdílné výsledky při záměně operandů.
- Pro správné zobrazení obrazu masky pomocí funkce imshow je nutné před vykreslením prvky matice masky buďto násobit hodnotou 255 nebo využít automatické zjištění mezí matice pomocí [] na místě druhého parametru funkce imshow.
- Povolené funkce: imread
- Nepovolené funkce: im2bw, imadd, imsubtract, immultiply, imdivide, imlincomb, rgb2gray