ˇ´ıtac ˇova ´ cvic ˇen´ı Poc ˇ ´ho modelova ´ n´ı Skola matematicke 2016
´ c, Marie Sadowsk´a, Maty´aˇs Theuer Petr Beremlijski, Rajko Cosi´
ˇ´ıtac ˇova ´ cvic ˇen´ı Poc ˇ ´ho modelova ´ n´ı Skola matematicke
´ c, Marie Sadowsk´a, Maty´aˇs Theuer Petr Beremlijski, Rajko Cosi´
Katedra aplikovan´e matematiky Fakulta elektrotechniky a informatiky ˇ - Technick´a univerzita Ostrava VSB 2016
´ Uvod ˇ Tento text je urˇcen pro u ´ˇcastn´ıky semin´aˇre Skola matematick´eho modelov´an´ı (http://skomam.vsb.cz) a slouˇz´ı jako pom˚ ucka k u ´ loh´am, kter´e ˇreˇs´ı studenti v pr˚ ubˇehu ˇ tohoto semin´aˇre. Tento semin´aˇr, pro kter´y pouˇz´ıv´ame zkratku SKOMAM, organizuje Katedra aplikovan´e matematiky (http://am.vsb.cz) Fakulty elektrotechniky a informatiky Vysok´e ˇskoly b´an ˇ sk´e – Technick´e univerzity Ostrava jednou roˇcnˇe jiˇz od roku 2005. Tento rok prob´ıh´a jiˇz 12. roˇcn´ık tohoto semin´aˇre. Pro poˇc´ıtaˇcov´e ˇreˇsen´ı u ´ loh, kter´ymi se budeme zab´yvat, jsme zvolili komerˇcn´ı syst´em Matlab. Matlab se skl´ad´a z nˇekolika souˇc´ast´ı. Jde zejm´ena o programovac´ı jazyk zamˇeˇren´y na numerick´e v´ypoˇcty a v´yvoj numerick´ych algoritm˚ u. Matlab obsahuje tak´e knihovnu funkc´ı pro ˇreˇsen´ı ˇrady numerick´ych u ´ loh. A d˚ uleˇzitou sloˇzkou Matlabu je grafick´e prostˇred´ı pro interaktivn´ı zad´av´an´ı pˇr´ıkaz˚ u. Podrobn´y popis tohoto jazyka je k dispozici v [1]. Pokud ˇcten´aˇr naˇsi knihy nem´a Matlab k dispozici, m˚ uˇze pouˇz´ıt syst´em Octave, kter´y se znaˇcnˇe podob´a Matlabu a je volnˇe k dispozici na webov´e adrese https://www.gnu.org/software/octave. Tento semin´aˇr je poˇr´ad´an s finanˇcn´ı podporou Fakulty elektrotechniky a informatiky (http://www.fei.vsb.cz). Nad akc´ı pˇrevzala z´aˇstitu Jednota ˇcesk´ych matematik˚ u a fyzik˚ u (http://jcmf.vsb.cz).
ˇen´ı 1: Matlab – na ´ stroj pro matematick´ ´ n´ı Cvic e modelova Abychom se mohli vˇenovat numerick´emu ˇreˇsen´ı matematick´ych u ´ loh, potˇrebujeme vhodn´e prostˇred´ı, kter´e n´am to umoˇzn´ı. A tak jako fyzici ˇci chemikov´e maj´ı sv´e laboratoˇre, maj´ı i numeriˇct´ı matematici svou Maticovou laboratoˇr1 - Matlab. Podrobnˇe se tomuto pracovn´ımu prostˇred´ı a jeho pˇr´ıkaz˚ um vˇenuje pˇriloˇzen´y Matlabovsk´y slabik´aˇr [2] nebo tak´e u ´ vod textu [1]. My si v tomto textu uvedeme pouze struˇcn´y pˇrehled matlabovsk´ych promˇenn´ych a pˇr´ıkaz˚ u, kter´e budeme potˇrebovat. Prostˇ red´ı • help, demos, intro, who, whos, clear, size, length Promˇ enn´ e • Skal´ary • Vektory • Matice Pˇ r´ıkazy • Skal´arn´ı funkce - sin, cos, tan, cot, exp, log, abs, sqrt, round • Vektorov´e funkce a generov´an´ı vektor˚ u - max, min, sort • Maticov´e funkce a generov´an´ı matic - det, rand, ones, zeros, eye • Skal´arn´ı operace - +, −, ∗, /, b
• Maticov´e a vektorov´e operace - +, −, ∗, ´(transponov´an´ı), \ (A\v = x ⇔ Ax = v) Operace po prvc´ıch“ - .∗ , .b, ./ ” • 2D grafika (vykreslen´ı graf˚ u funkc´ı jedn´e promˇenn´e) - plot, hold on, hold off, figure • 3D grafika (vykreslen´ı graf˚ u funkc´ı dvou promˇenn´ych) - meshgrid, mesh, contour, hold on, hold off, figure ˇ ıd´ıc´ı pˇr´ıkazy - if (podm´ınˇen´y pˇr´ıkaz), for, while (pˇr´ıkazy cyklu se zn´am´ym poˇctem • R´ opakov´an´ı a podm´ınkou na zaˇc´atku) • Relace a logick´e operace - <, >, <=, >=, ==, ∼=, &, |, ∼ • Skripty a funkce - function 1
MATrix LABoratory
1
Vˇse si nyn´ı vyzkouˇs´ıme pˇri ˇreˇsen´ı n´asleduj´ıc´ıch u ´ loh. ´ Ukol 1.1 Kolik ˇclen˚ u harmonick´e ˇrady2 mus´ıme nejm´enˇe seˇc´ıst, aby tento ˇc´asteˇcn´y souˇcet ˇrady mˇel hodnotu alespoˇ n 10 (15, 20)? N ´ Ukol 1.2 Zkuste odhadnout s vyuˇzit´ım Matlabu souˇcet ˇrady ∞ X n=1
1 . n (n + 1) N
´ Ukol 1.3 Sestrojte grafy n´asleduj´ıc´ıch funkc´ı: • f (x) = x2 √ • f (x) = 1 − x2 • f (x) = x2 sin
1 x2
• f (x) = |x|
N
´ Ukol 1.4 Sestrojte grafy n´asleduj´ıc´ıch funkc´ı: • f (x, y) = x2 + y 2 p • f (x, y) = x2 + y 2 2
2
• f (x, y) = (x + y ) sin • f (x, y) =
p
|xy|
1 x2 +y 2
N
2ˇ
Radou (re´ aln´ ych ˇ c´ ısel) rozum´ımePv´ yraz a1 + a2 + · · · + an + · · · = ∞ je an ∈ R. Harmonickou naz´ yv´ame ˇradu n=1 n1 .
2
P∞
n=1
an , kde pro kaˇzd´e n ∈ N
ˇen´ı 2: Obra ´ zky jako matice Cvic V dob´ach analogov´ych fotoapar´at˚ u se vyfocen´y obraz v kaˇzd´em okamˇziku uchov´aval skuteˇcnˇe jako obraz. At’ uˇz na negativu filmu, nebo po vyvol´an´ı na fotografick´em pap´ıˇre ˇci diapozitivu. Dnes je tomu jinak. Pˇri zm´aˇcknut´ı spouˇstˇe digit´aln´ıho fotoapar´atu se aktu´aln´ı sc´ena pˇred objektivem zachyt´ı pomoc´ı sn´ımac´ıho ˇcipu a uloˇz´ı jako soubor ˇc´ısel na pamˇet’ovou kartu. I kdybychom tuto kartu rozebrali, obr´azky na n´ı neuvid´ıme. K jejich zobrazen´ı potˇrebujeme opˇet nˇejak´e digit´aln´ı zaˇr´ızen´ı, kter´e um´ı obraz uloˇzen´y v jedniˇck´ach a nul´ach pˇrev´est do viditeln´e formy. Matice obrazu Pro jednoduchost se nejprve zab´yvejme ˇcernob´ıl´ymi obr´azky - pˇresnˇeji obr´azky ve stupn´ıch ˇsed´e. V okamˇziku exponov´an´ı dojde k zachycen´ı sn´ıman´e sc´eny na ˇcip, kter´y je tvoˇren soustavou miniaturn´ıch fotodiod uspoˇra´dan´ych do ˇr´adk˚ u a sloupc˚ u. V z´avislosti na osvˇetlen´ı pˇr´ısluˇsn´e ˇca´sti ˇcipu kaˇzd´a z diod vyprodukuje urˇcit´y n´aboj, kter´y je zmˇeˇren, a jeho hodnota je zaznamen´ana ve formˇe ˇc´ısla. V pˇr´ıpadˇe JPEG obr´azku se jedn´a o cel´e ˇc´ıslo od 0 do 255,3 pˇriˇcemˇz hodnota 0 odpov´ıd´a ˇcern´e a hodnota 255 b´ıl´e. Proces rozdˇelen´ı spojit´eho obrazu na diskr´etn´ı hodnoty v jednotliv´ych oddˇelen´ych bodech se naz´yv´a kvantov´an´ı a vzorkov´an´ı.
Obr´azek 1: Pˇr´ıklad kvantov´an´ı a vzorkov´an´ı Pomineme-li ve skuteˇcnosti bin´arn´ı uloˇzen´ı obrazu, m˚ uˇzeme si jeho digit´aln´ı podobu pˇredstavit jako obecnˇe obd´eln´ıkovou tabulku ˇc´ısel, ve kter´e kaˇzd´a hodnota reprezentuje jas urˇcit´e mal´e ploˇsky (pixelu) v zachycen´em obraze. Tuto tabulku budeme oznaˇcovat pojmem matice obrazu: a1,1 a1,2 · · · a1,n a2,1 a2,2 · · · a2,n A = .. .. .. , kde ai,j ∈ {0, 1, 2, ..., 255} . . . . . . . am,1 am,2 · · · am,n Pˇr´ıklad ˇc´asti matice obrazu m˚ uˇzeme vidˇet na obr. 2. 3
Tyto hodnoty odpov´ıdaj´ı osmibitov´e reprezentaci ˇc´ısla.
3
41 38 34 35 38 62 64 58 42 66 120 137 127 111 57 59
51 41 35 39 38 68 60 46 35 77 133 134 122 126 80 81
51 71 50 50 70 63 52 43 65 101 152 142 118 107 92 101
44 64 68 67 96 49 47 39 82 150 167 142 118 113 98 98
49 46 40 55 63 50 37 47 136 177 165 137 149 119 107 101
75 47 43 33 38 40 63 124 177 179 165 146 148 127 111 94
106 78 30 32 43 72 138 184 182 171 177 154 138 124 92 59
139 133 96 75 122 163 190 177 178 170 175 157 152 126 90 49
182 190 177 182 194 203 189 169 175 184 174 164 155 140 111 78
175 174 171 177 176 186 179 170 180 181 186 161 158 137 111 89
160 169 174 168 174 176 177 172 173 189 185 158 149 124 100 62
155 163 169 173 180 188 182 177 187 198 181 154 152 124 92 46
137 156 159 171 179 181 179 172 180 188 173 156 155 143 119 86
134 174 171 172 173 173 173 167 173 176 160 151 153 144 134 126
102 155 168 174 176 181 173 168 177 172 148 145 157 142 123 116
51 97 137 164 177 178 169 160 156 146 136 147 166 162 125 103
ˇ ast matice obrazu Obr´azek 2: C´ Histogram M´ame-li obr´azek ve stupn´ıch ˇsed´e (ˇc´ıslech od 0 do 255), m˚ uˇze n´as zaj´ımat, kolikr´at se v obr´azku jednotliv´e stupnˇe (ˇc´ısla) vyskytuj´ı. Graf ˇcetnosti v´yskytu jednotliv´ych hodnot v obr´azku se naz´yv´a histogram.
Obr´azek 3: Obr´azek a jeho histogram Pˇrestoˇze obr´azek nen´ı sv´ym histogramem jednoznaˇcnˇe definov´an, m˚ uˇzeme z histogramu 4
o p˚ uvodn´ım obr´azku hodnˇe vyˇc´ıst. Tmav´e obr´azky maj´ı v histogramu velk´e hodnoty nahromadˇen´e v lev´e ˇc´asti grafu. Naopak svˇetl´e obr´azky maj´ı v histogramu velk´e hodnoty v prav´e ˇc´asti grafu. Histogram obr´azk˚ u s n´ızk´ym kontrastem vypad´a jako jeden relativnˇe u ´ zk´y ko” pec“, zat´ımco obr´azky s vysok´ym kontrastem maj´ı vˇetˇsinou dva kopce“, kaˇzd´y na opaˇcn´e ” stranˇe grafu.
Obr´azek 4: Pˇr´ıklad r˚ uzn´ych obr´azk˚ u a jejich histogram˚ u
5
Jednoduch´ eu ´ pravy Jak jsme si ˇrekli, obr´azky jsou v poˇc´ıtaˇci uloˇzeny jako matice ˇc´ısel, takˇze m´ısto manipulace s barevn´ymi ploˇskami n´am staˇc´ı prov´adˇet operace s ˇc´ısly. Nyn´ı si v jednoduchosti pop´ıˇseme nˇekter´e z´akladn´ı operace s maticemi obr´azk˚ u. Pˇredpokl´adejme, ˇze m´ame obr´azek ve stupn´ıch ˇsed´e, kter´y m´a 512×512 pixel˚ u. Matice takov´eho obrazu, kterou oznaˇc´ıme Iorig , m´a 512 ˇr´adk˚ u a 512 sloupc˚ u. Dohromady je to 262144 ˇc´ısel, takˇze je jasn´e, ˇze nebudeme poˇc´ıtat s kaˇzdou hodnotou ruˇcnˇe, ale nastav´ıme nˇejak´e pravidlo, kter´e poˇc´ıtaˇci ˇrekne, co m´a s jednotliv´ymi hodnotami udˇelat. • Oˇrez obr´azku provedeme jednoduˇse tak, ˇze vybereme jen omezen´y rozsah ˇr´adk˚ u a sloupc˚ u p˚ uvodn´ı matice. Napˇr´ıklad pro v´yˇrez prav´e horn´ı ˇctvrtiny obr´azku Iorig vezmeme pouze 1. aˇz 256. ˇr´adek a 257. aˇz 512. sloupec. Dostaneme tam matici Icrop , kter´a m´a 256 ˇr´adk˚ u a 256 sloupc˚ u. • Zesvˇetlen´ı obr´azku provedeme napˇr´ıklad tak, ˇze k hodnotˇe kaˇzd´eho pixelu v matici Iorig pˇriˇcteme nˇejak´e kladn´e ˇc´ıslo, napˇr´ıklad 100. Touto operac´ı se vˇsak m˚ uˇze st´at, ˇze se nˇekter´e hodnoty ocitnou mimo rozsah 0 aˇz 255. Oprav´ıme to napˇr´ıklad tak, ˇze vˇsechny hodnoty, kter´e vyjdou vˇetˇs´ı neˇz 255, zmenˇs´ıme pr´avˇe na 255. Ve vˇsech bodech, kde doˇslo k takov´em oˇrezu hodnot ovˇsem ztr´ac´ıme obrazovou informaci. • Ztmaven´ı obr´azku m˚ uˇzeme prov´est obdobnˇe jako zesvˇetlen´ı, ale mus´ıme zkontrolovat, zda nˇekter´e hodnoty nevyˇsly z´aporn´e. Pokud ano, nastav´ıme je na 0. Dalˇs´ı moˇznost´ı je vyn´asobit vˇsechny hodnoty matice obrazu nˇejak´ym ˇc´ıslem z intervalu (0, 1). Zde nehroz´ı, ˇze bychom se dostali mimo rozsah 0 aˇz 255, ale m˚ uˇze se st´at, ˇze v´ysledkem nebudou jen cel´a ˇc´ısla, a tak je potˇreba kaˇzdou v´yslednou hodnotu zaokrouhlit na nejbliˇzˇs´ı cel´e ˇc´ıslo. • Negativ obr´azku je obraz, kter´y m´a obr´acenou reprezentaci ˇc´ısel. V klasick´em obr´azku odpov´ıd´a 0 ˇcern´e a 255 b´ıl´e hodnoty mezi tˇemito ˇc´ısly odpov´ıdaj´ı r˚ uzn´ym stupˇ n˚ um ˇsed´e od tmav´e po svˇetlou. V negativn´ım zobrazen´ı je to naopak. Abychom nemuseli pˇreprogramovat zobrazovac´ı zaˇr´ızen´ı k obr´acen´ı stupnice, m˚ uˇzeme obr´atit stupnici pˇr´ımo v naˇsem obrazu. Hodnoty 0 zmˇen´ıme na 255 a naopak. Vˇsechny hodnoty tedy vypoˇc´ıt´ame tak, ˇze p˚ uvodn´ı hodnotu odeˇcteme od ˇc´ısla 255 a dostaneme pr´avˇe negativ p˚ uvodn´ıho obr´azku, kter´y jiˇz zobraz´ıme klasicky. • Prahov´an´ı je jednoduch´a operace, kde zvol´ıme t ∈ (0, 255) (jednoduch´y pr´ah). Jednotliv´e prvky matice Iprah nastav´ıme na 0, pokud pˇr´ısluˇsn´a hodnota matice Iorig je menˇs´ı neˇz t, a na 255, pokud je pˇr´ısluˇsn´a hodnota matice Iorig je vˇetˇs´ı nebo rovna t. • Vyrovn´an´ı histogramu je metoda, kter´a slouˇz´ı k automatick´emu upraven´ı kontrastu tak, aby byla ˇcetnost jednotliv´ych hodnot rozdˇelena pˇribliˇznˇe rovnomˇernˇe. Tato metoda je automatick´a a nezohledˇ nuje, o jak´y obr´azek se jedn´a, takˇze v´ysledek m˚ uˇze p˚ usobit ponˇekud umˇele.
6
Obr´azek 5: Negativ obr´azku (vlevo), obr´azek po prahovan´ı s parametrem t = 50 (uprostˇred) a t = 150 (vpravo)
Obr´azek 6: Pˇr´ıklad vyrovn´an´ı histogramu obr´azku s n´ızk´ym kontrastem Barevn´ e obr´ azky Pro reprezentaci barevn´eho obrazu se pouˇz´ıvaj´ı matice rovnou tˇri - jedna pro kaˇzdou barevnou sloˇzku RGB.4 V´ysledn´y obraz pak vznikne sloˇzen´ım tˇechto tˇr´ı obraz˚ u. Hodnota kaˇzd´eho pixelu obrazu se tedy skl´ad´a ze tˇr´ı ˇc´ısel, a tak se tato ploˇska zobrazuje v jedn´e z 2563 moˇzn´ych barev. Pro jin´y form´at souboru m˚ uˇze matice obrazu obsahovat i jin´a ˇc´ısla neˇz cel´a ˇc´ısla od 0 do 255. M˚ uˇzeme napˇr´ıklad pouˇz´ıt re´aln´a ˇc´ısla z intervalu (0, 1), kdy ˇrekneme, ˇze ˇcern´a je 0 4
RGB je syst´em rozloˇzen´ı barevn´eho obrazu na ˇcerven´ y (R), zelen´ y (G) a modr´ y (B) kan´al.
7
a b´ıl´a odpov´ıd´a hodnotˇe 1. Pokud uloˇz´ıme hodnoty kaˇzd´eho pixelu ve form´atu 14-bitov´ych ˇc´ısel, dostaneme aˇz 163843 barev. Bˇeˇzn´e zobrazovac´ı zaˇr´ızen´ı vˇsak neum´ı takov´y rozsah barev zobrazit, a proto ve vˇetˇsinˇe pˇr´ıpad˚ u staˇc´ı ukl´adat obr´azky do osmi bit˚ u.
Obr´azek 7: JPEG obr´azek sloˇzen´y z RGB kan´al˚ u ´ Ukol 2.1 Naˇctˇete sv˚ uj obr´azek do Matlabu pomoc´ı pˇr´ıkazu imread. Zobrazte tento obr´azek pomoc´ı funkce imshow a zobrazte jeho jednotliv´e sloˇzky R, G a B. Pˇreved’te tento obr´azek do stupˇ n˚ u ˇsed´e pomoc´ı funkce rgb2gray a uloˇzte pomoc´ı funkce imwrite. N
8
´ Ukol 2.2 Proved’te libovoln´y v´yˇrez vaˇseho ˇcernob´ıl´eho obr´azku obsahuj´ıc´ı 512 × 512 pixel˚ u a uloˇzte tento oˇr´ıznut´y obr´azek. Zobrazte histogram tohoto obr´azku pomoc´ı funkce imhist. N ´ Ukol 2.3 Proved’te zesvˇetlen´ı a ztmaven´ı vaˇseho obr´azku a vytvoˇrte jeho negativ. Pro’ ved te prahov´an´ı s prahem 10, 100, 150, 200. N ´ Ukol 2.4 Proved’te zv´yˇsen´ı kontrastu vaˇseho obr´azku pomoc´ı vyrovn´an´ı histogramu. N Na z´avˇer poznamenejme, ˇze mnohem v´ıce lze o problematice zpracov´an´ı obrazu nal´ezt v textu [3].
9
ˇen´ı 3: Konvoluce Cvic V tomto cviˇcen´ı si zkus´ıme aplikovat na obr´azky diskr´etn´ı konvoluci. Diskr´etn´ı konvoluce je zobrazen´ı, do kter´eho vstupuje obr´azek a takzvan´a konvoluˇcn´ı maska. Konvoluˇcn´ı maska specifikuje, co konkr´etnˇe konvoluce s obr´azkem provede. Protoˇze se v poˇc´ıtaˇc´ıch obr´azky vyskytuj´ı nejˇcastˇeji ve formˇe matice, jej´ıˇz kaˇzd´a hodnota odpov´ıd´a jasu v dan´em pixelu, nepˇrekvap´ı n´as, kdyˇz i konvoluˇcn´ı maska bude ze stejn´eho svˇeta. Diskr´etn´ı konvoluce tedy vezme matici obr´azku a kaˇzd´emu bodu pˇriˇrad´ı novou hodnotu podle n´asleduj´ıc´ıho sch´ematu:
Obr´azek 8: Sch´ema diskr´etn´ı konvoluce Jednoduˇse ˇreˇceno: poloˇz´ıme masku na obr´azek tak, aby stˇred masky byl v bodˇe, kde konvoluci poˇc´ıt´ame, pˇren´asob´ıme kaˇzdou hodnotou v masce pˇr´ısluˇsnou hodnotu obr´azku a potom vˇse seˇcteme.5 Pomoc´ı konvoluce jsme schopni odstranit z obr´azk˚ u ˇsum nebo zv´yraznit hrany, coˇz je hojnˇe vyuˇz´ıv´ano, chceme-li, aby poˇc´ıtaˇc dok´azal s´am rozpoznat objekty na obr´azku (tˇreba pˇri zpracov´an´ı dat z pr˚ umyslov´ych kamer). ˇ ım je maska vˇetˇs´ı, t´ım vˇetˇs´ı okol´ı bodu n´am m˚ C´ uˇze zas´ahnout do v´ypoˇctu. N´azornˇe je to vidˇet v n´asleduj´ıc´ım pˇr´ıkladu, kdy byla nejdˇr´ıve pouˇzita maska 1 1 1 1 1 1 1 , 9 1 1 1 kter´a vlastnˇe novou hodnotu spoˇc´ıt´a jako pr˚ umˇer hodnot v okoln´ıch bodech. Pot´e na stejn´y obr´azek aplikujeme masku vˇetˇs´ı, ale opˇet s hodnotami, kter´e zpr˚ umˇeruj´ı hodnoty obr´azku: 5
Konvoluci vypoˇcteme pomoc´ı pˇredpisu (f ∗ h) (x, y) =
popisuje obr´azek a funkce h masku.
10
k P
k P
r=−k s=−k
f (x + r, y + s) h (r, s), kde funkce f
1 25
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
.
Obr´azek 9: Lena pˇred aplikac´ı konvoluce (vlevo), po konvoluci s maskou 3 × 3 (uprostˇred) a po konvoluci s maskou 5 × 5 (vpravo) Jak si m˚ uˇzeme vˇsimnout, naˇse maska zpr˚ umˇerov´an´ım hodnot na okol´ı obraz rozmazala, a to t´ım v´ıce, ˇc´ım vˇetˇs´ı okol´ı bodu se do pr˚ umˇeru zapoˇc´ıtalo. Kdyby byla maska stejnˇe velik´a jako obr´azek, tak by cel´y v´ysledn´y obr´azek byl jen v jedn´e barvˇe. V minul´em cviˇcen´ı jsme si uk´azali, jak se v Matlabu pracuje s maticemi obrazu. Nyn´ı si zkus´ıme naprogramovat diskr´etn´ı konvoluci podle n´asleduj´ıc´ıho algoritmu. Algoritmus 1: Diskr´etn´ı konvoluce o br a zek = n a c t i o b r a z e k ( ) N,M = rozmery ( o br a zek ) maska = ma t i ce ( n , n ) fo r i = 1 . .N fo r j = 1 . .M r e s t r i k c e = o br a zek ( ( i −n / 2 ) : ( i+n / 2 ) , ( j −n / 2 ) : ( j+n / 2 ) ) no vy o br a zek ( i , j ) = suma prvku ( maska . ∗ r e s t r i k c e ) end end u l o z o b r a z e k ( no vy o br a zek )
Abychom se vyhnuli pˇreˇcn´ıv´an´ı masky ,,do pr´azdna“ pˇri poˇc´ıt´an´ı hodnot u krajn´ıch bod˚ u, nebudeme konvoluci poˇc´ıtat v bodech, ve kter´ych by maska pˇreˇcn´ıvala pˇres okraj obr´azku. Vytvoˇr´ıme si vlastnˇe takov´y r´ameˇcek, na kter´em v´ypoˇcet konvoluce prostˇe vynech´ame. 11
´ Ukol 3.1 Naprogramujte diskr´etn´ı konvoluci podle n´avodu v´yˇse a na obr´azc´ıch Lena.png a bricks.jpg (m˚ uˇzete pouˇz´ıt i sv´e obr´azky z minul´eho cviˇcen´ı) otestujte n´asleduj´ıc´ı konvoluˇcn´ı masky. Obr´azky naˇc´ıtejte v odst´ınech ˇsedi. 1 1 1 • 19 1 1 1 . . . odstran´ı ˇsum 1 1 1 1 2 1 1 2 4 2 . . . Gaussova maska • 16 1 2 1 0 1 0 • 1 −4 1 . . . Laplaceova maska 0 1 0 0 −1 0 5 −1 . . . zv´yrazn´ı hrany • −1 0 −1 0 −1 0 1 • −2 0 2 . . . zv´yrazn´ı svisl´e hrany −1 0 1 −1 −2 −1 0 0 . . . zv´yrazn´ı vodorovn´e hrany • 0 1 2 1 U posledn´ıch ˇctyˇr masek pˇriˇctˇete ke kaˇzd´emu bodu jeˇstˇe hodnotu 128, at’ obr´azky nejsou moc tmav´e. N Pro ilustraci praktick´eho vyuˇzit´ı diskr´etn´ı konvoluce pouˇzijeme na zaˇsumˇen´y obr´azek konvoluˇcn´ı masku 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 , 25 1 1 1 1 1 1 1 1 1 1
viz obr. 10. Jak je vidˇet, pouˇzili jsme stejnou masku, na kter´e jsme si ukazovali rozmaz´an´ı obr´azku. Pˇri odstraˇ nov´an´ı ˇsumu pomoc´ı diskr´etn´ı konvoluce se rozmaz´an´ı obr´azku pravdˇepodobnˇe ˇ ım vˇetˇs´ı ˇsum potˇrebujeme z obr´azku odfiltrovat, t´ım v´ıce budeme muset nevyhneme. C´ obr´azek rozmazat.
12
Obr´azek 10: Lena pˇred odstranˇen´ım ˇsumu (vlevo) a Lena po odstranˇen´ı ˇsumu (vpravo) Velmi podobn´y v´ysledek bychom obdrˇzeli i pˇri pouˇzit´ı Gaussovy masky 1 4 7 4 1 4 16 26 16 4 1 7 26 41 26 7 , 273 4 16 26 16 4 1 4 7 4 1
viz obr. 11.
Obr´azek 11: Lena pˇred odstranˇen´ım ˇsumu (vlevo) a Lena po odstranˇen´ı ˇsumu pomoc´ı Gaussovy masky (vpravo) Dalˇs´ı informace o vyuˇzit´ı konvoluce pro zpracov´an´ı obrazu m˚ uˇze zv´ıdav´y ˇcten´aˇr z´ıskat v textu [3].
13
Reference [1] T. Kozubek, T. Brzobohat´y, V. Hapla, M. Jaroˇsov´a, A. Markopoulos: Line´arn´ı algebra s Matlabem. Text vytvoˇren´y pˇri realizaci projektu Matematika pro ” inˇzen´yry 21. stolet´ı“, Vysok´a ˇskola b´an ˇ sk´a - Technick´a univerzita Ostrava (2012). (http://mi21.vsb.cz/modul/linearni-algebra-s-matlabem) [2] K. Sigmon: Matlab Primer. University of Florida (1993). [3] E. Sojka, J. Gaura, M. Krumnikl: Matematick´e z´ aklady digit´ aln´ıho zpracov´an´ı obrazu. Text vytvoˇren´y pˇri realizaci projektu Matematika pro inˇzen´yry ” 21. stolet´ı“, Vysok´a ˇskola b´an ˇ sk´a - Technick´a univerzita Ostrava (2012). (http://mi21.vsb.cz/modul/matematicke-zaklady-digitalniho-zpracovani-obrazu)
14
Apendix A: Matice Definice A.1 Necht’ jsou d´any prvky a1,1 , a1,2 , . . . , am,n z dan´e mnoˇziny F. Matice typu (m, n) (struˇcnˇe m × n matice) je obd´eln´ıkov´a tabulka " a . . . a1,n # 1,1 .. .. .. A= , . . . am,1 . . . am,n kter´a m´a m · n prvk˚ u ai,j uspoˇr´adan´ych do m ˇr´adk˚ u riA a n sloupc˚ u sA ze j , takˇ
r1A A A = ... = sA 1 , . . . , sn , A " a # rm 1,j .. A A ri = ai,1 , . . . , ai,n , sj = . . am,j Struˇcnˇe p´ıˇseme t´eˇz A = [ai,j ].
15