kompresija, kodiranje i restauracija slika u matlab uunarske... · kompresija, kodiranje i...
TRANSCRIPT
UNIVERZITET U NIŠU
PRIRODNO – MATEMATIČKI FAKULTET
DEPARTMAN ZA RAČUNARSKE NAUKE
Kompresija, kodiranje i restauracija slika
u MATLAB – u
MASTER RAD
Kandidat: Mentor:
Aleksandar Ivanović Prof. dr Predrag Stanimirović
Niš, 2018.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 1
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 2
Zahvalnica
Najsrdačnije se zahvaljujem svom mentoru, prof. dr Predragu Stanimiroviću na nesebičnoj
pomoći i razumevanju tokom izrade master rada, za sve sugestije, savete, ukazano poverenje i
spremnost na zajednički rad.
Takođe, želim da se zahvalim svojoj supruzi Jeleni na razumevanju, ljubavi i bezuslovnoj
podršci od početka studija do izrade master rada i svojoj ćerki Mili koja je moj neiscrpan izvor
inspiracije.
Konačno, veliku zahvalnost dugujem svojim roditeljima, jer bez njih ne bih bio to što
jesam.
Autor
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 3
Sadržaj
Predgovor ........................................................................................................................................ 4
1. Uvod u image processing toolbox............................................................................................... 5
2. Furijeova analiza i diskretna Furijeova transformacija ............................................................... 9
3. Diskretna kosinusna transformacija .......................................................................................... 11
3.1. Jednodimenzionalna DCT .................................................................................................. 12
3.2. Dvodimenzionalna DCT .................................................................................................... 13
4. Restauracija slike ...................................................................................................................... 20
4.1. Model procesa degradacije i restauracije slika ................................................................... 21
4.2. Model šuma ........................................................................................................................ 22
4.2. Modeli zamućenja slike ...................................................................................................... 30
4.3. Restauracija zamućene slike............................................................................................... 36
u MATLAB – u ......................................................................................................................... 36
5. Zaključak................................................................................................................................... 55
6. Prilog ......................................................................................................................................... 56
7. Literatura ................................................................................................................................... 62
Biografija ...................................................................................................................................... 64
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 4
Predgovor
Svet računarske grafike se razvija velikom brzinom. Na tržištu se nalazi veliki broj
programa koji su usko specijalizovani za obradu slika ili za njihovo kodiranje. Nažalost, mali broj
njih je multifunkcionalan i može se koristiti za druge namene u cilju daljeg razvoja nauke i
tehnologije. Srećom, postoji jedan programski paket u kome je moguće kombinovati obradu i
kodiranje slika sa tehnikama programiranja. Njegovo ime je MATLAB.
MATLAB (izvedeno od eng. matrix laboratary) je multiplatformsko numeričko računarsko
okruženje. Razvijen je od strane kompanije MathWorks i dozvoljava rad sa matricama, obradu
funkcija i podataka, implementaciju algoritama, kreiranje korisničkih interfejsa i kombinovanje sa
drugim programskim jezicima uključujući C, C++, Javu, Fortran i Pyton. MATLAB ima više
miliona korisnika, a koristi se masovno u akademskim i naučnim istraživanjima.
Ovaj rad će se fokusirati na aspekte računarske grafike, upoznavanje sa JPEG kompresijom
i korišćenjem diskretne kosinusne transformacije u cilju kodiranja i kompresije slika korišćenjem
Diskretne kosinusne transformacije, kao i nekoliko modela za restauraciju zamućene slike. Sve
teoretske studije su pokazane na praktičnim primerima u izabranom radnom okruženju.
Rešenja prikazana u ovom master radu ostavljaju prostora za dalji razvoj. Mogućnosti i
ideje za doradu datih rešenja prikazani su u poslednjem poglavlju.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 5
1. Uvod u image processing
toolbox
U MATLAB – u se nalaze funkcije specijalizovane za ulazno – izlazne operacije,
prikazivanje i obradu slika. Te funkcije se nalaze u tzv. Image Processing Toolbox – u. Da biste
videli listu svih funkcija u ovom toolbox – u treba ukucati help images u MATLAB komandnoj
liniji. Vidimo da je na raspolaganju veliki broj funkcija. Mi ćemo se u okviru ovog master rada
dotaći samo nekih. Cilj ovog rada je upoznavanje sa načinima reprezentacije slike u memoriji
računara, kao i pronalazak načina za smanjivanje prostora koji je potreban za čuvanje slike.
Kao što mu i samo ime navodi, MATLAB memoriše sliku kao matricu, tako što svakom
pikselu na slici odgovara jedan element matrice. Zbog njegovog fleksibilnog okruženja,
mogućnosti razvoja različitih algoritama i programiranja i širokom spektru ugrađenih funkcija
kojima se efikasno dolazi do željenih numeričkih okruženja, MATBLAB se nametnuo kao
nezamenljiv alat za analizu i rešavanje različitih problema u mnogim oblastima inženjerske prakse
i u različitim akademskim istraživanjima. Pored toga, on omogućava programski i interaktivni rad.
U interaktivnom radu naredbe se zadaju direktno u komandnom prozoru ovog radnog okruženja i
direktno se izvršavaju po zadavanju. Naredbe koje su prethodno izvršene ostaju u istoriju i lako se
mogu vratiti jednostavnim pritiskanjem tastera ↑ na tastaturi (gore). One se zatim mogu menjati i
ponovo pokretati. Pored ovoga, moguće je takođe pozivanje programa iz komandnog prozora tako
što navedemo njegovo ime. Oni se izvršavaju liniju po liniju.
Najjednostavniji način za korišćenje MATLAB – a je kao veoma moćan kalkulator.
Pomoću pozivanja ugrađenih funkcija lako možemo izvesti mnoge eksponencijalne,
trigonometrijske ili aritmetičke operacije. Pored ovih osnovnih, ovo radno okruženje omogućava
veliku kolekciju funkcija pomoću kojih je moguće izvršavanje veoma složenih operacija. Velika
prednost je i što je moguće definisanje sopstvene funkcije.
Numerička izračunavanja u MATLAB – u se obavljaju korišćenjem veličina klase double,
pa se zbog toga u digitalnoj obradi slike ova klasa često koristi za reprezentaciju vrednosti piksela.
Tada se svaki element pamti kao 64–bitni broj u pokretnom zarezu. Međutim, na ovaj način slike
mogu zauzimati izuzetno mnogo memorije. Danas čak i mobilni telefoni mogu praviti panoramske
fotografije rezolucija većih od 50Mpix. Na primer, slika dimenzija 1000x1000 piksela zahtevala
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 6
bi oko 8MB prostora. U praksi je zadovoljavajuća i grublja kvantizacija vrednosti piksela pa se
često koriste 8–bitne i 16–bitne reprezentacije vrednosti piksela. U MATLAB – u su ove
reprezentacije podržane klasama uint8 i uint16 koje omogućavaju da se svaki element matrice
(piksel) memoriše kao 8–bitni, odnosno 16–bitni neoznačeni celi broj. Pored ovih, za
reprezentaciju vrednosti piksela koristi se i klasa logical.
Ovu osobinu MATLAB – a ćemo iskoristiti prilikom kompresije i kodiranja slika.
Pored osnovnih funkcija, MATLAB raspolaže dodatnim paketima alata za rešavanje
posebnih klasa problema (eng. toolbox) koji se mogu dobiti uz osnovnu verziju programa. Pored
njih, postoje i paketi koji se posebno nabavljaju. Neki od osnovnih su Signal Processing Toolbox
(koji obezbeđuje grafičko okruženje, omogućava opisno skiciranje blok dijagrama sistema i
izvršava njihova simulacija), Control System Toolbox (kolekcija algoritma za modeliranje, analizu
i projektovanje različitih sistema automatskog upravljanja), Identification Toolbox (za primenu u
identifikaciji sistema), Statistic Toolbox (velika primena u statistici), Neural Network Toolbox
(koristi se za rad sa neuralnim mrežama), Optimisation Toolbox (za rešavanje različitih linearnih
i nelinearnih problema), Image Processing Toolbox (digitalna obrada slike). Broj podržanih paketa
je ogroman, pa mnoge od njih čak ni eksperti ne koriste niti znaju sve postojeće funkcije. Sa druge
strane, kada se jednom usvoje osnovne operacije, sve složene komande i funkcije se usvajaju lako
i brzo. Umnogome pomaže ugrađena naredba help, koja sadrži detaljno objašnjenje mnogih
problema sa kojima se korisnici susreću i mnoge praktične primere od kojih su neki korišćeni u
izradi ovog rada.
Mi ćemo se u ovom radu fokusirati na poslednji navedeni Toolbox.
U Image Processing Toolbox – u su podržana četiri osnovna tipa slika koji se javljaju i u
poznatim rasterskim grafičkim programima kao što je Adobe Photoshop, GIMP i drugi. Ovi tipovi
su:
1. Indeksirane slike,
2. Intenzitetske slike,
3. RGB slike,
4. Binarne slike.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 7
Tipom slike se utvrđuje veza između vrednosti elemenata matrice i boje, intenziteta
piksela.
Indeksirane slike se čuvaju u memoriji kao dve matrice i to matrica slike i paleta. Matrica
slike za svaki piksel sadrži indeks elemenata u paleti boja koji predstavlja boju tog elementa. Ona
predstavlja matricu klase double koja ima dimenzije m x 3. Svaka vrsta palete sadrži vrednosti
crvene, zelene i plave (R, G, B) komponente određene boje. To su realni skalari koji imaju
vrednosti iz uređenog para [0, 1]. Paleta, sa druge strane, sadrži vrednosti koje predstavljaju boje
piksela u slici. Osnovni format za indeksirane slike je .tiff.
Intenzitetska slika se u MATLAB – u čuvaju kao jedna matrica u kojoj svaki element
odgovara jednom pikselu slike. Ta matrica može biti klase double kada su njeni elementi iz opsega
[0, 1], klase uint8 kada sui z opsega [0, 255] ili uint 16 kada su [0, 65535]. Elementi te matrice
predstavljaju nijansu sive (odnosno intenzitet, odakle je i dobio naziv) pojedinih piksela, gde
vrednost 0 odgovara crnoj a 1 (tj. 255 ili 65535) odgovara beloj boji, odnosno pun intenzitet. Ovu
karakteristiku ćemo koristiti u ovom radu.
Kada je reč o binarnim slikama, kao što mu i samo ime kaže, svaki piksel može imati samo
jednu od dve vrednosti. Te date vrednosti se mogu tumačiti kao pozadina i objekat. Slika se
predstavlja uz pomoć matrice sa elementima 0 i 1, gde ove dve vrednosti predstavljaju pozadinu i
objekat, respektivno. Kao što vidimo, ovaj tip slika se zbog ove karakteristike može smatrati
posebnim, najjednostavnijim, slučajem intenzitetskih slika. Treba obratiti pažnju da se u slučaju
binarnih slika koriste isključivo elementi klase logical. Matrica koja se sastoji iz elemenata 0 i 1
ali čija klasa nije logical, se ne smatra binarnom slikom u MATLAB – u.
Kada je reč o RGB slikama, one se poput indeksiranih slika određuju na osnovu
komponente crvene, zelene i plave boje, pa su zbog toga i dobile ime (eng. Red, Green, Blue).
Osnovna razlika između ove dve vrste slika je to što se kod RGB slika one pamte u samoj matrici
slike, a ne u posebnoj paleti boja. Matrica u tom slučaju ima dimenzije m x n x 3, gde m i n
predstavljaju broj vrsta i kolona matrice slike. Treća dimenzija se sastoji iz tri ravni. Njenom
kombinacijom se dobijaju boje piksela. Zbog kompleksnosti, u ovom radu nećemo koristiti RGB
slike. One će, na samom ulazu, biti konvertovane u indeksirane slike.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 8
Većina funkcija u ovom toolbox – u su MATLAB M – datoteke, čiji izvorni kod možemo
pregledati otvaranjem datoteke koristeći MATLAB editor ili jednostavno ukucati type
function_name u prozoru za komande. Lokacija u kome se M – datoteka čuva se može naći
kucanjem komande which function_name u prozoru za komande. Za određivanje koja verzija IPT
je instalirana na Vašem računaru, treba ukucati ver.
Moguće je proširiti mogućnosti IPT – a tako što ćete napisati sopstvene M – datoteke,
modifikovati i proširivati postojeće M – datoteke, ili koristeći IPT u kombinaciji sa drugim toolbox
– evima.
IPT poseduje kolekciju funkcija i algoritama koji su zaduženi za popravljanje kvaliteta
slika, pooštravanje, filtriranje, korekciju šuma, kreiranje histograma, podešavanje boja i svetla,
balansa boja, kontrasta, detekciju objekata i analize oblika.
U MATLAB – u su podržani sledeći formati za čuvanje slika:
• JPEG image (*.jpg)
• Bitmap mage (*.bmp)
• EPS file (*.eps)
• Enhancet metafile (*.emf)
• MATLAB Figure (*.fig)
• Paintbrush 24 – bit file (*.pcx)
• Portable Bitmap file (*.pbm)
• Portable Document Format (*.pdf)
• Portable Graymap file (*.pgm)
• Portable Network Graphic file (*.png)
• Portable Pixmap file (*.ppm)
• Scalable Vector Graphic file (*.svg)
• TIFF image i Tiff no compression image (*.tif)
U ovom radu ćemo se fokusirati na najzastupljeniji, JPEG format.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 9
2. Furijeova analiza i
diskretna Furijeova
transformacija
Furijeova analiza omogućava predstavljanje signala u frekvencijskom domenu. Signal je u
frekvencijskom domenu predstavljen preko svog spektra. Značaj pretvaranja signala iz
vremenskog u frekvencijski domen leži u činjenici da se neke važne osobine signala mogu bolje
interpretirati u frekvencijskom domenu. Opšti termin Furijeova analiza se odnosi na obradu:
• kontinualnih i periodičnih signala (Furijeov red),
• kontinualnih i aperiodičnih signala (Furijeova transformacija)
• i diskretnih signala (Diskretna Furijeova transformacija).
U ovom radu ćemo posebnu pažnju posvetiti Diskretnoj Furijeovoj transformaciji.
U matematici, Diskretna Furijeova transformacija (u daljem tekstu DFT) je posebna
vrsta diskretne transformacije koja se koristi u Furijeovoj analizi. Ona nastaje odabirom jedne
periode Furijeove transformacije i transformiše jednu funkciju u drugu, pomoću postupka koji
nazivamo domen zastupljenosti frekvencije (eng. frequency domain representation) originalne
funkcije. Na taj način se spektar signala predstavlja preko niza brojeva, što omogućava
direktnu obradu na računaru.
Za DFT je potrebno uneti diskretnu funkciju na ulazu. Ovakav ulaz se može dobiti
uprošćavanjem funkcija koje se ponavljaju, kao što je na primer amplituda ljudskog glasa tokom
vremena.
Furijeova transformacija se može predstaviti na sledeći način:
𝑓(𝑣) = 𝐹𝑡[𝑓(𝑡)](𝑣)
(1)
= ∫ 𝑓(𝑡)𝑒−2𝜋𝑖𝑣𝑡𝑑𝑡∞
−∞
(2)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 10
Uzmimo u obzir generalizaciju u slučaju da imamo diskretnu funkciju, 𝑓(𝑡) → 𝑓(𝑡𝑘) tako
što ubacujemo 𝐹𝑘 ≡ 𝑓(𝑡), u 𝑡𝑘 ≡ 𝑘∆, sa 𝑘 = 0,… ,𝑁 − 1.
Na ovaj način dobijamo DFT 𝐹𝑛 ≡ 𝐹𝑘[{𝑓𝑘}𝑛=0𝑁−1](𝑛)
u sledećem obliku:
𝐹𝑁 ≡ ∑ 𝑓𝑘𝑒−2𝜋𝑖𝑛𝑘
𝑁
𝑁−1
𝑘=0
(3)
Inverznom transformacijom funkcije 𝑓𝑘 ≡ 𝐹𝑛−1[{𝐹𝑛}𝑛=0
𝑁−1](𝑘) dobijamo:
𝑓𝑘 =1
𝑁∑ 𝐹𝑛𝑒
2𝜋𝑖𝑛𝑘𝑁
𝑁−1
𝑛=0
(4)
DFT je naročito koristan zato što pomoću njega možemo da otkrijemo periodičnosti
prilikom unosa podataka i jačinu komponenti koje se ponavljaju. Naročito je koristan algoritam
brze Furijeove transformacije (eng. Fast Fourier transform, u daljem tekstu FFT). Taj algoritam
smanjuje broj računskih operacija koje su potrebne za 𝑁 tačaka od 2𝑁2 do 2𝑁𝑙𝑔𝑁, gde je osnova
logaritam sa osnovom dva.
FFT je isprva definisan od strane Kolija i Tukija (Cooley, Tukey) 1965. godine, iako je
Gaus još 1805. godine objasnio osnovne procese prilikom faktorizacije. DFT može biti izračunata
korišćenjem FFT – a, korišćenjem Danijelson – Lankosove leme ako je broj poena 𝑁 stepen sa
osnovom dva. Ako broj poena nema osnovu dva, transformacija može biti izvršena grupom poena
sa odgovarajućim osnovama za 𝑁 što prouzrokuje smanjivanje brzine ovog algoritma.
FFT algoritmi se u opštem slučaju dele u dve grupe – desetkovanje po vremenu i
desetkovanje po učestanosti. Koli – Tukijev FFT algoritam najpre ređa ulazne elemente u
obrnutom redu, a zatim obrazuje izlaznu transformaciju (desetkovanje po vremenu). Osnovna ideja
je da nizove dužine za 𝑁 razbijemo u dva niza dužine 𝑁
2 korišćenjem sledećeg identiteta:
𝐹𝑁 = ∑ 𝑓𝑘𝑒−2𝜋𝑖𝑛𝑘
𝑁
𝑁−1
𝑘=0
= ∑ 𝑒−
2𝜋𝑖𝑛𝑘𝑁2 + 𝑊𝑛
𝑁2−1
𝑘=0
∑ 𝑒−
2𝜋𝑖𝑛𝑘𝑁2 𝑓2𝑘+1
𝑁2−1
𝑘=0
= 𝐹𝑛𝑒 + 𝑊𝑚𝐹𝑛
𝑒
(5)
koji se naziva Danijelson – Lankosova lema.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 11
3. Diskretna kosinusna
transformacija
Za izradu ovog rada koristićemo osnovne principe diskretne kosinusne transformacije (eng.
Discrete Cosine Transform, u daljem tekstu DCT). DCT predstavlja tehniku za konverziju signala
u elementarne komponente frekvencija. Ona je široko rasprostranjena u postupcima kodiranja i
kompresije slika. Mi ćemo razviti neke jednostavne funkcije za korišćenje ove transformacije u
cilju rešavanja problema kompresije i kodiranja slika..
Nagli razvoj aplikacija za digitalne slike, koji uključuje objavljivanje istih na različitim
platformama, multimedijalno korišćenje, video pozivanje i televiziju visoke definicije (HDTV i
UHTV) je povećao potrebu za efikasnim i standardnim tehnikama kompresije. Usvojeni su sledeći
standardi:
1) JPEG, za kompresiju statičnih slika;
2) MPEG, za kompresiju videa;
3) CCITT H.261, za kompresiju video poziva.
Sva tri standarda koriste DCT za osnovnu tehniku kompresije. Mi ćemo se u ovom radu
fokusirati na kompresiju statičnih slika.
DCT je razvijen od strane Ahmeda, Natarajana i Raoa 1974. godine. On je razvijen po
ugledu na Diskretnu Furijeovu transformaciju, ali za razliku od nje koristi isključivo realne
brojeve. Prvu primenu za kompresiju i kodiranje slika su pronašli Čen i Prat (Chen, Pratt) 1984.
godine. Postoje dve osnovne varijante DCT – a, i to:
1) Jednodimenzionalna DCT i
2) Dvodimenzionalna DCT.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 12
3.1. Jednodimenzionalna DCT
Jednodimenzionalna konačna diskretna sekvenca poput x[n], n = 0, 1…, N – 1 može se
razviti u red ortogonalnih funkcija g[n, k], sa konačnim brojem članova, na sledeći način:
𝑥[𝑛] = ∑ 𝑋[𝑘]𝑔[𝑛, 𝑘], 𝑛 = 0, 1, … ,𝑁 − 1
𝑁−1
𝑘=0
gde su koeficijenti razvoja određeni izrazom:
(6)
𝑋[𝑘] = ∑ 𝑥[𝑛]𝑓[𝑛, 𝑘], 𝑘 = 0, 1, … ,𝑁 − 1
𝑛
𝑘=0
(7)
Diskretna funkcija f[n, k] naziva se jezgro direktne transformacije ili bazisna funkcija, a
funkcija g[n, k] se naziva jezgro inverzne transformacije. U matričnom obliku, jednačine (6) i (7)
izgledaju ovako:
XN = FN×NxN
xN = GN×NXN
(8)
Vektori XN i xN imaju sledeći oblik:
XN = (𝑋1, 𝑋2 …𝑋𝑛)𝑇
xN = (𝑥1, 𝑥2 …𝑥𝑛)𝑇
(9)
Ovde je FN×N=[f[n,k]] transformaciona matrica dimenzija N×N, a GN×N=[g[n, k]] matrica
inverzne transformacije istih dimenzija za koje važi:
GN×N= F-1N×N (10)
Skup funkcija f[n,k] zadovoljava osobinu ortonormalnosti (11) i uslov kompletnosti (12):
∑ 𝑓[𝑛, 𝑘]𝑓 ∗ [𝑛, 𝑘′] = 𝛿[𝑘 − 𝑘′]
𝑘
𝑛=0
(11)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 13
∑ 𝑓[𝑛, 𝑘]𝑓 ∗ [𝑛′, 𝑘] = 𝛿[𝑛 − 𝑛′]
𝑘
𝑛=0
(12)
Gde za 𝑓[𝑛, 𝑘] važi:
𝑓[𝑛, 𝑘] =∝𝑘 cos [𝜋(2𝑛 + 1)
2𝑁]
(13)
Dok za 𝛿[𝑘 − 𝑘′] važi:
𝛿[𝑘 − 𝑘′] =1
2𝜋∫ 𝑑𝑝 cos (𝑝𝑘 − 𝑝𝑘′)
∞
−∞
(14)
Vrste transformacione matrice FN×N čine skup bazisnih vektora u N dimenzionalnom vektorskom
prostoru. Oni predstavljaju skup ortonormalnih vektora pošto zadovoljavaju osobinu
ortonormalnosti (11).
3.2. Dvodimenzionalna DCT
Izvođenje DCT za dvodimenzionalne slike predstavlja jednostavnu generalizaciju
jednodimenzionalnog slučaja. Dvodimenzionalna DCT M×N matrice A je definisana na sledeći
način:
𝐵𝑝𝑞 =∝𝑝∝𝑞 ∑
𝑀−1
𝑚=0
∑ 𝐴𝑚𝑛𝑐𝑜𝑠𝜋(2𝑚 + 1)𝑝
2𝑀𝑐𝑜𝑠
𝜋(2𝑛 + 1)𝑞
2𝑁, 0≤𝑞≤𝑁−10≤𝑝≤𝑀−1
𝑁−1
𝑛=0
(15)
∝𝑝= {
1
√𝑀, 𝑝 = 0
√2/𝑀, 1 ≤ 𝑝 ≤ 𝑀 − 1
∝𝑞= {
1
√𝑁, 𝑞 = 0
√2/𝑀, 1 ≤ 𝑞 ≤ 𝑁 − 1
(16)
Inverzna DCT jednačina može biti predstavljena kao bilo koja suma funkcija MN u
sledećem obliku:
∝𝑝∝𝑞 𝑐𝑜𝑠𝜋(2𝑚 + 1)𝑝
2𝑀𝑐𝑜𝑠
𝜋(2𝑛 + 1)𝑞
2𝑁, 0≤𝑞≤𝑁−10≤𝑝≤𝑀−1
(17)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 14
Ove funkcije se nazivaju bazisne funkcije DCT. Koeficijent ove transformacije Bpq mogu
se smatrati kao težina koja se dodaje svakoj bazisnoj funkciji. Ukoliko imamo matricu 8×8, 64
bazisne funkcije su ilustrovane sledećom slikom.
Slika 1. 64 bazisne funkcije matrice 8×8
Na slici 1. vidimo da se horizontalne frekvencije povećavaju sa leva na desno, dok se
vertikalne povećavaju od vrha ka dnu. Bazisna funkcija sa konstantnim vrednostima u gornjem
levom ćošku se naziva DC bazisna funkcija, a odgovarajući DCT B00 koeficijent se naziva DC
koeficijent.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 15
Kao ilustracija dvodimenzionalne transformacije, primenićemo DCT na slici našeg
čuvenog naučnika Nikole Tesle. Data slika zauzima 307KB prostora na disku. Prikazivanje ove
slike u MATLAB – u vršimo sledećim kodom:
A = imread('tesla.jpg'); imshow(A)
Slika 2. Originalna slika
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 16
Za izvršavanje kompresije i dekompresije naše slike potrebno je otvoriti datoteku
imagec.m i podesiti putanju na odgovarajuću fasciklu. Obično MATLAB to automatski odradi
prilikom pokretanja kodova. Zatim pokrećemo kod klikom na taster RUN. MATLAB će nas pitati
za ime slike u navodnicima nad kojom želimo da izvršimo DCT. Za potrebe našeg primera
koristićemo sliku ’tesla.jpg’. Zbog obimnosti koda, on je dat u prilogu. Autor je potpisnik ovih
redova.
Kod će podeliti sliku u blokove dimenzija 8×8 piksela. Taj blok piksela se može videti u
obliku matrice:
B =
[ 255 234 255 255 255 255 255 255207 212 255 255 255 255 255 255216 195 225 255 252 255 254 247217 218 214 239 252 255 250 248218 230 205 218 251 255 246 252217 218 209 206 249 255 244 255212 202 222 208 243 253 247 255206 202 229 217 235 250 252 255]
Nule predstavljaju crnu boju, 255 belu, a sve vrednosti izmeću predstavljaju sivu. Mi ćemo
sa svake vrednosti odstraniti 128, i dobiti matricu:
f =
[ 87 106 127 127 127 127 127 12779 84 127 127 127 127 127 12788 67 97 127 124 127 126 11989 90 86 111 111 124 122 12090 102 77 90 123 127 118 12789 90 81 78 121 127 116 12784 74 94 80 115 125 119 12778 74 101 89 107 122 124 127]
Transponovana matrica ima sledeći oblik:
T =
[ 0,3536 0,3536 0,3536 0,3536 0,3536 0,3536 0,3536 0,35360,4904 0,4157 0,2778 0,0975 −0,0975 −0,2778 −0,4157 −0,47040,4619 0,1913 −0,1913 −0,4619 −0,1619 −0,1913 0,1913 0,46190,4157 −0,0975 −0,4904 −0,2778 0,2778 0,4904 0,0975 −0,41570,3536 −0,3536 −0,3536 0,3536 0,3536 −0,3536 −0,3536 0,35360,2778 −0,4904 0,0975 0,4157 −0,4157 −0,0975 0,4904 −0,27780,1913 −0,4619 0,4619 −0,1913 −0,1913 0,4619 −0,1619 0,19130,0975 −0,2778 0,4157 −0,4904 0,4904 0,4157 0,2778 −0,0975]
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 17
Kao što vidimo, transponovana matrica im 8 𝑥 8 oblik, gde se svaki element 𝑡𝑚𝑛
izračunava na sledeći način:
𝑡1𝑛 = √1
8
(18)
𝑡𝑚𝑛 = √1
4cos (
𝜋(2𝑛 − 1)(𝑚 − 1)
16)
(19)
Računamo 𝐹 = 𝑇𝑓𝑇’ i dobijamo sledeću matricu:
F =
[ 241,831 242,891 279,307 293,096 342,240 356,735 349,129 352,8461,960 12,290 31,792 53,834 15,728 3,283 7,965 −2,612
−9,146 −5,352 38,254 7,312 −6,579 −2,692 5,847 6,1504,998 26,741 −2,756 −18,649 5,395 1,884 −5,548 5,0341,414 20,153 −2,828 1,768 −2,121 −1,061 1,061 −0,7074,439 −3,247 −3,658 1,018 0,379 0,408 −0,451 −2,4433,788 −2,758 −7,426 1,946 −1,102 −0,033 0,257 −1,7822,341 −3,334 −4,393 0,724 −0,626 −0,068 0,266 −1,364 ]
Koristićemo sledeću matricu kvantizacije zvaničnog JPEG standarda:
Q =
[ 16 11 10 16 24 40 51 6112 12 14 19 26 58 60 5514 13 16 24 40 57 69 5614 17 22 29 51 87 80 6218 22 37 56 68 109 103 7724 35 55 64 81 104 113 9249 64 78 87 103 121 120 10172 92 95 98 112 100 103 99 ]
Primećujemo kako unosi u donjem desnom uglu teže većim brojevima.
Kvantizacija je definisana kao celobrojno deljenje svakog DCT koeficijenta sa
odgovarajućim koeficijentom navedene matrice kvantizacije, pomoću sledeće formule:
F𝑄(𝑢, 𝑣) = Celobrojno deljenje 𝐹(𝑢, 𝑣)
𝑄(𝑢, 𝑣)
(20)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 18
Dobijamo matricu koja ima sledeći oblik:
FQ =
[ 15 22 28 18 14 9 8 60 1 2 3 1 0 0 0
−1 0 2 0 0 0 0 00 2 0 −1 0 0 0 00 1 0 0 0 0 0 00 1 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0]
Poslednja matrica se sastoji od puno nula. Razlog tome je veća apsolutna vrednost
kvantizatora od apsolutnih vrednosti DCT koeficijenata koji posle celobrojnog deljenja postaju
nula. Koliko će elemenata matrice biti zaokruženo na nulu zavisi od sadržaja pojedinačnog bloka
i od izbora kvantizatorske tablice (da li se koristi standardna, za luminantne komponente, kao u
našem slučaju, ili neka druga). Postupkom kvantizacije se smanjio broj potrebnih bitova za prikaz
DCT koeficijenta. To u praksi znači da naša slika zauzima manje prostora na disku.
Evo primera bloka piksela pre i posle kodovanja:
1) 2)
Slika 3. 1) Originalni blok pre bilo kakve obrade; 2) Blok posle dekompresije
U našem primeru vidimo razliku između ova dva bloka. I pored toga, on sadrži dovoljno
informacija za približnu rekonstrukciju iste slike.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 19
Postupak se ponavlja za svaki blok 8 × 8 ove slike, a zatim se svaki blok snima na disk.
Dekompresija i dekodiranje slike podrazumeva isti postupak kao gore navedeni u suprotnom
rasporedu. Dati kod na izlazu prikazuje sliku posle dekompresije. Ukoliko ovu sliku sačuvamo u
jpg formatu, poput originalne, koristeći ugrađenu „save as“ komandu, primetićemo da izlazna slika
ima višestruko manju veličinu, odnosno 76.7KB. Originalna slika je zauzimala 307KB, odnosno
tačno četiri puta više.
Pogledaćemo sada kompletnu sliku pre i posle obrade:
1) 2)
Slika 4. 1) Slika pre kompresije i kodovanja; 2) Slika posle kompresije i kodovanja
Kao što vidimo na slici 4., slika po završetku ovog postupka se razlikuje od originalne
slike, pre svega fine nijanse sive boje su izgubljene a sačuvani su kontrasni tonovi. Međutim,
ušteda prostora prilikom ovog postupka je izuzetno velika i ona opravdava gubitke u kvalitetu.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 20
4. Restauracija slike
Pomoću MATLAB – a moguće je kreirati kod koji služi za restauraciju slika. Restauracija
je proces obrade oštećene slike u cilju uklanjanja određenih degradacija u kvalitetu da bi se kao
rezultat dobila slika što bliža originalnoj slici. Za razliku od tehnika poboljšavanja vizuelnog
aspekta slike, koji je većinom subjektivan proces, restauracija je najvećim delom objektivan
proces, gde uklanjamo degradaciju koristeći znanje koje smo već stekli o načinu na kojem je
degradacija nastala. Za uklanjanje degradacija koristimo inverzni postupak u cilju restauracije
originalne slike.
Kao primer prethodne tvrdnje možemo navesti povećanje kontrasta, zato što je slika sa više
kontrasta često ugodnija ljudskom oku, pa stoga ta tehnika spada u tehnike poboljšavanja slike. Za
razliku od njega, odstranjivanje zamućenja slike (eng. deblurring) predstavlja jednu od osnovnih
tehnika restauracije slika.
Određena slika može se smatrati „lošom“ zbog mnogo razloga. Svako ko je ikada uslikao
sliku, bilo ona digitalnog ili analognog oblika, zna kako zamrljana ili zamućena slika izgleda. To
zamućenje može nastati iz mnogo različitih razloga, kao što je, na primer, defokusiranje objektiva
kamere. Tom prilikom, zamućenje dolazi od same kamere, tačnije od optičkog sistema objektiva.
Bez obzira koliko se trudili da pravilno fokusiramo kameru, postoje fizički limiti same
konstrukcije koji nas sprečavaju da napravimo sliku idealne oštrine. Neki od ovih limita nastaju
zato što svetlo putuje različitim talasnim dužinama (različitim bojama) i ulazi u kameru, a tačan
put kretanja svetla zavisi od njegove talasne dužine. Kamere koje imaju objektive visokog kvaliteta
kompenzuju ovaj problem koliko je to moguće.
Nekada ovakva ograničenja nisu problem, ali ponekad ove male nesavršenosti moramo
uzeti u obzir, kao na primer u mikroskopiji.
Nekada zamućenje slike nastaje izvan mehanizma kamere i van kontrole fotografa. Dobar
primer je zamućenje prilikom pokreta (eng. motion blur) – objekat se pomerio dok je zatvarač
(eng. shutter) aparata bio otvoren, što je za rezultat imalo zamrljan objekat na slici. Isti problem se
javlja ako se aparat pomera prilikom fotografisanja.
Zamućene slike nisu vizuelno privlačne i mnogi programi za obradu slika sadrže osnovne
elemente za korekciju ovog problema. Mi ćemo za rešavanje istog koristiti MATLAB.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 21
4.1. Model procesa degradacije i restauracije
slika
Kao što vidimo na slici 5, proces degradacije je modelovan kao funkcija, koja zajedno za
šumom operiše na ulaznoj slici f(x, y) i za rezultat daje izlaznu sliku degradiranog kvaliteta g(x, y).
Ukoliko imamo g(x, y), neko znanje o funkcije degradacije H i o stepenu šuma µ(x, y), cilj
restauracije je doći do procenjenog ḟ(x, y)originalne slike. Mi želimo da procena bude što bliža
originalnoj slici, zbog čega mi moramo znati što više o H i µ.
Slika 5. Model procesa degradacije i restauracije slike
Prostorni domen degradirane slike dat je sa:
𝑔(𝑥, 𝑦) = ℎ(𝑥, 𝑦) ∗ 𝑓(𝑥, 𝑦) + 𝜇(𝑥, 𝑦) (21)
Gde je h(x, y) prostorni domen funkcije degradacije, 𝜇 predstavlja šum, a simbol *
predstavlja konvoluciju. Skup u prostornom domenu je jednak množenju u frekvencijskom
domenu, pa je model predstavljen u jednačini (14) ekvivalentan sledećem predstavljanju
frekvencijskog domena:
𝐺(𝑢, 𝑣) = 𝐻(𝑢, 𝑣)𝐹(𝑢, 𝑣) + 𝑁(𝑢, 𝑣) (22)
gde su velikim slovima označene Furijeove transformacije (eng. Fourier transformations)
odgovarajućih izraza iz jednačine (14). Ove dve jednačine čine osnovu ovog poglavlja.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 22
4.2. Model šuma
Osnovni izvori šuma u digitalnim slikama javljaju se prilikom pravljenja same slike
(digitalizacije), ili prilikom prenosa iste. Performanse objektiva aparata su pod uticajem mnogih
faktora, kao što su uticaj okruženja prilikom slikanja kao i kvalitet samih komponenti. Kod
pravljenja fotografija digitalnim aparatima, nivoi svetlosti i temperatura senzora su najveći razlog
stvaranja šuma na slici. Takođe, oštećenja mogu nastati usled smetnji na kanalu prilikom prenosa
slike.
Da bismo odstranili šum sa slike, jako je bitno definisati prostorni domen šuma i u kakvoj
je vezi sa samom slikom. Frekvencijska svojstva se odnose na frekvencijski sadržaj šuma u
Furijeovom smislu (npr. da li je suprotna elektromagnetnom spektru). Na primer, kada je Furijeov
spektar šuma konstantan, šum nazivamo belim šumom. Ova terminologija proističe od fizičkih
svojstava belog svetla, koji sadrži gotovo sve frekvencije vidljivog spektra u jednakim
proporcijama.
Sa izuzetkom periodičnog šuma, pretpostavićemo da je šum nezavisan od prostornih
koordinata i da nije povezan sa samom slikom. Iako su ove pretpostavke u nekim slučajevima
delimično netačne (npr. rendgenski snimci) kompleksnost ovakvih šumova su izvan granica ovog
master rada.
Na osnovu prethodne pretpostavke, opis prostornog šuma kojim ćemo se mi baviti zavisi
od statističkog ponašanja sivih vrednosti komponente šuma sa modela predstavljenog na slici 1.
Oni se mogu smatrati nasumičnim, a opisuju se funkcijom gustine verovatnoće (eng. Probability
density function, u daljem tekstu PDF). Opisaćemo najčešće vrste PDF – a:
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 23
Gausov šum
Model Gausovog šuma (eng. Gaussian noise), koji se često nazivan i „normalan šum“, se
zbog svoje matematičke fleksibilnosti u prostornom i frekvencijskom domenu često susreće u
praksi.
PDF Gausove slučajne promenljive z je dat sa:
𝑝(𝑧) =1
√2𝜋𝜎𝑐(𝑧−𝜇)2/2𝜎2
(23)
gde z predstavlja nivo sive, µ je srednja vrednost od z i 𝜎 standardna devijacija. Kada je
standardna devijacija kvadrirana, 𝜎2, nazivamo ga varijansa od z. Grafik te funkcije je prikazan na
slici 2. a). Kada je z opisan jednačinom (16), oko 70% njegove vrednosti će biti u opsegu [(µ
- 𝜎), (µ + 𝜎)], a oko 95% će biti u opsegu [(µ - 2 𝜎), (µ + 2𝜎)].
Rejlijev šum
PDF Rejlijevog šuma (eng. Rayleigh noise) je dat sa:
𝑝(𝑧) = {
2𝑏
(𝑧 − 𝑎)𝑒−(𝑧−𝑎)2
𝑏
0
𝑧𝑎 𝑧 ≥ 𝑎
𝑧𝑎 𝑧 < 𝑎
(24)
srednja vrednost i varijanse gustine su date sa:
μ = a + √𝜋𝑏/4 (25)
i
σ2 =𝑏(4 − 𝜋)
4
(26)
Grafik gustine Rejlijevog šuma je prikazan na slici 2. b). Primećujemo odstupanje od
grafika PDF Gausove slučajne promenljive i činjenicu da je osnovni okvir nakrivljen na desno.
Rejlijeva gustina može biti korisna za aproksimaciju nakrivljenih histograma.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 24
Erlangov (Gama) šum
PDF Erlangovog ili Gama šuma (eng. Erlang (Gamma) noise) je dat sa:
𝑝(𝑧) = {
𝑎𝑏𝑧𝑏−1
(𝑏 − 1)!𝑒−𝑎𝑧
0
𝑧𝑎 𝑧 ≥ 0
𝑧𝑎 𝑧 < 0
(27)
gde su parametri poput a>0 pozitivne celobrojne vrednosti, a „!“ predstavlja faktorijel.
Srednja vrednost i varijanse u gustini date su sa:
μ =𝑏
𝑎
(28)
i
σ2 =𝑏
𝑎2
(29)
Grafik gustine ovog šuma dat je na slici 2. c). Iako se jednačina (20) često odnosi na Gama
šum, preciznije bi bilo reći da se to odnosi samo ukoliko je imenilac gama funkcija Г(b). Kada je
imenilac definisan kao na slici, gustina se naziva Erlang gustina.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 25
Slika 6. Neke važnije funkcije verovatne gustine
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 26
Eksponencijalni šum
PDF eksponencijalnog šuma dat je na sledeći način:
𝑝(𝑧) = {𝑎𝑒−𝑎𝑧
0
𝑧𝑎 𝑧 ≥ 0
𝑧𝑎 𝑧 < 0
(30)
gde je a>0. Srednja vrednost i varijanse u gustini date su sa:
μ =1
𝑎
(31)
i
σ2 =1
𝑎2
(32)
Ova funkcija je posebna vrsta Erlang PDF – a, sa b = 1. Grafik gustine ovog šuma dat je
na slici 2. d).
Jednolični šum
PDF jednoličnog šuma (eng. Uniform noise) dat je na sledeći način:
𝑝(𝑧) = {
1𝑏 − 𝑎
0
𝑎𝑘𝑜 𝑗𝑒 𝑎 ≤ 𝑧 ≥ 𝑏
𝑖𝑛𝑎č𝑒
(33)
Srednja vrednost i varijanse u gustini date su sa:
μ =𝑎 + 𝑏
2
(34)
a njegove varijanse sa:
σ2 =(𝑏 − 𝑎)2
12
(35)
Slika 6. e) pokazuje gustinu jednoličnog šuma.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 27
Impulsni (so – i – biber) šum
PDF (bipolarnog) impulsnog šuma (eng. Impulse (salt – and – pepper) noise) je dat sa:
𝑝(𝑧) = {
𝑃𝑎 𝑧𝑎 𝑧 = 𝑎𝑃𝑏 𝑧𝑎 𝑧 = 𝑏0 𝑢 𝑠𝑢𝑝𝑟𝑜𝑡𝑛𝑜𝑚
(36)
Ako je b>a, nivo sive b će se pojaviti kao svetla tačka na slici. U suprotnom slučaju, nivo
a će se pojaviti kao tamna tačka. Ukoliko je 𝑃𝑎 ili 𝑃𝑏 nula, impulsni šum nazivamo unipolarni. Ako
nijedna verovatnoća nije jednaka nuli, i ako su približno jednake, impulsne vrednosti šuma će
podsećati na zrnca bibera i soli koja su nasumično raspoređeni po slici. Zbog toga, bipolarni
impulsni šum se takođe naziva so – i – biber šum.
Impulsi ovog šuma mogu biti pozitivni ili negativni. Skaliranje je često deo procesa
digitalizacije slika. Zato što je impulsno oštećenje obično veliko u poređenju sa snagom signala
slika, impulsni šum je generalno digitalizovan kao ekstremna vrednost (čista bela ili crna) na slici.
Zbog toga, pretpostavljamo da su a i b zasićene vrednosti, u smislu da su jednake minimalnoj i
maksimalnoj dozvoljenoj vrednosti digitalizovane slike. Kao rezultat, negativni impulsi se
pojavljuju kao crne (biber) tačke na slici. Iz istog razloga, pozitivni impulsi se pojavljuju kao beli
(so) šum. Za 8 – bit sliku ovo znači da je a = 0 (crno) i b = 255 (belo). Slika 6. f) nam pokazuje
PDF impulsnog šuma.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 28
Kao što smo već naveli, pomoću MATLAB – a je moguće je dodavati i odstranjivati šum
sa slika. Na sledećem primeru imamo sliku na kojoj je dodat so – i – biber šum sa vrednošću 20%
i drugu sliku na kojoj je taj šum odstranjen pomoću median filtera:
slika = imread('Moon.tif');
[r c]=size(slika);
d=ndims(slika);
if d == 3
slika = rgb2gray(slika);
end
slika = double(slika);
slika = slika/225;
slika1=imnoise(slika,'salt & pepper',0.3);
slika2 = medfilt2( slika1 ,[5 5]);
imshow(slika2);
clc;
psnr( slika1 , slika2 );
subplot(1,2,1);
imshow(slika1);
title('Slika sa šumom');
subplot(1,2,2);
imshow(slika2);
title('Slika bez šuma');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 29
Na slici 7. vidimo rezultat inicijalizacije našeg koda:
Slika 7: Primer dodavanja i odstranjivanja šuma sa slike Moon.tif
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 30
4.2. Modeli zamućenja slike
Uzroci degradacije slike mogu biti različiti: zamućenost usled lošeg fokusiranja, pokreti
objekata i/ili pozadine, šum, proces kvantizacije, mehanički problemi, neodgovarajuća
osvetljenost… Ovo je posebno izraženo u poslednjih nekoliko godina, kada je većina slika
napravljena mobilnim telefonima, koji obično imaju male senzore i uzan otvor blende. Iako mnogi
programi za manipulaciju digitalnim slikama sadrže korisne osnovne alatke za popravljanje
kvaliteta slike, poput „izoštravanja“ kontura slika, oni ne mogu da nam pomognu kod većih
zamućivanja koja često nastaju u praksi. Mi ćemo pretpostaviti da zamućivanje može biti opisano
matematičkim modelom, i taj model ćemo koristiti za rekonstrukciju oštrije i vizuelno privlačnije
slike. Druga pretpostavka je da je zamućivanje, odnosno operacija zbog koje smo od oštre slike
dobili zamućenu, linearna. Ovo je najčešće slučaj u praksi, a činjenica je da nam prilikom procesa
rekonstrukcije slika pomažu alati iz linearne algebre i matričnih računanja.
Pre nego što počnemo sa restauracijom slika, moramo napraviti matematički model
nepoznate originalne slike. Na slici 8. vidimo „pravi“ prizor, a sa desne strane zamagljenu verziju
iste slike. Zamagljena verzija je rezultat koji bi fotograf dobio ukoliko ne izfokusira prizor prilikom
slikanja.
Slika 8. Oštra slika (levo) i odgovarajuća zamućena slika (desno)
Crno – bela slika, poput slike 4., se može predstaviti kao matrica dimenzija m × n čiji
elementi, pikseli, predstavljaju jačinu osvetljenja. Tačnije, sa 𝑋 ∈ 𝑅𝑚×𝑛 predstavlja željenu oštru
sliku, dok 𝐵 ∈ 𝑅𝑚×𝑛 predstavlja snimljenu zamućenu sliku.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 31
Neophodno je napraviti model zamućenja koji se može primeniti u praksi. Cilj tog
linearnog modela je zamena mesta elemenata slike X i B u kolonama vektora tako što ređamo
kolone ovih slika u dva duga vektora x i b, oba dužine N = m n. Matematički oblik ovog operatora
je vec, na primer:
𝑥 = 𝑣𝑒𝑐(𝑋) = [𝑥11::
𝑥𝑛1
𝑥12::
𝑥𝑛2
...::…
𝑥1𝑛::
𝑥𝑛𝑛
] ∈ 𝑅𝑁 , 𝑏 = 𝑣𝑒𝑐(𝐵) = [𝑏11::
𝑏𝑛1
𝑏12::
𝑏𝑛2
...::…
𝑏1𝑛::
𝑏𝑛𝑛
] ∈ 𝑅𝑁 , 𝑁 = 𝑛2
Pošto smo pretpostavili da je zamućenje linearna operacija, mora postojati velika matrica
zamućenja 𝐴 ∈ 𝑅𝑁×𝑁, takva da su x i b povezani linearni modeli:
𝐴𝑥 = 𝑏 (37)
i ovo je osnovni model zamućenja slike.
Kada pričamo o snimljenoj zamućenoj slici, koristimo oznaku matrice B za oznaku niza
slike, i b = vec(B) kada pričamo o vektorima. Takođe, pretpostavka je da je originalna slika istih
dimenzija kao zamućena, i to možemo predstaviti ili kao m × n matricu X ili kao vektor x = vec(X).
Dakle, snimljena slika b je zamućena verzija idealne slike x.
U linearnom modelu, postoji velika matrica A dimenzija N × N, sa N = mn, takvi da su b i
x povezani relacijom (15). Matrica A predstavlja zamućenje koje se dešava u procesu zamućivanja
slike.
Ovu matricu možemo objasniti na sledećem praktičnom primeru: zamislite potpuno crnu
sliku, sa izuzetkom jednog belog piksela. Ako napravimo fotografiju te slike, operacija zamućenja
će prouzrokovati širenje tog piksela na okolne slike, što je predstavljeno na slici 9. Taj jedini svetli
piksel nazvaćemo izvor tačke (eng. Point source), a funkciju koja opisuje zamućivanje i
rezultujuću sliku tačke svetlosti nazvaćemo funkcija širenja tačke (eng. Point spread function, u
daljem tekstu PSF).
Slika 9. Levo: jedan svetli piksel, koji nazivamo izvor tačke; desno: zamućena tačka svetlosti,
nazvana funkcija širenja tačke
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 32
Matematički, izvor tačke je ekvivalentan nizu koji se sastoji od svih nula, sa izuzetkom
jednog piksela čija je vrednost jednaka jedinici. Ukoliko definišemo x = ei, da bude i – ti jedinični
vektor, koji se sastoji od svih nula osim i – tog unosa, koji je jedinica. Proces pravljenja slike od
originalne se može predstaviti jednačinom
𝐴𝑒𝑖 = 𝐴(: , 𝑖) = 𝑘𝑜𝑙𝑜𝑛𝑎 𝑖 𝑜𝑑 𝐴 (38)
Ako ovaj proces ponovimo za sve jedinične vektore ei za i = 1, . . ., N, onda ćemo pribaviti
kompletnu informaciju o matrici A.
Moguće je utvrditi mnoga bitna svojstva procesa zamućenja tako što gledamo slike
različitih PSF – ova. Na primer, na slici 10. vidimo nekoliko PSF – ova u različitim lokacijama
unutar granica slike. Slike su veličine 120 × 120, a jedinični vektor ei koji se koristi za konstrukciju
ovih PSF – ova odgovara za i = 3500, 7150 i 12555.
Slika 10. Gore: zamagljena slika jednog piksela (levo) i zumirani izvor tačke (desno).
Dole: dve zamućene slike jednog piksela blizu ivica
U navedenom primeru, primetićemo da je PSF jednak bez obzira na lokaciju izvora tačke.
U tom slučaju, kažemo da je zamućenje prostorno invarijantno (eng. spatial invariant). To nije
uvek slučaj, ali se dešava često, pa ćemo za potrebu ovog rada uzeti kao pretpostavku prostornu
invariaciju.
Posledica ovoga je linearna i lokalna priroda zamućenja, i da bismo sačuvali memoriju mi
često možemo predstaviti PSF kao niz P mnogo manjih dimenzija od zamagljene slike. Na našem
primeru PSF ima veličinu 31 × 31. P predstavlja PSF niz.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 33
Ipak, treba imati na umu da mnogi algoritmi protiv zamućivanja traže da PSF niz bude istih
dimenzija kao sama zamagljena slika. U tom slučaju, mali PSF niz se ubacuje u veći niz sastavljen
od nula. Ovaj proces se naziva „ispunjavanje nulama“ (eng. Zero padding).
U nekim slučajevima PSF se može opisati analitički i P može biti sastavljeno iz funkcije.
Primer je zamućenje horizontalnog kretanja (eng. Horizontal motion blur), koji izvor tačke
pretvara u liniju. Ako ta linija pokriva r piksela – po kojima je svetlost rasprostranjena – onda je
dužina svakog elementa PSF niza koji je različit od nule dužine r – 1 . Ovo je prikazano na slici 11.
Slika 11. Primeri četiri PSF – a. U sva četiri primera centar PSF – a se
podudara sa centrom PSF niza
U drugim slučajevima, poznavanje fizičkih procesa koji prouzrokuju zamućenje nam pruža
eksplicitnu formulaciju PSF – a. Tada su elementi PSF niza dati tačnim matematičkim izrazom.
Na primer, elementi pij PSF niza za zamućenje van – fokusa (eng. Out – of – focus blur) dati su
izrazom:
𝑃𝑖𝑗 = {1
𝜋𝑟2
0
𝑎𝑘𝑜 (𝑖 − 𝑘)2 + (𝑗 − 𝑙)2 ≤ 𝑟2
𝑛𝑎 𝑑𝑟𝑢𝑔𝑖𝑚 𝑚𝑒𝑠𝑡𝑖𝑚𝑎
(39)
gde je (k, l) centar P, a r predstavlja prečnik zamućenja.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 34
PSF za zamućenje atmosferske uskomešanosti (eng. Atmospheric turbulence blur) može
biti opisano dvodimenzionalnom Gausovom funcijom, i elementi neskaliranog PSF niza su dati sa
𝑃𝑖𝑗 = 𝑒𝑥𝑝 (−1
2[𝑖 − 𝑘
𝑗 − 𝑙]𝑇
[𝑠1
2 𝜌2
𝜌2 𝑠22]
−1
[𝑖 − 𝑘
𝑗 − 𝑙])
(40)
gde parametri s1, s2 i 𝜌 određuju širinu i orijentaciju PSF – a, koji je centriran na elementu
(k, l) u P. Uvek treba skalirati P tako da zbir elemenata bude jednak 1. Gausova funkcija se raspada
eksponencijalno kako se udaljavamo od centra i razumljivo je skraćivanje vrednosti PSF niza kako
se ono raspada, recimo faktorom 104 ili 108.
PSF astronomskog teleskopa je često modelovan takozvanom Mofat funkcijom (eng.
Moffat function), i za nju ovi PSF elementi od neskaliranog PSF niza su dati sa:
𝑃𝑖𝑗 = (1 + [𝑖 − 𝑘
𝑗 − 𝑙]𝑇
[𝑠1
2 𝜌2
𝜌2 𝑠22]
−1
[𝑖 − 𝑘
𝑗 − 𝑙])
−𝛽
(41)
Poput Gausove SPF funkcije za atmosfersku uskomešanost parametri s1, s2 i 𝜌 određuju
širinu i orijentaciju PSF – a, a P treba biti skalirano tako da elementi imaju zbir 1. Dodatan
pozitivan parametar 𝛽 kontroliše raspadanje PSF – a, koji je sporiji od Gausovog PSF – a.
Ukoliko je 𝜌 = 0 u formulama za Gausovo i Mofat zamućenje, onda je PSF simetričan po
horizontalnoj i vertikalnoj osi, a formule imaju prostije oblike:
𝑃𝑖𝑗 = 𝑒𝑥𝑝 (−1
2(𝑖 − 𝑘
𝑠1)2
−1
2(𝑗 − 𝑙
𝑠2)2
) (42)
i
𝑃𝑖𝑗 = 𝑒𝑥𝑝 (1 (𝑖 − 𝑘
𝑠1)2
+ (𝑗 − 𝑙
𝑠2)2
)
−𝛽
(43)
Ukoliko je 𝑠1 = 𝑠2 onda su PSF simetrične.
Kada jednom odredimo PSF niz, uvek možemo konstruisati matricu zamućivanja A kolonu
po kolonu, jednostavno stavljajući elemente P na odgovarajuće pozicije, ostavljajući nule na
drugim mestima u koloni.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 35
Ukoliko želimo da izračunamo zamućenu sliku B piksel po piksel (data nam je oštra slika
X), onda treba da izračunamo
𝑏𝑖 = 𝑒𝑖𝑇𝑏 = 𝑒𝑖
𝑇𝐴𝑥 = 𝐴(𝑖, : )𝑥 (44)
Pošto mi treba da radimo sa redovima A, a ne sa kolonama, izračunaćemo svaki piksel
zamućene slike kao težinsku aritmetičku sredinu (ili prosečna, eng. weighted sum) odgovarajućih
elemenata i njemu susednih u oštroj slici. Težine (eng. weights) su elementi reda u A. Alternativno,
mi možemo koristiti činjenicu da su težine date vrednostima piksela PSF niza P, i da je operacija
težinska aritmetička sredina poznata u matematici i obradi slike kao dvodimenzionalni skup.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 36
4.3. Restauracija zamućene slike
u MATLAB – u
Za restauraciju ćemo koristiti Vinerov filter (eng. Wiener filter). Ime je dobio po Norbertu
Vineru (eng. Norbert Wiener) koji je prvi predložio ovaj metod 1942. godine. On predstavlja jedan
od prvih i najpoznatijih pristupa ka linearnoj restauraciji slika. Vinerov filter traži procenjeni ḟ koji
minimizira statističku funkciju greške:
𝑒2 = 𝐸{(𝑓 − ḟ)2} (45)
gde je E očekivana vrednost operatora a f je nedegradirana slika. Rešenje ovog izraza je u
frekvencijskom domenu:
�̂�(𝑢, 𝑣) =
[
1
𝐻(𝑢, 𝑣)
|𝐻(𝑢, 𝑣)|2
|𝐻(𝑢, 𝑣)|2 +𝑆𝜇(𝑢, 𝑣)
𝑆𝑓(𝑢, 𝑣)]
𝐺(𝑢, 𝑣)
(46)
gde su:
𝐻(𝑢, 𝑣) = funkcija degradacije
|𝐻(𝑢, 𝑣)|2 = 𝐻 ∗ (𝑢, 𝑣)𝐻(𝑢, 𝑣)
𝐻 ∗ (𝑢, 𝑣) = kompleksna konjugovana vrednost od 𝐻(𝑢, 𝑣)
𝑆𝜇(𝑢, 𝑣) = |𝑁(𝑢, 𝑣)|2 = spektar snage šuma
𝑆𝑓(𝑢, 𝑣) = |𝐹(𝑢, 𝑣)|2 = spektar snage degradirane slike
Odnos 𝑆𝜇(𝑢,𝑣)
𝑆𝑓(𝑢,𝑣) nazivamo odnos signala – do – šuma (eng. Noise – to – signal ratio, u daljem
tekstu NSR). Da bismo videli da li je spektar snage šuma jednak jedinici za sve relevantne
vrednosti u i v, ovaj odnos postaje nula i Vinerov filter se redukuje na običan inverzni filter.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 37
Odnos prosečne jačine šuma i prosečne snage slike je definisan sa:
𝜇𝐴 =1
𝑀𝑁∑∑𝑆𝜇(𝑢, 𝑣)
𝑣𝑢
(47)
i
𝐹𝐴 =1
𝑀𝑁∑∑𝑆𝑓(𝑢, 𝑣)
𝑣𝑢
(48)
Gde su M i N oznake vertikalne i horizontalne veličine nizova slike i šuma, respektivno.
Ove veličine su skalarne konstante i njihov odnos
𝑅 =𝜇𝐴
𝑓𝐴 (49)
koji je takođe skalarna vrednost, se ponekad koristi za generisanje niza konstanti umesto funkcije 𝑆𝜇(𝑢,𝑣)
𝑆𝑓(𝑢,𝑣). U tom slučaju, čak i kada ne znamo stvarni odnos, interaktivno eksperimentisanje postaje
prosto, tako što podešavamo konstantu i gledamo rezultate restauracije. Ukoliko umesto 𝑆𝜇(𝑢,𝑣)
𝑆𝑓(𝑢,𝑣)
stavimo niz konstanti u odgovarajuću jednačinu filtera dobijamo tzv. parametarski Vinerov filter.
Kao što ćemo videti u našem primeru, prosta upotreba ovog filtera nam daje izuzetno upotrebljive
rezultate restauracije slika.
Najpre ćemo kreirati zamućenu sliku sa šumom, a onda ćemo primeniti funkcije
dekonvolucije. IPT sadrži četiri funkcije za odstranjivanje zamućenja. Sve prihvataju PSF i
zamućenu sliku kao svoj primarni argument.
deconvwnr – Koristi rešenje najmanjeg kvadrata, koristeći Vinerov filter. Za restauraciju je
potrebno uneti određene informacije o šumu da bismo smanjili oštećenja koja nastaju prilikom
odstranjivanja zamućenja.
deconvreg – Implementira rešenje ograničenja najmanjeg kvadrata, koristeći regulisan filter,
gde postavljamo određena ograničenja na izlaznu sliku. Kao i u prethodnoj funkciji, moramo uneti
određene informacije o šumu za optimalni rezultat.
deconvblind – Implementira algoritam slepe dekonvolucije, koja vrši odstranjivanje
zamućenja bez znanja o PSF.
deconvlucy – Implementira ubrzani i prigušeni Lusi – Ričardson algoritam. Ova funkcija vrši
više ponavljanja, koristi tehnike optimizacije i Poisonove statistike. Nije potrebno uneti
informacije o dodatom šumu na oštećenoj slici.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 38
Ispitaćemo rezultate restauracije dobijene svakom od ovih funkcija.
U prvom primeru ćemo koristiti funkciju deconvwnr da izvršimo restauraciju. Ova
funkcija predstavlja implementaciju Vinerovog filtera i deo je svakog IPT. Originalnu sliku ćemo
prikazati na sledeći način:
I = im2double(imread('cameraman.tif'));
imshow(I);
title('Originalna slika');
Slika 12. Originalna slika „cameraman.tif“ koja se nalazi u sastavu
programskog paketa MATLAB
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 39
Sledećim kodom ćemo simulirati zamućenje:
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
zamucena = imfilter(I, PSF, 'conv', 'circular');
figure, imshow(zamucena)
title('Simulacija zamucenja')
Slika 13. Originalna slika na kojoj je simulirano zamućenje kretanja (eng motion blur)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 40
Šum ćemo ovoj slici dodati na sledeći način:
noise_mean = 0;
noise_var = 0.0001;
zamucena_sum = imnoise(zamucena, 'gaussian', ...
noise_mean, noise_var);
figure, imshow(zamucena_sum)
title('Simulacija zamucenja i šuma na slici')
Slika 14. Slika koja je nastala dodavanjem šuma na sliku 12.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 41
Sada ćemo probati restauraciju slike 12. pod pretpostavkom da na njoj nema šuma. Zbog
toga postavljamo da je NSR = 0:
procenjena_nsr = 0;
wnr2 = deconvwnr(zamucena_sum, PSF, procenjena_nsr);
figure, imshow(wnr2)
title('Restoracija zamucene slike koristeci NSR = 0')
Slika 15. Prvi pokušaj restauracije slike
Primetićemo da rezultati nisu zadovoljavajući i da se originalna slika jedva naslućuje. Zato
ćemo pokušati restauraciju koristeći bolju procenu NSR – a:
procenjena_nsr = noise_var / var(I(:));
wnr3 = deconvwnr(zamucena_sum, PSF, procenjena_nsr);
figure, imshow(wnr3)
title('Restauracija zamucene slike koristeci procenjeni NSR');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 42
Slika 16. Konačna verzija restaurisane slike korišćenjem funkcije deconwnr, odnosno
Vinerovim filterom
Kao što na slici 16. vidimo, rezultat restauracije je blizak originalu, iako još uvek imamo
šum na slici. Pošto znamo originalnu sliku i funkciju šuma, mi možemo pretpostaviti tačne
parametre, i slika 16. je najbliže što možemo doći originalu koristeći Vinerov filter u ovom slučaju.
U praksi imamo mnogo veći izazov, kada jedna (ili više) ovih stavki nije poznata. Zato moramo
eksperimentisati sa drugim funkcijama i filterima, sve dok ne dobijemo neki zadovoljavajući
rezultat.
U sledećem primeru ćemo ispitati rezultate restauracije zamućene slike koristeći
regularisan filter (eng. regularized filter). MATLAB komanda za regularisan filter je
deconvreg. To je jedna od osnovnih funkcija dekonvolucije. Radi bližeg upoređivanja rezultata
restauracije, zamutićemo i dodaćemo šum na potpuno istu sliku kao u prethodnom primeru
(cameraman.tif) na isti način. Dobijamo rezultat identičan slici 14., pa zbog toga ne navodimo isti
kod.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 43
Pretpostavka prilikom korišćenja navedene komande je da se koristi slika sa PSF – om i na
kojoj se nalazi šum. Navedeni kod sliku posmatra kao N dimenzionalnu matricu. Uvodimo
LRANGE koji predstavlja vektor podešavajući oblast dok ne dobijemo željeni rezultat. Algoritam
pronalazi optimalni Lagrange multiplikator LAGRA unutar LRANGE oblasti. Ispitaćemo
rezultate koje dobijamo povećavanjem navedenog multiplikatora 10 puta, kao i smanjivanjem 10
puta. Kod koji koristimo je sledeći:
subplot(221);
imshow(I);
title('Originalna Slika');
subplot(222);
imshow(zamucena_sum);
title('Zamucena slika');
subplot(223);
imshow(deconvreg(zamucena_sum,PSF,[],LAGRA*10));
title('Rezultat restauracije povecanjem LAGRA 10 puta');
subplot(224);
imshow(deconvreg(zamucena_sum,PSF,[],LAGRA/10));
title('Rezultat restauracije smanjivanjem LAGRA 10 puta');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 44
Zbog preglednosti smo originalnu sliku, sliku sa zamućenjem i šumom, kao i sliku sa dva
različita nivoa multiplikatora predstavili u istom prozoru. Rezultat vidimo na slici 17:
Slika 17. Primer restauracije korišćenjem deconvreg funkcije, odnosno regularisanim filterom
Kao što na slici 17. vidimo, korišćenjem ove funkcije dobijamo sasvim upotrebljive
rezultate, sa primetno manje šuma u odnosu na prošli primer. Međutim, konačna slika ima izražen
efekat „prstena“ (eng. ringing). Ovaj efekat se može delimično smanjiti korišćenjem edgetaper
funkcije pre pozivanja deconverg funkcije:
I = edgetaper(I,PSF);
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 45
Međutim krajnji rezultat je približno isti navedenom na slici 16. Zbog toga ćemo nastaviti
sa eksperimentisanjem sa drugim funkcijama za dekonvoluciju.
Sledeći metod koji ćemo primeniti na našem primeru je slepa dekonvolucija (eng. blind
deconvolution). MATLAB komanda za slepu dekonvoluciju je deconvblind. Koristićemo istu
početnu sliku i isti način zamućenja i dodavanja šuma kao i u prethodnom primeru, pa zato nećemo
navoditi taj deo koda.
Da bismo ilustrovali važnost poznavanja veličine prave PSF, koristićemo kod koji vrši tri
restauracije. Svaki put rekonstrukcija PSF – a počinje od homogenog niza koji se sastoji od
jedinica.
Prilikom prvog pokušaja restauracije ovim metodom, koristimo niz smanjene veličine,
UNDERPSF, za početno pogađanje PSF. Veličina UNDERPSF niza je 4 piksela kraća od prave
PSF:
UNDERPSF = ones(size(PSF)-4);
[S1, P1] = deconvblind(zamucena_sum,UNDERPSF);
figure;
imshow(S1);
title('Restauracija sa smanjenom PSF');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 46
Kao rezultat dobićemo sledeću sliku:
Slika 18. Restauracija korišćenjem slepe dekonvolucije, sa smanjenom vrednošću PSF
Prilikom drugog pokušaja restauracije, koristićemo niz jedinica, OVERPSF, za pokretanje
PSF koja je 4 piksela duža u svim smerovima od prave PSF:
OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both');
[S2, P2] = deconvblind(zamucena_sum,OVERPSF);
figure;
imshow(S2);
title('Restauracija sa povecanom PSF');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 47
Kao rezultat dobijamo sledeću sliku:
Slika 19. Restauracija korišćenjem slepe dekonvolucije, sa povećanom vrednošću PSF
U trećem pokušaju restauracije, koristićemo niz jedinica, INITPSF, za pokretanje PSF koja
je potpuno iste veličine kao originalna PSF:
INITPSF = padarray(UNDERPSF,[2 2],'replicate','both'); [S3, P3] = deconvblind(zamucena_sum,INITPSF); figure; imshow(S3); title('Restauracija korišcenjem originalne vrednosti PSF');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 48
Rezultat vidimo na sledećoj slici:
Slika 20. Restauracija korišćenjem slepe dekonvolucije, sa originalnom vrednošću PSF
Sve tri restauracije imaju svoju PSF. Sledeće slike će nam pokazati analizu rekonstruisane
PSF koja nam pomaže prilikom određivanja prave veličine početne PSF. Zbog preglednosti, sve
rezultate prikazujemo u jednom prozoru. Inicijalizaciju vršimo sledećim kodom:
figure;
subplot(221);
imshow(PSF,[],'InitialMagnification','fit');
title('Prava PSF');
subplot(222);
imshow(P1,[],'InitialMagnification','fit');
title('Rekonstruisana smanjena PSF');
subplot(223);
imshow(P2,[],'InitialMagnification','fit');
title('Rekonstruisana povecana PSF');
subplot(224);
imshow(P3,[],'InitialMagnification','fit');
title('Rekonstruisana originalna vrednost PSF');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 49
Rezultate inicijalizacije prethodnog koda vidimo na slici 21:
Slika 21. Gore: Prava vrednost PSF (levo) i rekonstruisana smanjena PSF
Dole: Rekonstruisana povećana PSF i rekonstruisana originalna PSF
PSF rekonstruisana u prvom pokušaju restauracije (Slika 21., gore desno), očigledno nije
odgovarajuće veličine. Vidimo velike varijanse datog signala na centru u odnosu na ivice. Zbog
toga, odgovarajuća slika dobijena tom prilikom (Slika 18.) ne pokazuje nikakvo poboljšanje u
odnosu na Sliku 14.
PSF rekonstruisana u drugom pokušaju restauracije (Slika 21., dole levo), ima blage
prelaze na ivicama. To znači da možemo izvršiti restauraciju PSF manjih dimenzija. Odgovarajuća
restauracija (Slika 19.) pokazuje određen napredak u polju poništavanja zamućenja, ali je znatno
oštećena efektom „prstena“.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 50
Na kraju, PSF rekonstruisana u trećem pokušaju restauracije, predstavlja sredinu između
prethodna dva primera. Odgovarajuća slika dobijena tom prilikom, slika 20., predstavlja značajno
unapređenje, ali je još uvek oštećena istim efektom kao i prethodna restauracija. Pokušaćemo da
ispravimo to. Pokušaćemo da definišemo težinsku funkciju. Algoritam meri težinu svakog piksela
pomoću odgovarajućeg WEIGHT niza tokom restauracije i PSF – a. U našem primeru, tražimo
„oštre“ piksele koristeći edge funkciju. Podesićemo traženi prag tolerancije na 0,3:
WEIGHT = edge(I,'sobel',.3);
Da bismo proširili oblast koristimo funkciju imdilate i uvodimo strukturni element se:
se = strel('disk',2);
WEIGHT = 1-double(imdilate(WEIGHT,se));
Piksele blizu granice podešavamo na vrednost 0:
WEIGHT([1:3 end-(0:2)],:) = 0;
WEIGHT(:,[1:3 end-(0:2)]) = 0;
figure;
imshow(WEIGHT);
title('Težinski niz');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 51
Težinski niz je prikazan na sledećoj slici:
Slika 22. Težinski niz primenjen na originalnu sliku cameraman.tif
Restauraciju slike vršimo pozivanjem deconvblind funkcije sa WEIGHT nizom i
povećanim brojem ponavljanja. Na ovaj način ćemo uništiti veći deo efekta „prstena“.
[S, P] = deconvblind(zamucena_sum,INITPSF,30,[],WEIGHT);
figure;
imshow(S);
title('Restaurisana slika');
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 52
Rezultat kompletnog postupka je dat na slici 23:
Slika 23. Slika cameraman.tif posle kompletnog postupka slepe dekonvolucije
Kao što vidimo na slici 23., krajnji rezultat nije preterano zadovoljavajući. Očito, datom
algoritmu ne odgovara način zamućenja (zamućenje kretanjem, eng. motion blur) koji smo koristili
u svim navedenim primerima, a količina šuma je prevelika za kvalitetnu restauraciju ovim
algoritmom. Funkcija koju smo koristili u navedenom primeru najbolje rezultate daje prilikom
restauracije slike na kojoj se nalazi Gausovo zamućenje (eng. Gaussian blur).
Poslednja funkcija dekonvolucije koju ćemo ispitati u ovom radu je ujedno i poslednja koja
je deo Image Processing Toolbox – a. To je funkcija deconvlucy koja za restauraciju slika
koristi ubrzani, prigušeni, Lusi – Ričardson algoritam. Ovaj algoritam povećava verovatnoću da
slika koju dobijemo kao rezultat obrade ima kvalitet blizak originalu, ukoliko znamo PSF. Sa druge
strane, ova funkcija nema prevelikog uticaja na odstranjivanje šuma sa slike.
Kao i u prethodna tri primera, koristićemo sliku cameraman.tif i isti deo koda koji simulira
zamućenje i šum. Zbog toga nećemo navoditi taj deo koda.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 53
Koristimo funkciju deconvlucy za restauraciju slike 12. Tom prilikom moramo navesti
PSF koji je korišćen za kreiranje zamućenja. Takođe, navešćemo limit broja operacija ponavljanja.
Podrazumevano podešavanje je 10, a mi ćemo limit postaviti na 20. Za to koristimo sledeći kod:
luc1 = deconvlucy(zamucena_sum,PSF,20);
figure, imshow(luc1)
title('Restaurisana slika')
Rezultat restauracije vidimo na slici 24:
Slika 24. Slika restaurisana Lusi – Ričardsonovim algoritmom
Funkcija deconvlucy vrši više ponavljanja procesa odstranjivanja zamućenja. Za
zadovoljavajući rezultat potrebno je pronaći optimalan broj ponavljanja. U našem slučaju,
primenom ovog jednostavnog koda dobijamo sasvim zadovoljavajuće rezultate. Dodatno
poboljšanje ćemo pokušati da postignemo korišćenjem edgetaper funkcije. Pozivanje vršimo
sledećim kodom:
S=edgetaper(luc1,PSF);
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 54
Slika 25. Konačna verzija slike restaurisane Lusi – Ričardsonovim algoritmom
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 55
5. Zaključak
Postoje mnoge mogućnosti vezane za dalji razvoj teme koja je obrađena u master radu.
MATLAB je moćna alatka koja nam pruža različite metode i tehnike koje su potrebne za izgradnju
veoma kompleksnih programa. Funkcionalnost i dizajn istih je ograničen jedino maštom korisnika.
Generalno gledano, MATLAB se razvija veoma brzo i postaje sve popularniji u naučnim
krugovima. Kao i svaki drugi programski paket, MATLAB ima svoje prednosti i nedostatke. Da
li ćemo ga koristiti za profesionalnu obradu slika ili njihovo kodiranje i dekodiranje zavisi
isključivo od ličnih afiniteta korisnika. Po mom mišljenju, trenutno postoje druge alternative koje
su jeftinije i pružaju više mogućnosti kada je u pitanju obrada slika ili njihovu restauracija.
Međutim, retka su radna okruženja u kojima možemo kompresovati ili restaurisati slike po
matematičkom modelu.
Dalji razvoj ovog problema može biti kreiranje jedinstvenog grafičkog okruženja za
pokretanje kompresije, kodiranja ili primene različitih modela restauracije slike. Takođe, relativno
jednostavno možemo napraviti alatku za osnovnu obradu slika.
Sama kompleksnost ovog programskog okruženja nas navodi na zaključak da ćemo se u
budućnosti verovatno sve više susretati sa njegovim radnim okruženjem čak i u situacijama u
kojima do pre nekoliko godina nismo ni slutili da će on biti naš prvi izbor. Da li će to zaista biti
slučaj ostaje nam da vidimo, niko ne zna šta nam budućnost donosi.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 56
6. Prilog
Primer koda koji smo koristili za kodiranje i dekodiranje slike Nikole Tesle. Osnovna
datoteka imagec.m:
function [ ] = imagec( a ) PP=imread(a); if(size(PP,3)>0) PP=rgb2gray(PP); end s1=size(PP);
size(PP) PP=[PP zeros(size(PP,1),2)]; imwrite(PP(1:200,1:150),'uncompb.bmp'); PP1=PP;
s=0; s1=0; rlen=[];%kodovana rle lista rlde=[];%dekodovana rle lista decomp=[];%obrnuto dekompresovana matrica u jednoj liniji Q=[16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55; 14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 103 77; 24 35 55 64 81 104 113 92; 49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99]; % kvantizacija matrice for i=1:8 for j=1:8 if i==1 t(i,j)=(1/8)^(1/2); else t(i,j)=(1/2)*cos(pi*(2*j-1)*(i-1)/16); end end end
for i=8:8:size(PP,1) for j=8:8:size(PP,2) W=PP(i-7:i,j-7:j); W=double(W); W=W-128;
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 57
A=t*W*t'; A=round(A./Q);
m=zz(A);% pozivanje zz.m s=s+length(m); m1=mrl(m); rlen=[rlen m1];
PP(i-7:i,j-7:j)=A;
end end imwrite(rlen,'compressedb.bmp')%upis kompresovane slike u bmp formatu fid = fopen('compressed.raw', 'wb'); fwrite(fid, rlen, 'int8') fclose(fid); fid1 = fopen('compressed.raw', 'r'); rlen1=fread(fid1);
fclose(fid); rlen1=rlen1';
imwrite(rlen,'compressed.jpg')%upis kompresovane slike u jpg formatu rldn=rld(rlen); for i=64:64:size(rldn,2)
W1=rldn(i-63:i); size(rldn) W1=invzz(W1,8,8);
W1=W1.*Q; W11=inv(t)*W1*inv(t'); W1=W11+128;
decomp=[decomp W1]; end final=[]; for i=152:152:size(decomp,2)
R1=decomp(1:8,i-151:i); final=[final;R1]; end imshow(final/255);%prikaz kona?ne slike imshow(PP1*10); size(final) imwrite(final(1:size(final,1),1:size(final,2))/255,'decompressed.bmp');%upis
dekompresovane slike u bmp formatu end
Datoteka inzz.m:
function res=invzz(inpimg,nr,nc)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 58
nel=length(inpimg);
res=zeros(nr,nc);
cr=1; cc=1; ci=1;
while ci<=nel if cr==1 & mod(cr+cc,2)==0 & cc~=nc res(cr,cc)=inpimg(ci); cc=cc+1; ci=ci+1;
elseif cr==nr & mod(cr+cc,2)~=0 & cc~=nc res(cr,cc)=inpimg(ci); cc=cc+1; ci=ci+1;
elseif cc==1 & mod(cr+cc,2)~=0 & cr~=nr res(cr,cc)=inpimg(ci); cr=cr+1; ci=ci+1;
elseif cc==nc & mod(cr+cc,2)==0 & cr~=nr res(cr,cc)=inpimg(ci); cr=cr+1; ci=ci+1;
elseif cc~=1 & cr~=nr & mod(cr+cc,2)~=0 res(cr,cc)=inpimg(ci); cr=cr+1; cc=cc-1; ci=ci+1;
elseif cr~=1 & cc~=nc & mod(cr+cc,2)==0 res(cr,cc)=inpimg(ci); cr=cr-1; cc=cc+1; ci=ci+1;
elseif ci==nel res(end)=inpimg(end); break end end
Datoteka mrl.m:
function e = mrl(xvec) pp=size(xvec); if pp(1)==1 n=0;
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 59
for i=1:length(xvec)-1 if xvec(i)~=xvec(i+1); n=n+1; end end for i=1:n+1 l(i)=1; end
j=1; i=1; while j<length(xvec) if xvec(j)==xvec(j+1) l(i)=l(i)+1; else b(i)=xvec(j); i=i+1; end j=j+1; end b(n+1)=xvec(length(xvec)); i=1; j=1;
while i<=length(l)&&j<=2*length(l) e(j)=l(i); e(j+1)=b(i); i=i+1; j=j+2; end else for p=1:pp(1) n=0; for i=1:length(xvec(p,:))-1 if xvec(p,i)~=xvec(p,i+1); n=n+1; end end
for i=1:n+1 l(i)=1; end
j=1; i=1; while j<length(xvec(p,:)) if xvec(p,j)==xvec(p,j+1) l(i)=l(i)+1; else b(i)=xvec(p,j); i=i+1; end j=j+1; end
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 60
b(n+1)=xvec(p,length(xvec(p,:))); i=1; j=1;
while i<=length(l)&&j<=2*length(l) e(p,j)=l(i); e(p,j+1)=b(i); i=i+1; j=j+2; end
end end end
Datoteka rld.m:
function d = rldecode(xvec)
pp=size(xvec); if pp(1)==1 oi=1; for l=1:2:length(xvec) for l1=oi:oi+xvec(l)-1 d(l1)=xvec(l+1); end oi=oi+xvec(l); end end end
Datoteka rle.m:
function data = rle(x)
if iscell(x) %dekodiranje i = cumsum([ 1 x{2} ]); j = zeros(1, i(end)-1); j(i(1:end-1)) = 1; data = x{1}(cumsum(j)); else %kodiranje if size(x,1) > size(x,2), x = x'; end %ako je x kolona vektora,
transponovati i = [ find(x(1:end-1) ~= x(2:end)) length(x) ]; data{2} = diff([ 0 i ]); data{1} = x(i); end
Datoteka zz.m:
function out=zz(inimg) [nr nc]=size(inimg); out=zeros(1,nr*nc); crow=1; cur_col=1; cind=1; while crow <= nr & cur_col <= nc
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 61
if crow==1 & mod(crow+cur_col,2)==0 & cur_col~=nc out(cind)=inimg(crow,cur_col); cur_col=cur_col+1;
elseif crow==nr & mod(crow+cur_col,2)~=0 & cur_col~=nc out(cind)=inimg(crow,cur_col); cur_col=cur_col+1; cind=cind+1;
elseif cur_col==1 & mod(crow+cur_col,2)~=0 & crow~=nr out(cind)=inimg(crow,cur_col); crow=crow+1; cind=cind+1;
elseif cur_col==nc & mod(crow+cur_col,2)==0 & crow~=nr out(cind)=inimg(crow,cur_col); crow=crow+1; cind=cind+1;
elseif cur_col~=1 & crow~=nr & mod(crow+cur_col,2)~=0 out(cind)=inimg(crow,cur_col); crow=crow+1; cur_col=cur_col-1; cind=cind+1;
elseif crow~=1 & cur_col~=nc & mod(crow+cur_col,2)==0 out(cind)=inimg(crow,cur_col); crow=crow-1; cur_col=cur_col+1; cind=cind+1;
elseif crow==nr & cur_col==nc out(end)=inimg(end); break end end
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 62
7. Literatura
[1] Babić Z., Risojević V.; „Digitalna obrada slike“, Univerzitet u Banjaluci, Elektrotehnički
fakultet, Katedra za opštu elektrotehniku, (http://dsp.etfbl.net/dip/, pristupljeno 24. 06. 2018.)
[2] Castleman, K.R., Digital Image Processing, Prentice Hall, Englewood Cliffs, NJ, 1996.
[3] Discrete Cosine Transform, MathWorks Documentation,
(http://www.mathworks.com/help/images/discrete-cosine-transform.html, pristupljeno 24. 06.
2018.)
[4] Gonzales, R.C., Wintz, P., Digital Image Processing, Addison-Wesley Publ. Comp.,
Reading, MA, 1977.
[5] Hansen P. C., Nagy J. G., O’Leary D. P.; „Deblurring Images, Matrices, Spectra and
Filtering“, Society for Industrial and Applied Mathematics, prvo izdanje, Philadelphia,
Pennsylvania, United States, 2006.
[6] Jain, A.K., Fundamentals of Digital Image Processing, Prentice Hall, Englewood Cliffs, NJ,
1989.
[7] Jančić, M., JPEG norma – Diskretna kosinusna transformacija, Labaratorij za
videokomunikacije, Zavod za radiokomunikacije, Fakultet elektrotehnike i računarstva,
Sveučilište u Zagrebu (http://www.vcl.fer.hr/dtv/jpeg/dct.htm, pristupljeno 24. 06. 2018.)
[8] Lim, J.S., Two-Dimensional Signal and Image Processing, Prentice Hall, Englewood Cliffs,
NJ, 1990.
[9] „MATLAB – Image Processing Toolbox 6 User’s Guide“; 19 – to izdanje, The MathWorks
Inc. Natick, Massachusetts, United States
[10] Oge M.; „Practical Image and Video Processing Using MATLAB“, prvo izdanje, Florida
Atlantic University, IEEE Press, Whiley, 2011.
[11] Popović, M.V., Digitalna obrada signala, Nauka, Beograd, 1997.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 63
[12] Pratt, W.K., Digital Image Processing, 2nd Ed., John Wiley & Sons, New York, 1991.
[13] Rao, K.R., Yip, P., Discrete Cosine Transform: Algorithms, Advantages, Applications,
Academic Press, New York, 1990.
[14] Vježba 1. Uvod u korištenje MATLAB-a i Image Processing Toolboxa u obradi slike,
Univerzitet u Banjaluci, Elektrotehnički fakultet, Katedra za opštu elektrotehniku, Digitalna
obrada slike (http://dsp.etfbl.net/dip/1uvod.pdf, pristupljeno 24. 06. 2018.)
[15] Watson A. B., Image Compression Using the Discrete Cosine Transform, Nasa Ames
Research Center, Mathematica Journal, 4(1), 1994., p 81 – 88
(http://sites.apam.columbia.edu/courses/ap1601y/Watson_MathJour_94.pdf, pristupljeno 24. 06.
2018.)
[16] Weisstein, Eric W., Discrete Fourier Transform, From MathWorld – A Wolfram Web
Resource. (http://mathworld.wolfram.com/DiscreteFourierTransform.html, pristupljeno 24. 06.
2018.)
[17] Weisstein, Eric W., Fast Fourier Transform, From MathWorld – A Wolfram Web
Resource. (http://mathworld.wolfram.com/FastFourierTransform.html, pristupljeno 24. 06.
2018.)
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 64
Biografija
Diplomirani informatičar Aleksandar Ivanović rođen je 17. maja 1990. godine u Kraljevu.
Osnovnu školu „Kralj Milutin“ je završio 2005. godine sa odličnim uspehom. Srednju
Elektrotehničku školu „Miladin Popović“ u Sušici – Badovcu je završio 2009. godine sa odličnim
uspehom. Diplomirao je na osnovnim studijama Prirodno – matematičkog fakulteta na smeru
Informatika 2015. godine na Prištinskom univerzitetu sa privremenim sedištem u Kosovskoj
Mitrovici sa prosečnom ocenom 8.63.
Decembra 2013. godine se zapošljava na freelancing platformi Fiverr kao grafički dizajner.
Od septembra 2014. radi kao profesor matematike u Građevinsko – Saobraćajnoj školi Priština –
Gračanica.
Oženjen je i otac jednog deteta.
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 65
Прилог 5/1
ПРИРОДНO - MАТЕМАТИЧКИ ФАКУЛТЕТ
НИШ
КЉУЧНА ДОКУМЕНТАЦИЈСКА ИНФОРМАЦИЈА
Редни број, РБР:
Идентификациони број, ИБР:
Тип документације, ТД: монографска
Тип записа, ТЗ: текстуални / графички
Врста рада, ВР: мастер рад
Аутор, АУ: Александар Ивановић
Ментор, МН: Предраг Станимировић
Наслов рада, НР: Компресија, кодирање и рестаурација слика у
MATLAB – у
Језик публикације, ЈП: српски
Језик извода, ЈИ: енглески
Земља публиковања, ЗП: Р. Србија
Уже географско подручје, УГП: Р. Србија
Година, ГО: 2018.
Издавач, ИЗ: ауторски репринт
Место и адреса, МА: Ниш, Вишеградска 33.
Физички опис рада, ФО: (поглавља/страна/ цитата/табела/слика/графика/прилога)
68 стр. ; граф. прикази
Научна област, НО: Рачунарске науке
Научна дисциплина, НД: Операциона истраживања
Предметна одредница/Кључне речи, ПО: Слике, рестаурација, компресија, кодирање
УДК 004.414.23MATLAB 004.415.3MATLAB 004.383.5MATLAB
Чува се, ЧУ: библиотека
Важна напомена, ВН:
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 66
Извод, ИЗ: У раду је анализирано коришћење МАТЛАБ – а у
циљу рестаурације, компресије и кодирања слика са
фокусом на аспекте рачунарске графике, упознавање
са ЈПЕГ компресијом и коришћењем дискретне
косинусне трансформације у циљу кодирања и
компресије слика. Анализирани су различити начини
рестаурација слика. Све теоретске студије наведене
у овом раду су приказане у изабраном радном
окружењу. Добијени резултати указују на ефикасност
изабраног радног окружења у сврху постизања
задатих циљева.
Датум прихватања теме, ДП: 20. 03. 2018
Датум одбране, ДО: 11. 09. 2018.
Чланови комисије, КО: Председник: Марко Петковић
Члан: Марко Миладиновић
Члан, ментор: Предраг Станимировић
Образац Q4.09.13 - Издање 1
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 67
Прилог 5/2
ПРИРОДНО - МАТЕМАТИЧКИ ФАКУЛТЕТ
НИШ
KEY WORDS DOCUMENTATION
Accession number, ANO:
Identification number, INO:
Document type, DT: monograph
Type of record, TR: textual / graphic
Contents code, CC: master degree thesis
Author, AU: Aleksandar Ivanović
Mentor, MN: Predrag Stanimirović
Title, TI:
Compression, coding and restoration of photos in MATLAB
Language of text, LT: Serbian
Language of abstract, LA: English
Country of publication, CP: Republic of Serbia
Locality of publication, LP: Serbia
Publication year, PY: 2018.
Publisher, PB: author’s reprint
Publication place, PP: Niš, Višegradska 33.
Physical description, PD: (chapters/pages/ref./tables/pictures/graphs/appendixes)
68 p. ; graphic representations
Scientific field, SF: Computer Science
Scientific discipline, SD: Operational Researches
Subject/Key words, S/KW: photos, restauration, compression, coding
UC 004.414.23MATLAB 004.415.3MATLAB
004.383.5MATLAB
Holding data, HD: library
Note, N:
Kompresija, kodiranje i restauracija slika u MATLAB – u
Strana 68
Abstract, AB: The thesis analyzes the use of the MATLAB in order to restore, compress, and encode the image with a focus on aspects of computer graphics, familiarize with JPEG compression and use discrete cosine transformation in goal of encoding and image compression. We analyzed different approach of photo restauration. There are practical examples in selected work environment for all theoretical studies indicated in this thesis. The obtained results indicate the efficiency of selected working environment.
Accepted by the Scientific Board on, ASB: 20. 03. 2018.
Defended on, DE: 11. 09. 2018.
Defended Board, DB: President: Marko Petković
Member: Marko Miladinović
Member, Mentor: Predrag Stanimirović
Образац Q4.09.13 - Издање 1