SLEZSKÁ UNIVERZITA V OPAVĚ FILOZOFICKO-PŘÍRODOVĚDECKÁ FAKULTA ÚSTAV INFORMATIKY
DIPLOMOVÁ PRÁCE Zpracování rušených barevných obrazů ve vhodných soustavách a transformacích
Vypracoval: Bc. Luděk Beran Opava 2005
Vedoucí práce: Mgr. Luděk Cienciala
Prohlášení Prohlašuji, že jsem diplomovou práci vypracoval samostatně a že jsem uvedl všechny použité zdroje a literaturu. V Opavě dne 26. dubna 2005
Poděkování Děkuji především svým rodičům, bratrovi a celé rodině za podporu při mém studiu. Své přítelkyni děkuji za důvěru. Děkuji také panu Mgr. Luďku Ciencialovi, který trpělivě vedl moji diplomovou práci. Všem kamarádům děkuji za pomoc.
Obsah ÚVOD............................................................................................................................... 1 1
SVĚTLO .................................................................................................................. 2 1.1
2
BARVA .................................................................................................................... 4 2.1 2.2 2.3 2.4
3
ZDROJE SVĚTLA ................................................................................................. 3 VNÍMÁNÍ BARVY ................................................................................................ 4 GRASSMANNOVY ZÁKONY ................................................................................. 5 JAS, TÓN BARVY A SYTOST ................................................................................. 6 TĚLESO BAREV................................................................................................... 8
BAREVNÉ PROSTORY...................................................................................... 10 3.1 PROSTOR RGB................................................................................................. 10 3.1.1 Definice prostoru ........................................................................................ 10 3.1.2 Projekce do jednotkové roviny.................................................................... 11 3.2 BAREVNÝ PROSTOR HSI (HSV)....................................................................... 12 3.2.1 Převod z RGB do HSI ................................................................................. 13 3.2.2 Převod z HSI do RGB ................................................................................. 14 3.3 BAREVNÝ PROSTOR XYZ................................................................................. 15 3.3.1 Odvození souřadnic XYZ ............................................................................ 15 3.3.2 Převod z RGB do XYZ................................................................................. 17 3.3.3 Převod z XYZ do RGB................................................................................. 17 3.4 BAREVNÝ PROSTOR YXY ................................................................................. 17 3.4.1 Převod z XYZ do Yxy................................................................................... 19 3.4.2 Převod z Yxy do XYZ................................................................................... 19 3.5 BAREVNÝ PROSTOR YUV ................................................................................ 19 3.6 BAREVNÝ PROSTOR YU`V`............................................................................... 19 3.7 BAREVNÝ PROSTOR L*A*B*............................................................................ 20 3.7.1 Definice prostoru ........................................................................................ 20 3.7.2 Převod z XYZ do L*a*b* ............................................................................ 21 3.7.3 Převod z L*a*b* do XYZ ............................................................................ 22 3.8 BAREVNÝ PROSTOR L*U*V*............................................................................ 22 3.8.1 Převod z Yu'v' do L*u*v*............................................................................ 22 3.9 BAREVNÝ PROSTOR L*C*H°............................................................................ 22 3.9.1 Převod z L*a*b* do L*C*h°....................................................................... 23 3.9.2 Převod z L*C*h° do L*a*b*....................................................................... 23
4
RUŠENÍ BAREVNÝCH OBRAZŮ .................................................................... 25 4.1 DĚLENÍ ŠUMŮ .................................................................................................. 25 4.1.1 Chtěné šumy................................................................................................ 25 4.1.2 Šumy vzniklé nechtěně ................................................................................ 26 4.2 JAK SE VYPOŘÁDAT SE ŠUMY ........................................................................... 27
4.3 KONVOLUCE .................................................................................................... 28 4.4 ODSTRANĚNÍ ŠUMU .......................................................................................... 30 4.4.1 Filtry v prostorové oblasti .......................................................................... 31 4.4.2 Filtry ve frekvenční oblasti ......................................................................... 31 4.5 OSTŘENÍ OBRAZU ............................................................................................. 32 4.5.1 Ostření obrazu v prostorové oblasti ........................................................... 33 4.5.2 Ostření obrazu ve frekvenční oblasti .......................................................... 34 5
ISOLINIE .............................................................................................................. 35 5.1 5.2 5.3
6
ISOFOTY ........................................................................................................... 35 ISOCOLORY ...................................................................................................... 36 ISOVOLUMY ..................................................................................................... 37
IMPLEMENTACE PROGRAMU...................................................................... 39 6.1 ZOBRAZENÍ ...................................................................................................... 39 6.2 TRANSFORMACE A ŠUMY ................................................................................. 39 6.2.1 Transformace a vybrané barevné prostory................................................. 40 6.2.2 Šum ve zvoleném prostoru .......................................................................... 43 6.3 ODSTRANĚNÍ ŠUMU .......................................................................................... 46 6.4 VYZNAČENÍ ISOLINIÍ ........................................................................................ 48
7
UŽIVATELSKÁ PŘÍRUČKA............................................................................. 51 7.1 INSTALACE, SPUŠTĚNÍ ...................................................................................... 51 7.2 OVLÁDÁNÍ ....................................................................................................... 52 7.2.1 File .............................................................................................................. 52 7.2.2 Window ....................................................................................................... 53 7.2.3 Noise in ....................................................................................................... 53 7.2.4 Filtering ...................................................................................................... 54 7.2.5 Isolinies....................................................................................................... 55 7.2.6 Help............................................................................................................. 56 7.3 RYCHLÉ VOLBY................................................................................................ 56 7.4 ZOBRAZENÍ SOUBORŮ A VÝSLEDKŮ ................................................................. 57 7.5 STAVOVÝ ŘÁDEK ............................................................................................. 57
8
VÝSLEDKY .......................................................................................................... 58 8.1 8.2 8.3 8.4
TRANSFORMACE MEZI PROSTORY .................................................................... 58 GENEROVÁNÍ ŠUMU ......................................................................................... 58 FILTRACE ŠUMU ............................................................................................... 60 VYZNAČENÍ ISOLINIÍ ........................................................................................ 60
ZÁVĚR .......................................................................................................................... 63 LITERATURA.............................................................................................................. 64 PŘÍLOHA...................................................................................................................... 65
Úvod Cílem diplomové práce je popsat běžné šumové vlivy pro barevné obrazy, porovnat vliv rušení na obrazy popsané v různých barevných soustavách, navrhnout algoritmus pro vyznačení čar se stejným jasem nebo barevným tónem a čar se stejným obsahem dané barvy a v neposlední řadě vytvořit simulátor pro šum v barevných obrazech ve zkoumaných barevných soustavách. Nejdříve popíšeme různé barevné soustavy, jejich použití a převody mezi nimi. Navážeme popisem šumových vlivů, jejich tvorbou a odstraněním. Dále se zmíníme o tzv. isočárách, což jsou čáry v obraze (graf, mapa), které spojují místa stejných hodnot dané veličiny. V našem případě půjde o jas, barevný tón a sytost. Jinak je lze nazývat též isolinie nebo isokřivky. Práci zakončíme navrhnutím a uvedením vhodného algoritmu pro vyznačení isolinií. Ten také použijeme v praxi jako součást programu, který bude simulovat šum ve vybraných barevných prostorech a umožní zpracování rušeného obrazu vybranými metodami. Pracovat budeme převážně s digitalizovaným obrazem, tedy s obrazem, který je převeden z reálného spojitého obrazu do obrazu diskrétního. Postup, kterým takový obraz získáme, se nazývá „digitalizace“ obrazových signálů, či ještě přesněji „vzorkování“. Celý proces spočívá v tom, že vstupní obraz deterministicky popsaný spojitou obrazovou funkcí f ( x, y ) vzorkujeme, tedy násobíme vzorkovací funkcí s( x, y ) , čímž dostaneme výsledný vzorkovaný obraz f s ( x, y ) v diskrétních hodnotách. Za vzorkovací funkci s ( x, y ) se obecně bere nekonečné pole Diracových impulzů definované předpisem
s ( x, y ) =
∞
∞
∑ ∑ δ (x − k∆x, y − l∆y ) ,
k = −∞ l = −∞
kde ∆x a ∆y jsou vzdálenosti jednotlivých impulzů, které nám určují, s jakou frekvencí bude obraz vzorkován.1 Nebudeme se zabývat vlastnostmi Diracova impulzu, ani přesným postupem vzorkování. Spíše se zaměříme na další podstatnější oblast týkající se obrazů a tou je „světlo“. 1
Sojka, E.: Digitální zpracování a analýza obrazů. Str. 34-35.
-1-
1 Světlo Světlo je sice fyzikální veličina, ale jeho vnímání je psychofyziologický proces. Protože se snažíme zohlednit lidské vnímání, ustupujeme od pojetí světla jako fyzikální veličiny a definujeme ho jako vlastnost zářivé energie, kterou si pozorovatel uvědomuje zrakovým vjemem, vznikajícím podrážděním sítnice. V technice je světlo považováno za zrakem vyhodnocenou zářivou energii ve viditelné oblasti. Z fyzikálního hlediska je viditelné světlo elektromagnetické záření o frekvencích 385 až 790 THz, to znamená s vlnovou délkou 700 až 380 nm. Elektromagnetické záření má široký rozsah, od radiových vln využívaných pro vysílání rádia a televize, přes radarové a infračervené záření, viditelné světlo, až po ultrafialové, Roentgenovo, gama a
400 nm
viditelné záření 700 nm
dlouhá vlnová délka
krátká vlnová délka
Obr. 1 – Vlnové délky světla
Vlnové délky světla:
2
•
Červená: mezi 700 a 630 nm;
•
Oranžová: mezi 630 a 590 nm;
•
Žlutá: mezi 590 a 560 nm;
•
Zelená: mezi 560 a 480 nm;
•
Modrá: mezi 480 a 360 nm.
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.1.
-2-
gamma paprsky
X paprsky
ultrafialové záření
infračervené záření
teplo
TV
rádio
kosmické záření.2
1.1 Zdroje světla Základním požadavkem na definici světelného zdroje je jeho dobrá shoda, co do intenzity záření při jednotlivých vlnových délkách, se zdrojem, který reálně pro hodnocení barev používáme. Nejběžnější v přírodě je samozřejmě Slunce, z umělých zdrojů žárovka a zářivka. K charakterizaci světelného zdroje se využívá Planckova zákona pro záření absolutně černého tělesa s vyjádřením teploty chromatičnosti. Teplotou chromatičnosti rozumíme teplotu absolutně černého tělesa, při níž má zdroj stejný spektrální průběh jako Planckův zářič (např. u žárovky). Pokud spektrální průběh není shodný s tímto zářičem, ale je plynulý a příliš se neodchyluje, mluvíme o ekvivalentní teplotě chromatičnosti (používá se u denních světel). V případě, že spektrální průběh
vykazuje
náhlé
změny,
mluvíme
o tzv.
náhradní
teplotě
chromatičnosti (u zářivek). Mezinárodní komise pro osvětlení (jinak také CIE – Commission Internationale d´Eclairage) za dobu své existence popsala několik standardních zdrojů světla. Nebudeme se jimi podrobně zabývat, ale zapamatujme si ty nejdůležitější. Zdroj „A“ je žárovka s teplotou chromatičnosti 2856 K, zdroj „D65“ je denní světlo s ekvivalentní teplotou chromatičnosti 6504 K a zdroj „F11“, což je zářivka Philips TL 84, má teplotu chromatičnosti 4000 K.3
3
Koudelka, M.: Měření barevnosti ve stavební praxi. Str. 3.
-3-
2 Barva Jelikož budeme pracovat s barevnými obrazy, je nezbytně nutné, abychom uvedli některé základní informace týkající se barvy. Co je barva? „Vnímaná barva je výsledkem vzájemného působení mezi světlem, předmětem a pozorovatelem. Světlo je modifikováno sledovaným předmětem a toto modifikované světlo potom vnímá pozorovatel. Všechny tři subjekty působící v tomto procesu musíme znát. Potřebujeme znát, co je světlo, jak je možné ho kvantifikovat, jaké základní zákony platí při míchání barev, jak předměty světlo odrážejí a propouštějí a jak barvu světla vnímáme.“4 Z této citace je patrné, že definovat přesně barvu je velmi obtížné. Nicméně existuje několik možných definic. Kupříkladu definice Optical Society of America, která zní: "Barva záleží ve vlastnostech světla jiných, než v prostorové a časové nehomogennosti", což můžeme chápat tak, že všechny vlastnosti světla, kromě časových a prostorových, jsou ve své podstatě barvou. Jiná definice říká, že „barva v podstatě závisí na spektrálním složení světla, které se dostává do oka v uvažovaném čase a z určitého směru.“5 Docházíme tedy k závěru, že vnímaná barva má psychofyzikální charakter, je závislá na podráždění a vjemu. Zatímco podráždění je fyzikální podstaty a zahrnuje zářivou energii na každé vlnové délce, vjem je čistě psychologické podstaty a liší se u různých jedinců a v různých podmínkách a čase.
2.1 Vnímání barvy Zaměřme se nyní na skutečnost, že lidským senzorem pro vnímání barvy je oko. Důležitou vlastností oka je to, že lze vyvolat dojem jedné barvy smícháním tří jiných. Na základě této skutečnosti funguje dnes většina přístrojů, které využívají ke zobrazení různých barev jen tři základní. Kupříkladu na barevné obrazovce vidíme výslednou barvu jako kombinaci červené, zelené a modré. Lidské oko vnímá různým způsobem intenzitu jednotlivých barevných složek, takže celkový jas je třeba vyjádřit jako
4 5
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2. Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.5.
-4-
(2.1)
I = 0,299 R + 0,587G + 0,114 B ,6
kde R je hodnota červené (Red), G je hodnota zelené (Green),
B je hodnota modré (Blue) a I je výsledný jas (Intensity).
Výše uvedený vztah vychází z tzv. „kolorimetrické rovnice“, která vyjadřuje skládání barvy pomocí tří základních a má tvar (2.2)
C1 = R1 ( R) + G1 (G ) + B1 ( B) .
Veličiny v závorkách označují jednotkové hodnoty základních barevných složek a koeficienty R1 , G1 , B1 značí číselné hodnoty, potřebné ke složení požadované barvy. Při jiných základních složkách ( R ′) , (G ′) a ( B ′) však budou jiné i tyto koeficienty.
Mezinárodní komise pro osvětlování použila v normalizaci tři spektrální barvy 700 nm, 546.1 nm a 435.8 nm.7
2.2 Grassmannovy zákony Německý profesor H. Grassmann dospěl k řadě principů a zákonů o barvách. Oko může rozeznávat pouze tři druhy rozdílů nebo změn. Tyto změny dnes nazýváme jas, dominantní vlnová délka a sytost. Ve směsi dvou světel se bude barva směsi postupně měnit, je-li jedna složka stále měněna a druhá stálá. Dále podle Grassmanna platí, že zdroje světla stejné barvy mají ve směsi stejný účinek a to bez ohledu na jejich spektrální složení. Z tohoto zákona se odvozuje adiční zákon, který platí také pro odečítání, násobení a dělení. Pokud máme dvě barvy (2.3)
C1 = R1( R) + G1(G ) + B1( B) a C 2 = R 2( R) + G 2(G ) + B 2( B) ,
pak pro směs těchto barev podle adičního zákona platí: (2.4)
6 7
C1 + C 2 = ( R1 + R 2)( R) + (G1 + G 2)(G ) + ( B1 + B 2)( B) .
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 3. Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.6.
-5-
Celkový jas je aritmetickým součtem jasů složek. Tento zákon není platný ve všech případech, proto by se měly brát jeho výsledky jen přibližně.8
2.3 Jas, tón barvy a sytost Kromě tří trojbarevných jednotek popsaných v kapitole 1.4 můžeme používat i jiné definice barvy. Každou barvu, jakou si jen dokážeme představit, popisují tři veličiny, které vymezují barevný prostor: •
Odstín – (Hue) je tím co si představujeme pod pojmem barva: červeň, modř,
zeleň, žluť atd. CIE potom odstín definuje jako vlastnost vizuálního vnímání, podle kterého se plocha jeví být podobná jedné z barev – červené, žluté, zelené a modré, nebo kombinaci dvou z nich. Odstín je určen vlnovou délkou světla, které nám dopadá na detektor nebo oko. •
Jas – (Lightnes nebo Brightnes) nám charakterizuje "světlost" nebo "tmavost"
vnímané barvy. Snižování jasu znamená přidávání černé, popřípadě šedé. Komisí CIE je jas definován jako třetí odmocnina svítivosti. Jas přísluší amplitudě (výšce) vlny vnímaného světla. •
Sytost – (Saturation, někdy také překládáno jako Brilance), nám udává, jak je
vnímaná barva kalná nebo čistá, tzn. je-li spíše blíže k šedé (kalná) nebo ke svému odstínu (brilantní). Snižování sytosti znamená přidávání bílé. Pro úplnost opět definice podle CIE, která vystihuje sytost jako barevnost oblasti rozdělené v poměru k jejímu jasu. Sytost je potom určena strmostí vlny světla, které vnímáme.9 Z těchto tří veličin vychází barevné modely HSV (HSI) – „Hue, Saturation, Value (Intenzity)“ a HLS – „Hue, Lightness, Saturation“. Protože tyto modely neuvažují vnímání lidského oka a pro problémy při aritmetickém míchání barev, definici bílého bodu aj. jsou tyto systémy pro správu barev nevhodné. Ale o tom se dozvíme více ve stati 3.2 o barevných prostorech. Jen pro hrubou představu, pro zobrazení modelu 8 9
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.8. Hrbáček, L.: Barva v předtiskové přípravě 2. Čl. 1.
-6-
HSV se používá šestiboký jehlan (Obr. 2). Jeho vrchol leží v počátku soustavy souřadnic HSV. Souřadnice S a V nabývají hodnot od 0 do 1, souřadnice H reprezentuje úhel nabývající hodnoty z intervalu od 0º do 360º. Vrchol jehlanu představuje barvu černou, jas roste směrem k podstavě (hodnota 1). Střed podstavy představuje barvu bílou. Sytost roste podle vzdálenosti od osy jehlanu. Dominantní barvy (se sytostí 1) leží na plášti. Čisté barvy (červená, žlutá, zelená, tyrkysová, modrá, purpury) jsou na obvodu podstavy. Model HLS (Obr. 3) je obdobou modelu HSV. Jen místo jehlanu je zobrazen dvojicí kuželů. Barevný tón je stejně jako v předchozím případě vyjádřen úhlem, světlost se opět mění od černé (0) po bílou (1) a sytost je vyjádřena intervalem od 0 do 1 podle vzdálenosti od osy L. Nejjasnější čisté barvy tedy leží na obvodu podstav kuželů a mají souřadnice S = 1 a L = 0,5.10
Obr. 2 – Geometrická reprezentace modelu HSV
10
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 6.
-7-
Obr. 3 – Geometrická reprezentace modelu HLS
2.4 Těleso barev Protože míšení barev má lineární povahu, je možné určovat barevné vektory. Směsi barev jsou potom určeny součtem těchto vektorů. Pro práci s barvami můžeme použít algebry, která byla vypracována pro studium vektorů v trojrozměrném prostoru. Libovolnou barvu dostaneme jako součet bázových vektorů (2.5)
C = R1( R) + G1(G ) + B1( B) .
Jelikož je možné v podstatě všechny barvy získat mícháním tří základních barev, můžeme považovat barvu za spojitou veličinu. Při reprezentaci ve trojrozměrném prostoru je barva určena buď jako kombinace tří úseček (podobně jako v rovnici) nebo jako dvě úsečky a úhel v polární trojrozměrné soustavě. U prvního případu jsou složkami tři základní barvy, zatímco u druhého se jedná o jas, sytost a dominantní vlnovou délku.11
11
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.10.
-8-
Obr. 4 – Model tělesa barev s jednotkovou rovinou určenou jednotkovými vektory, představujícími základní spektrální barvy12
Většinou se volí těleso tak, aby osy svíraly pravé úhly, což však není bezpodmínečně nutné. Zcela postačí, když budou úhly mezi osami stejné. Za osy bereme jednotkové vektory (R), (G) a (B). Tyto vektory jsou voleny tak, aby pro kolorimetrické vyrovnání srovnávacího bílého světla bylo potřeba stejných velikostí každého vektoru pro každou úroveň jasu. Potom je vektor nepestré barvy stejně vzdálen od každého vektoru základní barvy. Pro každou rovinu, která je kolmá k vektoru šedé barvy, tvoří její průsečíky a nebo, podle potřeby, vytváří svými prodlouženými jednotkovými vektory rovnostranný trojúhelník. Rovina spojující koncové body jednotkových vektorů se nazývá jednotková rovina.13
12 13
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.10. Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.10.
-9-
3 Barevné prostory Lidské oko je schopné rozlišit cca 17 000 odstínů chromatických barev a asi dalších 300 odstínů šedi. Barevné modely jsou jedním ze způsobů, jak zorganizovat barvy a jak vymezit prostor obsahující odstíny, které je schopen člověk vnímat, které jsme schopni tisknout nebo které jsme schopni zobrazit na monitoru počítače. Obecně lze barevné modely rozčlenit do čtyř skupin: 1. modely založené na fyziologii oka – RGB model, CMYK model; 2. kolorimetrické barevné modely, založené na fyzikálním měření spektrální odrazivosti – chromatický diagram CIE; 3. komplementární modely, založené na percepčních experimentech, užívající dvojice komplementárních barev; 4. modely psychologické a psychofyzikální – HSV, HSI, HLS.14 V následujících podkapitolách si popišme alespoň ty nejznámější z barevných prostorů a hlavní převody mezi nimi. Některé z nich později použijeme při implementaci programu.
3.1 Prostor RGB Prvním způsobem záznamu a zobrazení barev je použití asi nejznámějšího prostoru RGB (Red, Green, Blue). Základní vlastností RGB modelu je součtové, neboli takzvané
aditivní skládání barev. To v praxi znamená, že „čím více barev složíme (sečteme), tím světlejší je výsledek.“15
3.1.1 Definice prostoru Barevný rozsah můžeme v modelu RGB zobrazit prostorově jako jednotkovou krychli umístěnou v osách označených postupně R, G a B (Obr. 5). Počátek souřadnic odpovídá
14
Mgr. Friedmannová, L.: Transformace tématických mapových děl z analogové formy do formy digitální. Čl. 1.2. 15 Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 4.
-10-
černé barvě, zatímco vrchol o souřadnicích [1,1,1] odpovídá bílé. Vrcholy krychle, které leží na osách, představují základní barvy a zbývající vrcholy reprezentují doplňkové barvy ke každé ze základních barev. Odstíny šedi odpovídají bodům na diagonále krychle spojující černý a bílý bod.16
Obr. 5 – Prostor RGB17
3.1.2 Projekce do jednotkové roviny Po promítnutí souřadnic do jednotkové roviny a normalizaci dostáváme pro nové souřadnice následující vztahy: (3.1)
r=
R G B , g= , b= . R+G+ B R+G+ B R+G+ B
Pro nové souřadnice v jednotkové rovině platí, že jejich součet je roven jedné. Proto je možné používat souřadnice pouze dvě. Třetí souřadnicí potřebnou pro jednoznačné určení barvy je jas určující rovinu, ve které se budeme pohybovat (Obr. 6).18
16
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 4. Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.1. 18 Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.1. 17
-11-
Obr. 6 – Zobrazení Maxwellova trojúhelníku v prostoru RGB
Na Obr. 7 je znázorněn samotný Maxwellův trojúhelník v jednotkové rovině.
(B)
b
1
r
g
(R)
(G)
Obr. 7 – Průmět do jednotkové roviny
3.2 Barevný prostor HSI (HSV) Prostor HSI (Hue – tón, Saturation – sytost, Intensity – jas), jinak také HSV (Hue – tón, Saturation – sytost, Value – jasová hodnota) vyjadřuje tón barvy, sytost barvy a hodnotu jasu. Barevný tón označuje převládající spektrální barvu, sytost určuje příměs jiných barev a jas je dán množstvím bílého (bezbarvého) světla. Těleso barev tohoto prostoru je zobrazeno na Obr. 8. Model je popsán již v kapitole 2.3.
-12-
Obr. 8 – Prostor HSI19
3.2.1 Převod z RGB do HSI Převody jsou již popsány v jiných publikacích, proto se spokojíme s citováním z existujících zdrojů. Kupříkladu tento zápis převodu RGB do HSI podle Boumphreye:20 1 (R + G + B ) , 3
(3.2)
I=
(3.3)
3 ⎛ ⎞ S = 1− ⎜ ⎟⋅a , ⎝R+G+ B⎠
kde a je minimum z R, G, B, (3.4)
⎡ H = cos ⎢ ⎢⎣ −1
⎤ ⎥, + (R − B )(G − B ) ⎥⎦
0,5 ⋅ (R − G ) + (R − B )
( R − G )2
když S = 0 , pak H není definováno,
19 20
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 2.9. Boumphrey, F.: Color Space Conversions.
-13-
⎛ B⎞ ⎛G⎞ když ⎜ ⎟ > ⎜ ⎟ , pak H = 360 − H , kde H je úhel ve stupních, který normalizujeme ⎝I⎠ ⎝I ⎠ na 0,1 pomocí H = H
360
.
Výpočet barevného tónu vyjádřil i Komzák21 algoritmem: pro R = G = B
není H definováno
jinak max = max(R, G, B) min = min (R, G, B) R1 = (max - R) / (max - min) G1 = (max - G) / (max - min) B1 = (max - B) / (max - min) pro R = max and G == min je H = 300 + 60 * B1 pro R = max and G <> min je H =
60 - 60 * G1
pro G = max and B == min je H =
30 + 60 * R1
pro G = max and B <> min je H = 180 - 60 * B1 pro B = max and R == min je H = 180 + 60 * G1 pro B = max and R <> min je H = 300 - 60 * R1
3.2.2 Převod z HSI do RGB Převod z HSI do RGB je také popsán Boumphreyem22 následujícím způsobem:
21 22
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. čl. 3.1. Boumphrey, F.: Color Space Conversions.
-14-
Nejdříve převedeme H na stupně pomocí H = 360 * H a následuje If 0 < H <= 120 then B = 1/3(1-S) R = 1/3(1+(S cos H) / ( cos(60 - H)) G = 1 - (B+R) If 120 < H <= 240 then H = H - 120 R = 1/3(1-S) G = 1/3(1+(S cos H) / ( cos(60 - H)) B = 1 - (R+G) If 240 < H <= 360 then H = H - 240 G = 1/3(1-S) B = 1/3(1+(S cos H) / ( cos(60 - H)) R = 1 - (G+B)
3.3 Barevný prostor XYZ Barevný prostor XYZ je prostorem, který vytvořila CIE (Commission Internationale d´Eclairage – Mezinárodní komise pro osvětlení).
3.3.1 Odvození souřadnic XYZ V roce 1931 CIE definovala tzv. standardního pozorovatele (CIE Standard Observer), který vzešel z měření citlivosti lidského oka velkého vzorku respondentů s normálním barevným vnímáním. Každý respondent má za úkol nastavit pomocí červené, modré a zelené lampy stejný odstín, jako je na testovací lampě, a to vůči bílé podložce. Výsledkem jsou takzvané color matching function (citlivosti lidského oka) x, y a z, které vznikly lineární transformací složek r, g, a b. Tyto funkce jsou definovány jak pro 2°, tak pro maximální 10° pozorovací úhel. Z nich můžeme pak vypočítat trichromatické složky X, Y, Z. Vynásobíme intenzitu světla remisním faktorem a citlivostí lidského oka a to přes celé spektrum. Např.: (3.5)
X = k (∑ E (λ )R(λ )x (λ )∆(λ )) ,
-15-
stejně potom počítáme Y a Z. U všech světel definovaných CIE platí, že hodnota y = 100 a x, z se jí přizpůsobují. Pomocí těchto složek můžeme definovat jakoukoliv barvu. Hlavní vlastností barevných prostorů je jejich nezávislost na zařízení, které s barvou pracuje.23 Při návrhu barevného prostoru XYZ byly dodrženy tyto podmínky: 1. Osy jsou zvoleny tak, aby ležely vně oblasti skutečných barev , 2. přímka (X) (Y) je tečnou k čáře spektrálních barev na 780 nm, takže pro značnou část červeného konce spektra je hodnota (Z) nulová nebo zanedbatelná, 3. jas základních barev (X) a (Z) je nulový, pak barva (Y) vyjadřuje přímo jas, 4. měřítka os jsou volena tak, že směs jedné jednotky každé základní barvy vyrovná isoenergetické světlo.24
Obr. 9 – Virtuální barevný prostor XYZ
23 24
Hrbáček, L.: Barva v předtiskové přípravě 2. Čl. 2. Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.2.
-16-
Obr. 10 – Vyjádření barvy monochromatického světla v souřadnicích XYZ25
3.3.2 Převod z RGB do XYZ Pro převod ze soustavy spektrálních barev RGB do soustavy neskutečných základních barev XYZ platí tyto vztahy:26 X = 0.430574*R + 0.341550*G + 0.178325*B Y = 0.222015*R + 0.706655*G + 0.071330*B Z = 0.020183*R + 0.129553*G + 0.939180*B
3.3.3 Převod z XYZ do RGB Pro zpětný převod z XYZ do soustavy RGB se používají tyto vztahy:27 R = 3.063218937*X - 1.393326323*Y - 0.475800751*Z G = -0.969245011*X + 1.875967806*Y + 0.041555221*Z B = 0.067871601*X - 0.228833399*Y + 1.06925135*Z
3.4 Barevný prostor Yxy Prostor XYZ lze podobně jako RGB promítnout do jednotkové roviny a normalizovat, čímž dostaneme nové souřadnice x, y a z: 25
Skala, V.: Barvy a fotorealismus I. Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.3. 27 Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.3. 26
-17-
(3.6)
x=
X Y Z , y= , z= X +Y + Z X +Y + Z X +Y + Z
Potom platí, že součet všech tří souřadnic je roven jedné a stačí nám tedy uvádět pouze dvě z nich. Pro tento účel se používají souřadnice x a y. (3.7)
(x + y + z = 1) ⇒ (z = 1 − x − y )
Souřadnice x a y plně určují dominantní vlnovou délku i sytost barvy. K tomu, aby byla barva jednoznačně určena, je potřeba uvádět jas pomocí souřadnice Y. Diagram barev x, y dostaneme promítnutím jednotkové roviny do roviny XY. Pokud pracujeme se souřadnicemi x, y a přidáme jasovou informaci, hovoříme o barevném prostoru Yxy. V souvislosti s tímto zobrazením se ještě zmíníme o tzv. gamutu, což je trojúhelník vymezující barevnou oblast v Yxy, kterou jsou schopny zobrazit dnešní běžné obrazovky. Samozřejmě platí, že čím lepší obrazovka, tím větší je gamut. Barvy mimo gamut zobrazit neumíme, proto se zobrazení celého "oblouku" dělá méně sytými či jinak zkreslenými barvami. (Obr. 11 je tedy třeba brát jako orientační.)
Obr. 11 – Znázornění barevného prostoru Yxy a gamutu28
28
Skala, V.: Barvy a fotorealismus I.
-18-
3.4.1 Převod z XYZ do Yxy Vztahy pro převod vychází z vlastnosti prostoru, coby průmětu prostoru XYZ do jednotkové roviny: x = X / (X + Y + Z) y = Y / (X + Y + Z) z = Z / (X + Y + Z)
3.4.2 Převod z Yxy do XYZ Zpětný převod z Yxy do XYZ je následující: X = x * Y/y Y = Y Z = z * Y/y
3.5 Barevný prostor YUV Jde o lineární transformaci prostoru Yxy. CIE se pokusila upravit barevný prostor tak, aby lépe vyhovoval citlivosti lidského oka. Hodnota Y je nezměněna a má stejné vlastnosti jako v prostorech XYZ nebo Yxy. Hodnoty u a v jsou vyjádřeny vzorci29 u = 2x / (6y - x + 1,5) v = 3y / (6y - x + 1,5)
Touto transformací nebylo dosaženo uspokojivého výsledku.
3.6 Barevný prostor Yu`v` Dalším pokusem CIE bylo vytvoření modifikace prostoru Yuv, čímž vznikl prostor Yu`v`, který je, obdobně jako předchozí, transformací prostoru 30
Yxy se shodnou hodnotou Y, přičemž další hodnoty jsou vyjádřeny jako
29 30
Boumphrey, F.: Color Space Conversions. Čl. 4.2. Boumphrey, F.: Color Space Conversions. Čl. 4.3.
-19-
u' = u
= 2x / (6y - x + 1,5)
v' = 1,5v = 4,5y / (6y - x + 1,5)
Ani tímto barevným prostorem se ale nepodařilo dostatečně přiblížit vlastnostem oka. Systémy XYZ, Yxy a z nich odvozené YUV a Yu`v` jsou výpočetně jednoduché. Mají ale nevýhodu, která může někdy vadit. Na některé barevné změny (kupříkladu na spojnici mezi modrou a žlutou) reaguje lidské oko lépe než na jiné změny. Při znalosti souřadnic dvou bodů A, B v těchto systémech tedy neumíme říci, zda je barevný posun „velký“ nebo „malý“. Proto se zavádějí tzv. perceptuálně rovnoměrné barevné systémy, kde eukleidovská vzdálenost dvou bodů odpovídá vnímané rozdílnosti příslušných barev. Typickými zástupci těchto systémů jsou CIELAB (L*a*b*), CIELUV (L*u*v*) a CIELCh (L*C*h°).31
3.7 Barevný prostor L*a*b* Barevný prostor L*a*b* (také nazývaný CIELAB, či pouze Lab) byl definován CIE v roce 1976. V současnosti je nejpoužívanější nezávislý barevný prostor. K jeho vzniku vedla snaha CIE vytvořit reprodukovatelný barevný prostor, který by sloužil jako standard při výrobě barviv.
3.7.1 Definice prostoru Prostor L*a*b* vychází z prostoru XYZ. Je založen na lidském vnímání barev – tří barevných receptorů (červená, zelená a modrá) v lidském oku. Jako výsledek jsou tři sady signálů předávaných ke zpracování lidskému mozku pomocí hodnot: •
L je hodnota jasu a má rozsah od 0 (Černá) do 100 (Bílá)
•
a je měřítko pro červenou (kladné hodnoty a), nebo zelenou (záporné hodnoty a)
•
b je měřítko pro žlutou (kladné hodnoty b), nebo modrou (záporné hodnoty b)
Jeho výhodou je, že se jedná o prostor lineární, tedy vzdálenost dvou bodů odpovídá jejich barevné odchylce ∆E.
31
Skala, V.: Barvy a fotorealismus I.
-20-
bílá +L
+b
žlutá
-a zelená
+a červená -b
modrá
-L
černá
Obr. 12 – Těleso barev prostoru L*a*b*
3.7.2 Převod z XYZ do L*a*b* Pro převod z prostoru XYZ do L*a*b* platí následující vztahy: pro Y/Yn > 0.008856 L = 116 * [(Y/Yn)^1/3] - 16 a = 500 * [(X/Xn)^1/3 - (Y/Yn)^1/3] b = 200 * [(Y/Yn)^1/3 - (Z/Zn)^1/3] pro Y/Yn ≤ 0.008856 L = 903,3 * (Y/Yn) a = 3893,5 * (X/Xn - Y/Yn) b = 1557,4 * (Y/Yn - Z/Zn)
Hodnoty Xn, Yn a Zn jsou hodnoty pro referenční bílý bod použitého osvětlení nebo pozorovatele. Případ Y/Yn ≤ 0,008856 charakterizuje nelinearitu oka při nízkém jasu a je možno ho při snímání kamerou , která obvykle nemá takovou citlivost na nízké úrovně jasu, zanedbat.32, 33
32 33
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.5. Boumphrey, F.: Color Space Conversions. Čl. 4.5.
-21-
3.7.3 Převod z L*a*b* do XYZ Podle předchozích vztahů pro převod z XYZ do L*a*b* je již poměrně snadné odvodit rovnice pro zpětný převod. Vezměme si případ, kdy pracujeme s obrazem zobrazovaným na monitoru. Nebereme tedy v potaz vlastnosti lidského oka a vypustíme zlomový bod Y/Yn ≤ 0,008856. pom = [(L + 16)/116]
{vyjádření zlomku [(Y/Yn)^3]}
X = [(a/500 + pom)^3] * Xn Y = [(pom)^3] * Yn Z = [(pom – b/200)^3] * Zn
3.8 Barevný prostor L*u*v* Barevný prostor L*u*v* (také nazývaný CIELUV, nebo jen Luv) je ve své podstatě totožný s barevným prostorem L*a*b*, přičemž u* odpovídá a* a v* odpovídá b*.
3.8.1 Převod z Yu'v' do L*u*v* Hodnoty souřadnic můžeme odvodit ze souřadnic prostoru Yu'v' podle následujících vztahů: L = 116 * [(Y/Yn)^1/3] – 16
pro Y/Yn > 0.008856
L = 903.3 * (Y/Yn)
pro Y/Yn ≤ 0.008856
u = (13 * L) * (u' - u'n) v = (13 * L) * (v' - v'n)
Hodnoty u'n a v'n jsou souřadnice pro referenční bílý bod použitého osvětlení nebo pozorovatele.34, 35
3.9 Barevný prostor L*C*h° Tento barevný prostor je označován jako CIELCH, nebo také LCh. Systém je stejný jako CIELAB, pouze místo pravoúhlých souřadnic pro určení bodu v barevném prostoru používá cylindrické souřadnice, tzn. barevný bod je určen úsečkou a úhlem. 34 35
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 3.6. Boumphrey, F.: Color Space Conversions. Čl. 4.4.
-22-
Hodnota L* odpovídá opět jasu v rozsahu od 0 (černá) do 100 (bílá), C* je Chroma (sytost) vyjádřena vzdáleností od neutrální osy a h° je úhel barevného odstínu (od 0 do 360 stupňů). Hodnota + a* = 0° , + b* = 90° , − a* = 180° a − b* = 270° .
3.9.1 Převod z L*a*b* do L*C*h° Vztah mezi L*a*b* a L*C*h° je dán rovnicemi: L = L C = [(a)2 + (b)2]1/2 h = arctan(±b/±a), resp. h = arctan(±a/±b)
Stupnice L*C*h° je výhodnější oproti polárním barevným prostorům, protože nabízí jednodušší návaznost na dřívější systémy, které jsou založeny na fyzických vzorcích jako je např. Munsellův.
3.9.2 Převod z L*C*h° do L*a*b* L = L a = C/[(tan(h))2 + 1]1/2 2
pro h ≤ 90 nebo h ≥ 270° 1/2
a = (-C)/[(tan(h)) + 1] 2
2 1/2
b = [(C) - (a) ] 2
2 1/2
b = -[(C) - (a) ]
pro 90° < h < 270° pro h ≤ 180° pro h > 180°
V praxi se můžeme setkat i s jinými barevnými prostory, než jsou výše uvedené. Takovým je například i Hunter Lab, používaný zejména v USA. Barvu je možno specifikovat určením poměru standardních (nebo tajných) barviv, které mohou být míchány k vytvoření potřebné barvy. Tento systému používá kupříkladu Pantone. Ačkoliv je rozšířený, je chráněn vlastnickými právy a převod do CIE není pro veřejnost dostupný.36
36
Hrbáček, L.: Barva v předtiskové přípravě 2.
-23-
Obr. 13 – Barevný prostor LCh37
37
Hrbáček, L.: Barva v předtiskové přípravě 2.
-24-
4 Rušení barevných obrazů Rušením obrazu rozumíme průchod obrazu nějakým systémem a následné zkreslení obrazu. Tím vznikají tzv. „šumy“.
4.1 Dělení šumů Šumy můžeme rozdělit do dvou základních skupin. Chtěné a nechtěné šumy.
4.1.1 Chtěné šumy Chtěné šumy jsou takové šumy, které jsou vytvářeny záměrně, za nějakým účelem. Nejčastějším důvodem je tvorba textur na povrchu těles. Tento způsob využívá tzv. „Procedurální texturování“. Základem procedurálních textur je tzv. „šumová funkce“. Ta byla poprvé popsána Perlinem v roce 1985. Tehdy stanovil základní požadavky, které by měla šumová funkce splňovat. 1. Funkce musí být statisticky invariantní vzhledem k otáčení. 2. Funkce musí být statisticky invariantní vzhledem k posunutí. 3. Fourierův obraz funkce musí mít ostré frekvenční spektrum. Mezi základní šumové funkce patří Perlinova funkce. Ta spočívá v naplnění trojrozměrné matice [i, j, k] náhodnými čísly, která splňují výše uvedená kritéria kladená na šumovou funkci. Při tvorbě této matice je nejdůležitějším kritériem vzájemná nezávislost náhodných čísel. Pro praktické aplikace obyčejně stačí tuto matici naplnit pseudonáhodnými čísly, které například v jazyce C poskytuje funkce rand(), v jazyce Pascal je to podobná funkce random(). Z takto definované matice obdržíme hodnotu funkce v libovolném bodě interpolací předpočítaných hodnot. Podle způsobu funkce potom hovoříme o lineární šumové funkci, bikubické či B-spline šumové funkci.38
38
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 301-302.
-25-
Další často užívanou metodou je Skvrnový šum, který je vlastně analogií Perlinovy funkce. Podstatou této metody je získání šumu z n kopií jediné funkce (skvrny), která je náhodně posunutá a změřítkovaná. Označme tuto funkci f ( P) . Šumovou funkci v bodě P budeme označovat s ( P) a získáme ji takto: n
s ( P) = ∑ wi f ( P − Pi )
(4.1)
i =1
V tomto vztahu je wi koeficientem změny měřítka a Pi je posunutí i-té kopie funkce f (P) . Šumová funkce s (P) je tedy jednoznačně určena skvrnovou funkcí f (P) a n dvojicemi [Pi , wi ] . Ve srovnání s Perlinovou funkcí je tedy tato metoda daleko méně náročná na paměť.39
vstup: bod zadaný souřadnicemi x, y, z výstup: barva 1. Inicializuj generátor náhodných čísel hodnotou
q = 257 x. y.z mod 47 . 2. Nastav s na nulu. 3. pro i = 1 do n (n je počet vzorků funkce f). a. w = rand(); b. xp = rand(), yp = rand(), zp = rand(); c. s = s + wf(x - xp, y - yp, z - zp). 4. barva = s/n Algoritmus pro výpočet skvrnového šumu40
4.1.2 Šumy vzniklé nechtěně Šum jakožto nežádoucí změnu obrazu můžeme rozčlenit podle různých kriterií do skupin A. podle vzniku: a) 39 40
při snímání obrazu – vzniká díky optickým jevům (např. alias);
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 302-303. Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 303.
-26-
b) kvantovací šum – vzniká jako odchylky mezi přesnými hodnotami vzorků a
(nejbližšími) hodnotami, vyjádřitelnými čísly z dané množiny; díky současnému rozvoji výpočetní techniky je možno použít vyjádření vzorků s tak vysokou přesností, aby kvantovací šum byl zanedbatelný; c)
při přenosu;
d) při zpracování – vzniká například při zaokrouhlování;
B. podle závislosti na obrazu: a)
závislý – charakteristika šumu závisí na obraze;
b) nezávislý – šum na obraze nezávisí;
C. podle rozložení pravděpodobnosti: a)
bílý šum – šum, jehož pravděpodobnost výskytu je stejná pro všechny frekvence;
b) impulsní šum – šum, který má vysokou energii a krátké trvání; c)
Gaussův šum – má pravděpodobnost výskytu dánu Gaussovým rozdělením, tedy vztahem
(4.2)
f ( x) =
1
σ 2π
e
−
( x−µ )2 2σ 2
,
kde µ je střední hodnota tohoto rozložení a σ 2 je rozptyl.41
4.2 Jak se vypořádat se šumy Později se budeme zabývat zpracováním rušených barevných obrazů. Ačkoliv to není přímým cílem naší práce, je vhodné uvést zde alespoň teoreticky způsoby, jak se vypořádat s rušenými obrazy. Způsob odstranění šumu závisí na způsobu získání obrazu a na charakteristice šumu. Pokud máme k dispozici více exemplářů téhož obrazu, a není-li jejich zdroj zatížen systematickou chybou, je nejsnazším odstraněním šumu výpočet obrazu, ve kterém bude každý pixel průměrem nebo mediánem z pixelů ležících na stejných souřadnicích 41
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 5.4.
-27-
ve všech obrazech předlohy. To je dobré si uvědomit například při přenosu fotografie do počítače pomocí skeneru. Je užitečné udělat více kopií a do výsledného obrazu dát obraz, jehož pixely jsou získány jako medián či průměr ze všech vzorků. Ačkoliv nemusí být vždy snadné obrazy sesadit tak, aby si příslušné pixely navzájem odpovídaly. Případ, kdy máme k dispozici více exemplářů předlohy, není bohužel příliš častý. Obyčejně máme k dispozici pouze jediný obraz a odstraňujeme šum na základě charakteristiky okolí každého pixelu. V lepším případě známe charakteristiku šumu.42 Pracujeme-li se spojitým obrazem, je šum reprezentován vysokými frekvencemi ve Fourierově frekvenční oblasti. Ty mohou souviset s tzv. „aliasem“, který vzniká při získávání digitalizovaného obrazu, konkrétně při jeho vzorkování (viz.: Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Computer Press Praha, 1998. str. 12-21 nebo Sojka, E.: Digitální zpracování a analýza obrazů. VŠB-TU Ostrava, 2000, str. 3437). Alias lze odstranit, či spíše potlačit dvěma způsoby: 1. vzorkování s vyšší frekvencí, 2. stochastické vzorkování (převedení aliasu na šum). Oba způsoby jsou popsány v Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Computer Press Praha, 1998. str. 23-27. Zaměřme se spíše na odstranění šumu, což se provádí pomocí filtrů. Abychom si však mohli popsat základní metody filtrace šumu, je nutné se nejprve seznámit s pojmem „konvoluce“.
4.3 Konvoluce Konvoluci značíme operátorem ∗ , tedy v běžném zápisu je konvoluce dvou funkcí I ( x) ∗ h( x) a definujeme ji vztahem ∞
(4.3)
I ( x ) ∗ h( x ) =
∫ I (α )h( x − α )dα .
−∞
42
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 128.
-28-
Ovšem při práci s nespojitým obrazem se používá tzv. diskrétní konvoluce, která je diskrétní dvojrozměrnou podobou výše uvedeného integrálu (4.3) a má tvar (4.4)
I ′(m, n ) = I (m, n ) ∗ h(m, n ) =
M −1 N −1
∑∑ I (r , s )h((m − r ), (n − s )) r =0 s =0
V tomto případě je I (m, n) diskrétní obraz, se kterým pracujeme, h(m, n) je tzv. konvoluční jádro, nebo také konvoluční maska, hodnoty M a N jsou vlastně rozměry (v pixelech) obrazu I (m, n) , pro který platí, že m = {0,1, K , M − 1} a n = {0,1, K , N − 1} . Konvoluční jádro je funkce, kterou definujeme (obyčejně maticí) a která udává, jak se náš obraz bude pomocí konvoluce měnit. Zjednodušeně řečeno, význam konvoluce je následující. Máme vstupní obraz (funkci) I (m, n) a nějaké konvoluční jádro h(m, n) . Výstupní obraz I ′(m, n ) = I (m, n ) ∗ h(m, n ) získáme tak, že na každý bod funkce I (m, n) položíme konvoluční jádro h(m, n) a vypočítáme součet (4.4). Poté konvoluční jádro posuneme o jeden pixel vedle a výpočet opakujeme. Tento postup je základem naprosté většiny operací s diskrétním obrazem, například odstraňování šumu, detekce hran, vytlačení vzoru aj.
vstup: obraz I a filtr h výstup: obraz I’ Pro všechny pixely [m, n] v obraze I a filtr h proveď: 1. Vynuluj čítač s 2. pro m = 0,...,M-1 a n = 0,...,N-1 proveď s := s + I[r+m, s+n].h[m, n]. 3. Intenzitu pixelu v obraze I’ na pozici [m, n] nastav na hodnotu s. Algoritmus výpočtu diskrétní konvoluce
Konvolučnímu jádru h( x) se také říká okno (windowed function). Diskrétní konvoluci je totiž možno chápat tak, že na každý pixel položíme „okno“ filtrovací funkce, která určí, z jak veliké oblasti se vypočítá nová hodnota tohoto pixelu. Poté se toto okno -29-
posune dál a hodnota se vypočítá pro sousední pixel. Je zřejmé, že v praktické implementaci je zapotřebí mít k dispozici dvě matice. První matice reprezentuje původní obraz a do druhé se zapisuje výsledek konvoluce.43 Všimněme si ale, že při výpočtu konvoluce jsou požadovány i hodnoty vně obrazu
I (m, n) , konkrétně při výpočtu hodnot krajních pixelů, jejichž počet závisí na velikosti konvoluční masky. Tento problém se řeší několika způsoby. 1. hodnoty krajních pixelů se ponechají původní – neupravené, 2. hodnoty krajních pixelů se nastaví na zvolenou hodnotu (bílá, černá atp.) – vznik rámu, 3. předpokládáme existenci okolních pixelů mimo obraz I (m, n) se zvolenou hodnotou, 4. použijeme tzv. cyklickou konvoluci popsanou vztahem (4.5)
I ′(m, n ) = I (m, n ) ∗ h(m, n ) =
M −1 N −1
∑∑ I (r , s )h((m − r ) , (n − s ) ) , M
r =0 s =0
N
kde zápis ( p) q znamená p modulo q. Tím se zajistí periodicita signálu
I (m, n) .44
4.4 Odstranění šumu Na začátku této kapitoly jsme naznačili, že můžeme pracovat se šumy ve spojité oblasti, ale také v prostorové oblasti. Vzhledem k tomu, že pracujeme především s diskrétním obrazem, je pro nás důležitější filtrace v prostorové oblasti, nicméně se v této podkapitole zmíníme i o filtrech v oblasti spojité.
43 44
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 17. Sojka, E.: Digitální zpracování a analýza obrazů. Str. 12.
-30-
4.4.1 Filtry v prostorové oblasti Nejjednodušší filtrovací metody počítají hodnotu pixelu jako průměr z jeho okolí. Tím dochází k potlačení vysokých frekvencí (šumu) za současného rozmazání hran. Tato technika se nazývá obyčejné průměrování. Konvoluční jádro pro okolí 3 × 3 má tvar (4.6)
⎡1 / 9 1 / 9 1 / 9⎤ h = ⎢⎢1 / 9 1 / 9 1 / 9⎥⎥ . ⎢⎣1 / 9 1 / 9 1 / 9⎥⎦
Snížením vah směrem od středu získáme filtr, který potlačuje Gaussův šum (4.7)
⎡1 / 16 2 / 16 1 / 16 ⎤ h = ⎢⎢2 / 16 4 / 16 2 / 16⎥⎥ . ⎢⎣1 / 16 2 / 16 1 / 16 ⎥⎦
Jinou možností je použít techniku pracující na základě lokální statistiky (order statistics) pixelu. Příkladem je filtrace mediánem. Tato technika spočívá v nahrazení pixelu f (i, j ) hodnotou pixelu, který získáme jako medián z hodnot v jeho okolí. Připomeňme, že medián z určitých čísel získáme jako hodnotu ležící uprostřed seřazené posloupnosti. Okolí bodu, které se používá, nemusí být nutně obdélníkové, výhodné je použít okolí ve tvaru kříže. Tato metoda narušuje tenké čáry a ostré rohy, ale nerozmazává ostatní hrany.45
4.4.2 Filtry ve frekvenční oblasti Filtry pracující s obrazem získaným pomocí Fourierovy transformace vycházejí z faktu, že šum je v obraze reprezentován vysokými frekvencemi. Proto se používají obecně takové filtry, které jednoduše odřežou vysoké frekvence (dolno-propustný filtr). Je možné též použít filtry potlačující nežádoucí frekvence s určitou váhou. V obou případech dojde ve výsledku k rozmazání obrazu, obdobně jako u filtrace v prostorové oblasti.
45
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 128-130.
-31-
Ideální nízkofrekvenční filtr je popsán vztahem (4.8)
⎧⎪1K (u 2 + v 2 ) ≤ D 0 , H (u, v ) = ⎨ 2 2 ⎪⎩0K (u + v ) > D0
kde
(u
2
+ v2
)
označuje amplitudu frekvence. Všimněme si, že filtr nepropouští
frekvence vyšší než je hodnota D0 .46 Další filtry jsou popsány například v Sojka, E.: Digitální zpracování a analýza obrazů. VŠB-TU Ostrava, 2000. Při odstraňovaní šumu uvedenými způsoby dochází
k poškození hran, čar a rohů. Proto je nutné po zpracování šumu obraz ještě vylepšit zostřením.
4.5 Ostření obrazu Optické vylepšení obrazu ostřením využívá lokálních charakteristik okolí pixelu. Ostření obrazu využívá skutečnosti, že člověk snáze porozumí obrazu, ve kterém jsou výrazné hrany. Ostření obrazu je tedy založeno na detekci hran a označuje se také jako zvýraznění hran. Hrana (edge) je určena gradientem, tj. velikostí a směrem. Gradient je
určen vektorovým operátorem nabla, který je definován jako (4.9)
⎛ ∂f ( x, y ) ∂f ( x, y ) ⎞ ⎟ , ∇f ( x, y ) = ⎜⎜ ∂y ⎟⎠ ⎝ ∂x
a jeho velikost se spočítá podle známého vztahu 2
2
⎛ ∂f ( x, y ) ⎞ ⎛ ∂f ( x, y ) ⎞ ⎟⎟ . (4.10) ∇f ( x, y ) = ⎜ ⎟ + ⎜⎜ ⎝ ∂x ⎠ ⎝ ∂y ⎠
Označme s (i, j ) funkci, která reprezentuje velikost gradientu obrazu f v bodě [i, j ] . Obraz g (i, j ) získáme z obrazu f (i, j ) ostřením pomocí koeficientu c a vztahu (4.11) g (i, j ) = f (i, j ) + c ⋅ s (i, j ) .
46
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 130.
-32-
Funkce s (i, j ) vrací velikost gradientu a o její patřičný násobek se zvýší intenzita pixelu v odpovídajícím bodě. V digitálním obraze je ale určení gradientu
∇f (i, j )
nejednoznačné.47
4.5.1 Ostření obrazu v prostorové oblasti Nejjednodušší metodou určení velikosti gradientu pixelu je použití Robertsova operátoru, který používá ke svému výpočtu čtyř nejbližších sousedů pixelu a má tvar (4.12) ∇f (i, j ) = f (i, j ) − f (i + 1, j + 1) + f (i, j + 1) − f (i + 1, j ) . Vidíme, že výpočet je určením změny jasu ve směru hlavní a vedlejší diagonály. Výpočet rozdílu intenzity ve směru kolmém na souřadné osy systému používá Laplaceův operátor ∆ pro čtyřokolí. Jeho konvoluční jádro má tvar ⎡0 1 0 ⎤ (4.13) h = ⎢⎢1 − 4 1⎥⎥ ⎢⎣0 1 0⎥⎦
a varianta, jež používá k výpočtu velikosti gradientu hodnot z osmiokolí, má tvar ⎡1 1 1⎤ (4.15) h = ⎢⎢1 − 8 1⎥⎥ . ⎢⎣1 1 1⎥⎦
Hodnota, kterou tento operátor vrací po aplikaci ve vztahu (5.1), je druhou mocninou gradientu 2
2
⎛ ∂f (i, j ) ⎞ ⎛ ∂f (i, j ) ⎞ ⎟⎟ . (4.16) ∇ f (i, j ) = ∆f (i, j ) = ⎜ ⎟ + ⎜⎜ ⎝ ∂i ⎠ ⎝ ∂j ⎠ 2
Směrově orientovaný je Sobelův operátor, který aproximuje první derivaci. Existuje celkem v osmi variantách, které obdržíme postupnou rotací konvoluční masky kolem jejího středu ⎡1 0 − 1 ⎤ (4.17) h = ⎢⎢2 0 − 2⎥⎥ . ⎢⎣1 0 − 1 ⎥⎦ 47
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 130-131.
-33-
Poznamenejme, že operátory zvýrazňující hrany zvýrazňují všechny vysoké frekvence a jsou tedy citlivé i na šum. Méně citlivé jsou operátory pracující s větší konvoluční maskou, tedy i s větším okolím pixelu. Cenou za snížení citlivosti na šum je pochopitelně vyšší výpočetní složitost.48
4.5.2 Ostření obrazu ve frekvenční oblasti Pracuje na opačném principu, než filtry odstraňující šumy. Obraz získaný Fourierovou transformací zostříme totiž tak, že potlačíme nízké frekvence a zdůrazníme vysoké. Pro to slouží nejlépe horno-propustný filtr. Ideální vysokofrekvenční filtr je popsán vztahem ⎧⎪0K (u 2 + v 2 ) ≤ D 0 . (4.18) H (u, v ) = ⎨ 2 2 ⎪⎩1K (u + v ) > D0
Samozřejmě, že existuje ještě mnoho jiných filtrů, které jsou popsány například v Sojka, E.: Digitální zpracování a analýza obrazů. VŠB-TU Ostrava, 2000.49
48 49
Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 130-133. Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Str. 133.
-34-
5 Isolinie Podle slovníku cizích slov je „isolinie, izolinie – linie (čára) na mapě nebo v grafu spojující místa stejných hodnot dané veličiny (jinak též izokřivka, izočára).“ V našem případě půjde o jas, barevný tón a sytost dané barvy. Toho lze využít kupříkladu při rozeznávání tvaru těles na obrazu.
5.1 Isofoty Isofoty jsou čáry, které spojují body se stejným jasem. Pro barvy se stejným jasem platí vztah (5.1)
RC (R ) + GC (G ) + BC (B ) = Konst. ,
kde Konst. je konstanta. Množina barev se stejným jasem je určena průnikem tělesa barev a roviny rovnoběžné s jednotkovou rovinou. Uvažujme kameru s nestejnou citlivostí na základní barvy. Potom dostaneme pro barvy se stejným původním jasem rovnici (5.2)
k R ⋅ RC (R ) + k G ⋅ GC (G ) + k B ⋅ BC (B ) = Konst. ,
kde k R , k G , k B jsou citlivosti kamery na jednotlivé základní barvy. Stejnou úvahu jako pro kameru lze provést i pro lidské oko.50
50
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 4.2.
-35-
zelená
bílá černá
červená
rovina shodných jasů
modrá
Obr. 14 – Isofoty (body shodných jasů) v tělese barev
5.2 Isocolory Isocolory jsou čáry, které spojují body se stejným tónem barvy. Pokud označíme tón barvy H, musí pro všechny barvy se stejným tónem platit vztah (5.3)
H C = Konst.
Množina barev se stejným tónem je tvořena průnikem poloroviny ohraničené přímkou nepestrých barev (černá – bílá) a tělesem barev.51
51
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 4.3.
-36-
zelená
rovina shodných tónů
bílá černá
červená
modrá Obr. 15 – Isocolory (body shodných tónů) v tělese barev
5.3 Isovolumy Isovolumy jsou čáry se stejným obsahem dané barvy. Danou barvu můžeme vyjádřit r r jejím vektorem v dané = (Rdané , Gdané , Bdané ) . Každou barvu s vektorem vC = (RC , GC , BC ) můžeme vyjádřit ve tvaru r r r (5.4) vC = S ⋅ vdané + v p , r kde S je obsah barvy a v p je vektor barevné příměsi. Obsah dané barvy v barvě zkoumané je dán maximální hodnotou S , pro kterou rovnice
platí.
-37-
Množina barev se stejným obsahem dané barvy je dána povrchem průniku tělesa barev a tělesa barev posunutého o součin obsahu a vektoru dané barvy. Pokud vektor leží v jedné ze stěn, průnik s touto stěnou do množiny nepatří.52
zelená
černá
plocha se stejným obsahem dané barvy
červená
vektor obsahu dané barvy modrá Obr. 16 – Body se stejným obsahem dané barvy v tělese barev
52
Komzák, J.: Zpracování rušených obrazů ve vhodných soustavách a transformacích. Čl. 4.4.
-38-
6 Implementace programu V tuto chvíli víme již vše důležité pro to, abychom mohli vytvořit funkční program, který bude schopen zobrazit zadané obrazy, rušit je a transformovat do různých barevných soustav a vyznačovat body se stejným jasem, barevným tónem a obsahem dané barvy. Pro vytvoření takového programu jsme použili programovací jazyk Delphi. Základní funkce jsou popsány v následujících podkapitolách.
6.1 Zobrazení Základem pro práci s barevnými obrazy je jejich zobrazení v prostoru RGB, což je jediný způsob čitelný pro lidské oko, který podporuje většina dnešních monitorů a projektorů. Proto je zdrojový obraz načten na tzv. „plátno“ (canvas), což je objekt jazyka Delphi umožňující zobrazení a práci s obrazem (pro náš příklad používáme filtr umožňující práci pouze se soubory formátu *.bmp). Původní veze programu obsahovala pouze jedno plátno pro načtení a práci s obrazem. Ukázalo se však, že s rostoucím počtem funkcí programu rostla i nepřehlednost a špatná vypovídací schopnost výsledného obrazu. Původní obraz byl přepisován, transformován, nebylo možné porovnávat zdroj a výsledek. Proto jsme se rozhodli pro takové řešení, které umožní sledovat změny při práci s obrazem. Každý obraz je načten na samostatné plátno (maximální velikost bitmapy je omezena na 800 x 600 pixelů s ohledem na časovou náročnost při zpracování větších obrazů). Tento způsob je využit při načtení zdrojového obrazu a při vytváření zašuměných obrazů a jejich převodu do různých barevných soustav.
6.2 Transformace a šumy Máme tedy zdrojový obraz (bitmapu) zobrazený na prvním plátně. Přeskočme funkce ukládání a zavírání obrazu a přejděme rovnou k vytváření šumů v různých transformacích. Tato část programu sestává ze dvou důležitých celků: 1. transformace obrazu do různých barevných prostorů a jeho zpětné zobrazení v RGB, 2. zašumění obrazu ve zvoleném barevném prostoru. -39-
6.2.1 Transformace a vybrané barevné prostory Zobrazení zdrojového obrazu probíhá v prostoru RGB, je tedy výchozím prostorem pro další transformace. Z prostorů, které jsme si popsali ve 3. kapitole jsme zvolili tři další, pro které budeme vytvářet převodové funkce. Jsou to prostory XYZ, CIELAB a CIELCH. Jednotlivé převody budeme realizovat pomocí funkcí, které vychází ze vztahů mezi vybranými prostory (viz.: 3. kapitola). Pro převod z prostoru RGB do prostoru XYZ použijeme již známé postupy, které vnoříme do cyklu pro všechny body obrazu, jak je vidět na algoritmu funkce RGBtoXYZ. procedure RGBtoXYZ(); begin for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin X[x][y]:= (0.430574*R[x][y]+0.341550*G[x][y]+0.178325*B[x][y]); Y[x][y]:= (0.222015*R[x][y]+0.706655*G[x][y]+0.071330*B[x][y]); Z[x][y]:= (0.020183*R[x][y]+0.129553*G[x][y]+0.939180*B[x][y]); end; end;
Zobrazená funkce je samozřejmě zjednodušená. Pro přehlednost neuvádíme její úplnou podobu. Poznamenejme, že proměnné x a y reprezentují šířku a výšku obrazu a hodnoty OriginWidth
a OriginHeight označují rozměry zpracovávaného obrazu (podobně
tomu bude i u ostatních funkcí). Dvourozměrné řetězce R[x][y], G[x][y] a B[x][y] vyjadřují hodnoty červené, zelené a modré v pixelu na pozici xy. Obdobně tak X[x][y], Y[x][y]
a Z[x][y] jsou vypočítané souřadnice prostoru XYZ. Pro zpětný převod do
souřadnic RGB používáme funkci XYZtoRGB.
-40-
procedure XYZtoRGB(); begin for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin R[x][y]:=Round(3.063218937*X[x][y] - 1.393326323*Y[x][y] 0.475800751*Z[x][y]); G[x][y]:=Round(-0.969245011*X[x][y] + 1.875967806*Y[x][y] + 0.041555221*Z[x][y]); B[x][y]:=Round(0.067871601*X[x][y] - 0.228833399*Y[x][y] + 1.06925135*Z[x][y]); if R[x][y] < 0 then R[x][y] := 0; if G[x][y] < 0 then G[x][y] := 0; if B[x][y] < 0 then B[x][y] := 0; if R[x][y] > 255 then R[x][y] := 255; if G[x][y] > 255 then G[x][y] := 255; if B[x][y] > 255 then B[x][y] := 255; Child.Image1.Canvas.Pixels[x,y]:=RGB(R[x][y],G[x][y],B[x][y]); end; end;
Tato funkce mimo převodu ze souřadnic XYZ do RGB ještě ošetřuje případ, kdy výsledné souřadnice RGB neodpovídají intervalu, ve kterém jsou definovány. Může totiž dojít k chybám vzniklým zaokrouhlováním. Prostor RGB je totiž definován celými čísly, zatímco prostor XYZ používá čísla reálná (obdobně tak i CIELAB a CIELCH). Převod do prostoru CIELAB se provádí pomocí převodů přes XYZ. Procedura vykonávající převod z RGB do CIELAB nejprve zavolá funkci RGBtoXYZ, poté funkci XYZtoLAB, která je vytvořena opět na základě známých vztahů. procedure XYZtoLab(); begin // slunecni svetlo D65 X0:=94.811; Y0:=100.00; Z0:=107.305; for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin L[x][y]:=(116*power((Y[x][y]/Y0),(1/3))-16); A[x][y]:=(500*(power((X[x][y]/X0),(1/3))power((Y[x][y]/Y0),(1/3)))); B[x][y]:=(200*(power((Y[x][y]/Y0),(1/3))power((Z[x][y]/Z0),(1/3)))); end; end;
Díky těmto převodům získáme souřadnice prostou CIELAB. Ty pak můžeme převést zpět do prostoru RGB pomocí funkcí LABtoXYZ a XYZtoRGB. -41-
procedure LabtoXYZ(); var pom:real; begin // slunecni svetlo D65 X0 := 94.811; Y0 := 100.00; Z0 := 107.305; for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin pom:= ((L[x][y]+16)/116); Y[x][y]:= power(pom, 3) * Y0; X[x][y]:= power((A[x][y]/500 + pom),3) * X0; Z[x][y]:= power((pom - B[x][y]/200),3) * Z0; end; end;
Vzhledem k tomu, že převod mezi CIELAB a CIELCH je již velmi jednoduchý, provádí se transformace z RGB do CIELCH přes prostor CIELAB (tedy i přes XYZ), což platí i pro zpětnou transformaci z CIELCH do RGB. Využívají se funkce LABtoLCH a LCHtoLAB. procedure LabtoLch(); begin for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin if (A[x][y]<>0) then begin C[x][y]:=Sqrt(Sqr(A[x][y]) + Sqr(B[x][y])); H[x][y]:=Arctan2(B[x][y], A[x][y]); end else begin C[x][y]:=Sqrt(Sqr(B[x][y])); H[x][y]:= 0; end; end; end; procedure LchtoLab(); begin for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin A[x][y]:= C[x][y] * Cos(H[x][y]); B[x][y]:= C[x][y] * Sin(H[x][y]); end; end;
-42-
6.2.2 Šum ve zvoleném prostoru Chceme-li vytvořit obraz, který obsahuje nějaký šum, musíme nejdříve vědět, jaký druh šumu chceme generovat, jak je daný šum definován a v jakém barevném prostoru chceme obraz rušit. My se pokusíme simulovat základní druhy šumů, které mohou náš obraz rušit. Jsou to: •
bílý šum,
•
Gaussův šum,
•
impulsní šum.
Každý z nich je již popsán ve 4. kapitole věnované rušení barevných obrazů. Prakticky lze jejich implementaci do programu řešit několika různými způsoby. My se pokusíme získat takové výsledky zašumění, aby odpovídaly jednak klasickému šumu podle rovnoměrného nebo Gaussova rozložení (bílý a Gaussův šum) a jednak šumu, který vzniká jednorázově v jednotlivých pixelech na základě chyb v souboru bitmapy (impulsní šum). Uvidíme však, že výsledek rušení bude záležet i na daném prostoru, ve kterém budeme rušení provádět. Zaměřme se nejprve na výchozí prostor RGB. Chceme-li provést rušení obrazu bílým šumem, musíme mít nejprve načtené hodnoty RGB od každého pixelu, resp. alespoň od těch pixelů, u kterých hodláme provést rušení (to platí i pro Gaussův a impulsní šum). K tomu nám poslouží opět dvojrozměrné pole definované pro každou složku R[x][y], G[x][y]
a B[x][y]. Zároveň musíme zadat procento zašumění (NOISE), kterým určíme
míru rušení obrazu. Postup výpočtu bílého šumu je uveden v následujícím algoritmu.
-43-
procedure RGBnoise(); begin if sumdlg.OKBottomDlg.RadioButton1.Checked=true then begin for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin Rsum := Round((RandomRange(-255,255)*NOISE)/100); Gsum := Round((RandomRange(-255,255)*NOISE)/100); Bsum := Round((RandomRange(-255,255)*NOISE)/100); Rsum := R[x][y] + Rsum; if Rsum < 0 then Rsum := 0; if Rsum > 255 then Rsum := 255; Gsum := G[x][y] + Gsum; if Gsum < 0 then Gsum := 0; if Gsum > 255 then Gsum := 255; Bsum := B[x][y] + Bsum; if Bsum < 0 then Bsum := 0; if Bsum > 255 then Bsum := 255; Child.Image1.Canvas.Pixels[x, y] := RGB(Rsum, Gsum, Bsum); end; end;
Jak je patrné, tento algoritmus bude spuštěn pouze v případě, je-li zatrhnuto tlačítko RadioButton1,
tedy chceme-li spustit právě výpočet bílého šumu. Pro všechny body
zadaného obrazu se pak provede výpočet náhodného čísla v intervalu od -255 do 255, pro každou složku RGB zvlášť (používáme k tomu generátor náhodných čísel RandomRange(interval)
s rovnoměrným rozložením). Získané náhodné číslo je
násobeno procentem zašumění. Výsledek pak přičteme k příslušné složce každého pixelu a ošetříme případy, kdy vypočtené hodnoty přesahují interval definovaný pro danou složku. Poté upravený pixel zobrazíme na plátno. Obdobně můžeme provést generování bílého šumu v ostatních prostorech. Musíme si však uvědomit, že každý prostor má jiné souřadnice, tedy i jiný rozsah pro každou složku. Z převodů, které používáme v programu pro transformaci, můžeme odvodit celkem jednoduše jednotlivé intervaly. Jediným rozdílem pak bude to, že výsledné šumy nebude třeba zaokrouhlovat, jako tomu bylo v prostoru RGB. Gaussův šum získáme stejným způsobem, jako šum bílý. Použijeme však jinou funkci, která je též součástí jazyka Delphi a která generuje náhodná čísla s Gaussovým -44-
rozložením. Je to funkce RandG(střední hodnota, rozptyl). Za střední hodnotu bereme nejnižší číslo intervalu, pro který je daná barevná složka definována (v našem případě pro RGB je to nula). Rozptyl si určíme v dialogovém okénku při zadávání vlastností šumu (obdobně, jako při zadávání procenta zašumění). Celý algoritmus pak vypadá takto: if sumdlg.OKBottomDlg.RadioButton2.Checked=true then begin dev:=StrToInt(sumdlg.OKBottomDlg.Edit1.Text); for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin Rsum := Round((RandG(0,dev)*NOISE)/100); Gsum := Round((RandG(0,dev)*NOISE)/100); Bsum := Round((RandG(0,dev)*NOISE)/100); Rsum := R[x][y] + Rsum; if Rsum < 0 then Rsum := 0; if Rsum > 255 then Rsum := 255; Gsum := G[x][y] + Gsum; if Gsum < 0 then Gsum := 0; if Gsum > 255 then Gsum := 255; Bsum := B[x][y] + Bsum; if Bsum < 0 then Bsum := 0; if Bsum > 255 then Bsum := 255; Child.Image1.Canvas.Pixels[x, y] := RGB(Rsum, Gsum, Bsum); end; end;
Vidíme, že algoritmus navazuje na předchozí část zdrojového kódu. RadioButton2 nám představuje volbu Gaussova šumu, do proměnné dev je uložena hodnota požadovaného rozptylu. Ostatní části algoritmu jsou analogií předchozího. Stejně tak i generování Gaussova šumu pro jiné prostory provádíme podobně, jako tomu bylo u bílého šumu. Posledním šumem, který chceme simulovat, je impulsní šum. Vzhledem k tomu, že se vyskytuje pouze u některých, náhodných pixelů, a jeho hodnota nezávisí na původní hodnotě daného bodu, můžeme šum generovat pomocí následujícího algoritmu.
-45-
if sumdlg.OKBottomDlg.RadioButton3.Checked=true then begin pixelu:=round((OriginWidth*OriginHeight*NOISE)/100); for zasumeni:=0 to pixelu do begin Rsum := Round(Random(255)); Gsum := Round(Random(255)); Bsum := Round(Random(255)); Child.Image1.Canvas.Pixels[random(OriginWidth), random(OriginHeight)] := RGB(Rsum,Gsum,Bsum); end; end; end;
Tento algoritmus zároveň ukončuje triádu algoritmů pro výpočet šumu v prostoru RGB. Volba RadioButton3 reprezentuje impulsní šum. Pro zvolené procento zašumění (míra pokrytí plochy obrazu šumem) vypočteme počet pixelů, které chceme zašumět (pixelu). Použijeme jednoduchou rovnici, kdy šířku násobíme výškou obrázku, získáme celkové množství pixelů a to násobíme zvoleným procentem. Pro tento počet pixelů opakujeme cyklus, kdy určíme náhodně jakoukoliv hodnotu z intervalu 0 až 255 pro každou ze složek RGB, určíme náhodnou pozici pixelu a přiřadíme mu získaný šum. Stejným způsobem můžeme provést zašumění v prostorech XYZ, CIELAB i CIELCH. Nesmíme však zapomenout změnit rozsah intervalů pro dané souřadnice.
6.3 Odstranění šumu Pod pojmem „zpracování rušených barevných obrazů“ si můžeme představit různé operace týkající se práce s obrazem. Pokud se však jedná o rušený barevný obraz, nebude vhodné zaměřit se především na filtraci šumu? Porovnejme výsledky, které získáme zpracováním rušeného obrazu, a výsledky, které nám poskytne obraz nejprve rušený a poté filtrovaný. Tím získáme i odpověď na naši otázku. Pokusme se tedy implementovat do našeho programu nějaký filtr, kterým je možno potlačit šum. Ze 4. kapitoly víme, že jednou ze základních metod potlačování šumu je použití konvoluce a vhodné konvoluční masky. Také víme, že existují dvě základní masky velikosti 3x3:
-46-
⎡1 / 9 1 / 9 1 / 9⎤ 1. maska pro obyčejné průměrování = ⎢⎢1 / 9 1 / 9 1 / 9⎥⎥ , ⎢⎣1 / 9 1 / 9 1 / 9⎥⎦
⎡1 / 16 2 / 16 1 / 16 ⎤ 2. maska pro potlačení Gaussova šumu = ⎢⎢2 / 16 4 / 16 2 / 16⎥⎥ . ⎢⎣1 / 16 2 / 16 1 / 16 ⎥⎦ Obě tyto masky můžeme zcela jednoduše implementovat do devíti editačních polí v dialogovém oknu. Navíc ponecháme i možnost měnit hodnoty v editačních polích masky pro případ, kdy budeme chtít testovat vlastní nastavení filtru. Samotná konvoluce pak probíhá podle algoritmu uvedeného v kapitole 4.3. Do proměnných a1 až a9 načteme hodnoty z konvoluční masky, ve dvojitém cyklu načteme hodnoty RGB z aktuálního obrazu. Dále pro celý obraz, kromě jeho okrajových pixelů, provádíme samotnou konvoluci a do nových proměnných R1, R2 a R3 ukládáme její výsledek pro každou složku. Nyní jsme již schopni poskládat filtrovaný obraz, který uložíme na nově vytvořené plátno. Implementace celé konvoluce je znázorněna v následujícím algoritmu.
-47-
procedure filtering(); var Child: TMDIChild; begin a1:=StrToInt(filtrdlg.OKBottomDlg4.Edit1.Text); a2:=StrToInt(filtrdlg.OKBottomDlg4.Edit2.Text); a3:=StrToInt(filtrdlg.OKBottomDlg4.Edit3.Text); a4:=StrToInt(filtrdlg.OKBottomDlg4.Edit4.Text); a5:=StrToInt(filtrdlg.OKBottomDlg4.Edit5.Text); a6:=StrToInt(filtrdlg.OKBottomDlg4.Edit6.Text); a7:=StrToInt(filtrdlg.OKBottomDlg4.Edit7.Text); a8:=StrToInt(filtrdlg.OKBottomDlg4.Edit8.Text); a9:=StrToInt(filtrdlg.OKBottomDlg4.Edit9.Text); for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin R[x][y]:=GetRValue(Image1.Canvas.Pixels[x, y]); G[x][y]:=GetGValue(Image1.Canvas.Pixels[x, y]); B[x][y]:=GetBValue(Image1.Canvas.Pixels[x, y]); end; for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin if (x=0) or (y=0) or (x=OriginWidth) or (y=OriginHeight) then begin Child.Image1.Canvas.Pixels[x, y]:= RGB(R[x][y], G[x][y], B[x][y]); end else begin R1:=round(1/(a1+a2+a3+a4+a5+a6+a7+a8+a9) *((a1*R[x-1][y-1])+(a2*R[x-1][y])+(a3*R[x-1][y+1]) +(a4*R[x][y-1])+(a5*R[x][y])+(a6*R[x][y+1]) +(a7*R[x+1][y-1])+(a8*R[x+1][y])+(a9*R[x+1][y+1]))); G1:=round(1/(a1+a2+a3+a4+a5+a6+a7+a8+a9) *((a1*G[x-1][y-1])+(a2*G[x-1][y])+(a3*G[x-1][y+1]) +(a4*G[x][y-1])+(a5*G[x][y])+(a6*G[x][y+1]) +(a7*G[x+1][y-1])+(a8*G[x+1][y])+(a9*G[x+1][y+1]))); B1:=round(1/(a1+a2+a3+a4+a5+a6+a7+a8+a9) *((a1*B[x-1][y-1])+(a2*B[x-1][y])+(a3*B[x-1][y+1]) +(a4*B[x][y-1])+(a5*B[x][y])+(a6*B[x][y+1]) +(a7*B[x+1][y-1])+(a8*B[x+1][y])+(a9*B[x+1][y+1]))); Child.Image1.Canvas.Pixels[x, y]:= RGB(R1, G1, B1); end; end; end;
6.4 Vyznačení isolinií V této podkapitole se budeme zabývat problémem, jak programově vyřešit vyznačení jednotlivých isolinií. Podle zadání máme zobrazovat „čáry se stejným jasem, barevným tónem nebo sytostí“. Postupujme tedy podle následující úvahy:
-48-
1. je nutné nějakým způsobem zadat hodnotu jasu, tónu nebo sytosti, které hodláme vyznačovat, 2. musíme projít celý obraz a najít pixely s danou hodnotou jasu, tónu nebo sytosti, 3. nalezené pixely zvýrazníme. Ovšem již u prvního bodu narazíme na problém. Jakým způsobem budeme zadávat požadované hodnoty? Existuje několik možností. Můžeme zadávat intervaly, ve kterých se zvolené hodnoty pohybují, lze též ručně zadat přesnou hodnotu, kterou chceme zobrazit. Nicméně, v obou případech nemusí požadovaná hodnota odpovídat žádné z hodnot na zpracovávaném obrazu. Tím se dostaneme do bludnému kruhu „pokus – omyl“. Tento problém lze vyřešit zcela jednoduše. Pomůže nám k tomu obraz, který chceme zpracovávat. Prostým kliknutím myši kamkoliv do obrazu určíme bod, který nám bude sloužit jako výchozí pro zadání hodnot. Z tohoto řídícího bodu získáme nejen informace o barvě v podobě trojice RGB, ale díky rovnicím pro vyjádření barevného prostoru HSI i hodnoty tónu, sytosti a jasu (Hue, Saturation, Intensity). U druhého kroku naší úvahy se zamysleme, zda je opravdu nutné, abychom procházeli celý obraz? Odpověď zní: „ano, pokud chceme vyznačit všechny pixely v obrazu, které mají stejnou hledanou hodnotu,“ a „ne, pokud chceme vyznačit pouze isolinii příslušnou k označenému bodu.“ Pokud vyznačujeme všechny pixely, je logické, že projdeme celý obraz a porovnáme hledané hodnoty, jak je patrné z následujícího algoritmu pro porovnávání jasu. if jasdlg.OKBottomDlg1.RadioButton1.Checked = true then begin for x:=0 to OriginWidth do for y:=0 to OriginHeight do begin R:=GetRValue(Image1.Canvas.Pixels[x, y]); G:=GetGValue(Image1.Canvas.Pixels[x, y]); B:=GetBValue(Image1.Canvas.Pixels[x, y]); Jas:=(0.299*R + 0.587*G + 0.114*B); if (Jas >= minC) and (Jas <= maxC) then begin Image1.Canvas.Pixels[x, y] := RGB(255,0,0); end; end; end;
-49-
Volba RadioButton1 zde značí volbu pro zvýraznění všech pixelů v obrazu. V cyklu získáváme jednotlivé hodnoty R, G a B, ze kterých pak vypočítáme jas. Proměnné minC a maxC jsou dolní a horní hranice tolerance, kterou můžeme nastavit při určování shodnosti jasu aktuálního pixelu s jasem vybraným. Pokud jas splňuje podmínku shodnosti, je pixel označen (červenou barvou v případě jasu, zelenou v případě tónu a modrou v případě sytosti). Máme však i druhou možnost. Vyznačit pouze pixely náležící k isolinii u příslušného bodu. Toho lze dosáhnout pomocí rekurzivního volání funkce porovnávající zvolený bod s pixely z jeho okolí (postačí čtyřokolí). function rekurzeJas(x, y: integer):Integer; begin If (x<0) or (x>OriginWidth) or (y<0) or (y>OriginHeight) then exit; Jas:=(0.299*GetRValue(Image1.Canvas.Pixels[x, y]) + 0.587*GetGValue(Image1.Canvas.Pixels[x, y]) + 0.114*GetBValue(Image1.Canvas.Pixels[x, y])); If (Jas >= minC) and (Jas <= maxC) then begin Image1.Canvas.Pixels[x, y] := RGB(255,0,0); rekurzeJas(x-1,y); rekurzeJas(x+1,y); rekurzeJas(x,y-1); rekurzeJas(x,y+1); end; end;
Parametry x a y v tomto případě určují polohu zvoleného pixelu a jsou předávány funkci jakožto výchozí bod. Pokud testovaný bod neleží mimo hranici obrazu, provedeme výpočet jasu a následné porovnání náležitosti k isolinii. Je-li tato potvrzena, testovaný bod je označen a započne rekurze, kdy funkce volá sebe samu s novými parametry.
-50-
7 Uživatelská příručka V předchozí kapitole jsme si stručně popsali způsob implementace programu. Podívejme se na jednotlivé jeho funkce zblízka.
7.1 Instalace, spuštění Program je součástí diplomové práce a nalezneme jej na přiloženém CD, stejně jako jeho zdrojové kódy. Není třeba nic instalovat. Stačí zkopírovat adresář „Program“ na zvolené místo v počítači. Tento adresář obsahuje dva základní soubory – program a nápovědu. Spouštění programu se provádí pomocí souboru „isolinie.exe“, který je funkční pod jakoukoliv verzí operačního systému Windows. Po spuštění se zobrazí hlavní okno programu, které sestává ze čtyř částí (Obr. 17). Od shora dolů to jsou: 1. ovládací panel s hlavní nabídkou (menu), 2. panel s tlačítky rychlé volby, 3. zobrazovací plocha, na které budou zobrazena jednotlivá plátna s obrazy, 4. stavový řádek s jednoduchou nápovědou a informacemi o vybraném řídícím bodu.
-51-
Obr. 17 – Hlavní okno programu
7.2 Ovládání Ovládací panel s hlavní nabídkou obsahuje veškeré funkce programu. Ty jsou integrovány podle vlastností do jednotlivých skupin.
7.2.1 File Skupina File obsahuje funkce potřebné pro práci se soubory. Umožňuje nám otevřít soubor *.bmp (Open). Ten bude zobrazen v novém okně na zobrazovací ploše programu (Obr. 18). Zavřít zvolené okno se souborem můžeme pomocí volby Close, tlačítkem Save uložíme obraz z aktivního okna do vybraného souboru ve formátu *.bmp. Volbou Exit ukončíme běh celého programu.
-52-
Obr. 18 – Otevřený soubor s obrazem
7.2.2 Window V této nabídce můžeme zvolit způsob zobrazení pro případ, že máme otevřených více oken. Máme na výběr z možností kaskádového uspořádání, horizontálního a vertikálního. Navíc můžeme všechna okna najednou minimalizovat. K dispozici je i přehled otevřených oken, z něhož si můžeme zvolit to, které chceme zobrazit.
7.2.3 Noise in Nyní se dostáváme k nosné části programu. V nabídce Noise in můžeme zvolit barevnou transformaci, ve které hodláme vybraný obraz rušit. Máme na výběr ze čtyř možností – RGB, XYZ, Lab a Lch. Při jakékoliv z voleb se zobrazí dialogové okno, ve kterém nastavíme míru a způsob šumu (Obr. 19). -53-
Obr. 19 – Dialogové okno pro nastavení šumu
Jak je patrné z obrázku, míru zašumění nastavujeme pomocí posuvné stupnice od 0 do 100 %. To platí pro bílý šum a impulsní šum. Gaussův šum je nastaven hodnotou rozptylu (Deviation). Stisknutím tlačítka OK spustíme zvolenou transformaci a rušení obrazu. Výsledek je pak zobrazen do nového okna v hlavním panelu programu.
7.2.4 Filtering Tuto nabídku zvolíme, chceme-li se pokusit filtrovat rušený obraz. Nabízí nám pouze jedinou funkci – filtrování. Máme-li vybraný obraz pro filtraci, zobrazí se jednoduché dialogové okno pro nastavení filtrační masky (Obr. 20). V něm si můžeme zvolit ze tří možností: 1. obyčejné průměrování (Simple averaging), 2. filtr na potlačení Gaussova šumu (Gauss-filter), 3. individuální filtr (Individual filter), jehož hodnoty můžeme nastavit podle vlastní potřeby (v rozmezí celých čísel od 0 do 9). Stisknutím tlačítka OK spustíme konvoluci, která provede filtraci zvoleného obrazu.
-54-
Obr. 20 – Dialogové okno pro nastavení filtrace
7.2.5 Isolinies Nabídka Isolinies umožňuje vybrat si jednu ze tří funkcí pro zobrazení pixelů 1. se stejným barevným tónem – Isocolor, 2. se stejným barevným odstínem (sytostí) – Isovolume, 3. se stejným jasem – Isofot. Podle zvolené isolinie se spustí odpovídající dialogové okno (Obr. 21), které nám umožní nastavit parametry hledané isolinie. Pokud jsme již před spuštěním této funkce určili řídící bod, jsou jeho parametry přednastaveny v dialogovém oknu. Každá z isolinií má jiný rozsah svých hodnot. Ten je vyjádřen posuvnou stupnicí. Pro barevný tón je stupnice od 0 do 360 stupňů, pro sytost 0 až 100 procent a u jasu máme rozsah 0 až 255 stupňů, nebo také úrovní (level). U každé isolinie můžeme zvolit také toleranci (odchylku) od zadané hodnoty až o 20 jednotek (podle zvolené stupnice). Ještě než spustíme algoritmus vyznačení isolinie (opět tlačítkem OK), rozhodneme se, zda chceme vyznačit všechny pixely odpovídající určené hodnotě (volba All pixels), nebo pouze isolinii příslušnou ke zvolenému řídícímu bodu (volba Isolinie). Pokud si -55-
zvolíme druhou možnost, je nutné zadat navíc maximální množství iterací, které program provede (rekurzivní volání funkce pro vyznačení isolinie). Doporučujeme zadávat nejdříve nižší hodnoty. Při velikém množství iterací totiž dochází k přetečení zásobníku a k násilnému ukončení programu. Tato volba závisí tedy nejen na vlastnostech obrazu, ale i na výkonu počítače. Podle zvolené isolinie budou body označeny zeleně (isovolume), modře (isocolor) a nebo červeně (isofot).
Obr. 21 – Dialogové okno pro nastavení hledané isolinie
7.2.6 Help Jako každý program, obsahuje i ten náš alespoň stručnou nápovědu Help. Za volbou About se skrývají základní informace týkající se programu a jeho vzniku. Nabídka Help
je v českém jazyce.
7.3 Rychlé volby Panel s tlačítky rychlé volby je umístěn hned pod hlavním panelem. Obsahuje tlačítka, jimiž lze spouštět nejdůležitější funkce programu (Obr. 22). Zleva to jsou volby pro otevření souboru, uložení souboru a kaskádové, horizontální nebo vertikální uspořádání oken. Dále to jsou šumy v barevných soustavách RGB, XYZ, Lab a Lch. Další volbou
-56-
je filtrace šumu pomocí konvoluce a nakonec funkce pro vyznačení isocolor, isovolum a isofot. Těmito tlačítky spouštíme stejné funkce, jako z hlavního panelu.
Obr. 22 – Panel s tlačítky rychlé volby
7.4 Zobrazení souborů a výsledků Zobrazování načtených souborů a výsledků zpracování obrazu se provádí v hlavním okně v jeho zobrazovací části. Tam jsou umístěna všechna otevřená okna s obrazy. Program povoluje jejich uspořádání nejen podle předvoleb, ale i podle našeho vlastního přání. Okna můžeme libovolně přesouvat po zobrazovací ploše, měnit jejich velikost, minimalizovat, maximalizovat a samozřejmě i zavírat. Každé okno je vybaveno horizontálním i vertikálním posuvníkem pro možnost posouvání po obrazu, je-li tento větší, než okno.
7.5 Stavový řádek Poslední částí programu je stavový řádek, který nás informuje o aktuálním stavu programu (Obr. 23). V prvním oddílu se zobrazuje nápověda k příslušné vybírané akci. Další dvě pole obsahují informace o pozici zvoleného řídícího bodu (souřadnice X a Y), na ně navazují informace o barevném tónu, sytosti a jasu zvoleného bodu a jako poslední je vyobrazeno trojčíslí hodnot červené, zelené a modré (podle barevného modelu RGB).
Obr. 23 – Stavový řádek
-57-
8 Výsledky 8.1 Transformace mezi prostory Vytvořený program je schopen převádět téměř bezchybně obraz mezi prostory RGB, XYZ, CIELAB a CIELUV. Ke drobným chybám dochází pouze při zpětném zobrazení do prostoru RGB. Tyto vady v obraze vznikají při převodu z prostoru XYZ do prostoru RGB. Hodnoty ze soustavy XYZ, které jsou v reálných číslech, musí být po převodu zaokrouhleny na celá čísla, neboť soustava RGB je definována intervaly v celých kladných číslech. Tyto drobné odchylky jsou (až na výjimky) pouhým okem nepostřehnutelné.
8.2 Generování šumu Generování šumu v prostoru RGB zcela odpovídá definovaným vlastnostem šumu. Pokud ale provedeme stejný proces rušení v jiném prostoru, získáme při zobrazení v RGB zcela jiné výsledky. Naprosto se mění barevné složení obrazu, tedy i hodnoty jasu, tónu a sytosti. Porovnáním 10 % bílého šumu v prostoru RGB a toho samého šumu v CIELCH (Obr. 24) si můžeme udělat vlastní představu o odlišnosti rušení obrazů v různých soustavách. Obdobně tomu je i u Gaussova šumu (Obr. 25). Jediným šumem, který si zachovává podobné vlastnosti ve všech transformacích, bez ohledu na míru zašumění, je impulsní šum (Obr. 26). Tato skutečnost má vliv i na další zpracování obrazu.
-58-
Obr. 24 – 10 % bílý šum v RGB (vlevo) a v Lch (vpravo)
Obr. 25 – Gaussův šum s rozptylem 50 bodů v RGB (vlevo) a v Lch (vpravo)
Obr. 26 – 10 % impulsní šum v RGB (vlevo) a v Lch (vpravo)
-59-
8.3 Filtrace šumu Metoda, kterou používáme pro potlačení šumu, je jedna ze základních. Dokáže zmírnit všechny šumy generované programem v prostoru RGB. Pokud ovšem máme obraz zobrazený v RGB, ale rušený v jiném prostoru, je charakteristika šumu v RGB zcela odlišná. Tím pádem je používaná metoda pro potlačení šumu ve většině případů zcela neúčinná. Jediný šum, jehož charakteristika se nemění v žádném prostoru, je impulsní šum. Ten je však i při malém procentu zašumění znatelný i po filtraci. To je způsobeno tím, že používaná filtrační metoda nepodporuje filtraci impulsního šumu.
8.4 Vyznačení isolinií Program je schopen vyznačit body obrazu s požadovanou hodnotou jasu, barevného tónu nebo barevné sytosti. Umožňuje snadné zadání požadovaných hodnot a zřetelné zobrazení výsledků. Ačkoliv se neustále bavíme o vyznačování isolinií, nemají tyto u běžných obrazů (fotografie atp.) s liniemi, či čarami téměř nic společného. Převážně jde o pouhé shluky pixelů. Podobnost s linií vzniká pouze při vyšší toleranci na určení příslušnosti k dané isolinii, nebo při dostatečně „čistém“ obrazu s jasnými barvami a zřetelnými, plynulými přechody mezi barvami a jejich odstíny. Samozřejmě, že vliv na spojitost isolinií má i míra zašumění obrazu. Na následujících obrázcích je patrné, že vyznačení isofotů stejného stupně se liší i podle toho, zda byl obraz pouze rušen, nebo i filtrován. Při jasném obrazu tvoří pixely se stejným jasem úhledný prstenec (Obr. 27). Pokud ale obraz zašumíme například 10 % bílým šumem a pokusíme se zobrazit tytéž isofoty, získáme jen těžko znatelné roztroušené pixely (Obr. 28). Zkusíme-li však rušený obraz nejdříve filtrovat a pak teprve spustíme funkci pro vyznačení isofotů, výsledek nás může do jisté míry překvapit (Obr. 29).
-60-
Obr. 27 – Isofoty v původním obrazu
Obr. 28 – Isofoty v obrazu rušeném 10 % bílým šumem
-61-
Obr. 29 – Isofoty v obrazu rušeném a následně filtrovaném
Z toho vyplývá i odpověď na otázku, kterou jsme si položili v podkapitole 6.3. Funkce pro potlačení šumu je určitě vhodným způsobem, jak zpracovávat některé rušené obrazy.
-62-
Závěr Cílem naší práce bylo provést analýzu základních metod zabývajících se rušenými barevnými obrazy a uvedení nejznámějších používaných barevných prostorů a jejich vzájemných transformací. Na základě provedené analýzy jsme měli vytvořit program, který umožní generovat různé druhy šumu v různých barevných prostorech a v získaném obrazu rozpoznat body, které náleží zvolené isolinii. Všechny stanovené cíle byly dosaženy. Do programu jsme navíc přidali možnost filtrovat rušený barevný obraz. Vytvořený program umožňuje velmi snadné interaktivní nastavení požadovaných hodnot. Výhodou je i možnost vyznačení všech bodů z obrazu příslušných k dané isolinii, nikoliv jen ze zvoleného okolí. Při porovnání s existujícím programem, který je součástí podobného výzkumu (autor: J. Komzák), jsme vytvořili příjemnější uživatelské prostředí a díky možnosti filtrace šumu dosahujeme i lepšího zobrazení isolinií při stejné míře rušení. Získané výsledky je možné aplikovat v mnoha vědních oborech pracujících s barevnými obrazy. Především se jedná o zpracování obrazů v medicíně, geografii a topografii. Určitý přínos má naše práce i pro informatiku, zejména pro počítačovou grafiku. Uvádíme přehled základních barevných prostorů a vztahů mezi nimi. Jeden z dosažených výsledků je účinný algoritmus na vyznačování isolinií. Problémem zůstává filtrování šumů, které vznikly v jiných barevných prostorech, než je prostor RGB, jelikož to nebylo přímo naším cílem. Mohlo by to však být motivací k dalšímu výzkumu, neboť jde o problematiku stále aktuální.
-63-
Literatura 1. Boumphrey, F.: Color Space Conversions. University of Westminster 2003. (staženo z http://www.hypermedic.com/color/colorspaceconversions.php) 2. Druckmüller, M.: Adaptivní numerické metody zpracování obrazů. Brno, VUT 2001. (staženo z http://www.vutbr.cz/nakl/habilit/Druckmuller.pdf) 3. DTP studio: Rychlokurz barevného DTP. DTP STUDIO s.r.o., 2000. (staženo z http://www.dtpstudio.cz/obchod/Gretag/rychlokurz.html) 4. Friedmannová, L.: Transformace tématických mapových děl z analogové formy do formy digitální. Brno, 2000. (staženo
z http://www.geogr.muni.cz/dep/pgs/lucie/phd/cast1.htm) 5. Hrbáček, L.: Barva v předtiskové přípravě. Brno, 1999. (staženo z http://www.megaprint.cz/obecne/pruvodci/cms.htm) 6. Hrbáček, L.: Barva v předtiskové přípravě 2. Brno, 1999. (staženo z http://www.megaprint.cz/obecne/pruvodci/cms2.htm) 7. Komzák, J.: Zpracování rušených barevných obrazů ve vhodných soustavách a transformacích. Brno, VUT 1999. (staženo z http://komzak.webz.cz/old/skola/dp/)
8. Koudelka, M.: Měření barevnosti ve stavební praxi. Slaný, Stavební chemie, a. s. 2002. (staženo z http://www.stavebni-chemie.cz/pdf/Mereni_barevnosti.pdf) 9. Skala, V.: Barvy a fotorealismus I. Plzeň, Západočeská Univerzita 2004. (staženo z http://herakles.zcu.cz/education/ZPG/cviceni.php?no=4) 10. Sojka, E.: Digitální zpracování a analýza obrazů. Ostrava, VŠB-TU 2000. 11. Žára, J.; Beneš, B.; Felkel, P.: Moderní počítačová grafika. Praha, Computer Press 1998. 12. Žára, J.; Beneš, B.; Sochor, J.; Felkel, P.: Moderní počítačová grafika (druhé, přepracované a rozšířené vydání, kompletní průvodce metodami 2D a 3D grafiky).
Brno, Computer Press 2004.
-64-
Příloha Přílohou k této práci je CD, které obsahuje: •
adresář „Program“ se souborem „isolinie.exe“, „HELP.HLP“ a s testovanými obrázky formátu *.bmp;
•
adresář „Zdrojkod“ s kompletními zdrojovými soubory pro program „isolinie.exe“;
•
soubory „DP.doc“ a „DP.pdf“ s kompletní diplomovou prací v elektronické podobě.
-65-