You are on page 1of 45

10.

Oko i kamera
Mnoge aplikacije koje koriste obradu slike generišu sliku koju će posmatrati
čovjek (npr. za razliku od automatske inspekcije u industriji). Zbog toga, veoma jes
važno poznavati karakteristike i ograničenja ljudskog vida – “prijemnika” 2D signala.
Važno je znati da:
• ljudski vizuelni sistem nije dovoljno ispitan,
• ne postoji objektivna mera kvaliteta slike koja odgovara ljudskom prosuđivanju o
kvalitetu slike,
• “tipični” posmatrač ne postoji.
Ipak, istraživanja u oblasti perceptualne psihologije obezbeđuju neka važna sagledavanja
vizuelnog sistema. Uopštena građa ljudskog oka prikazana je na slici 10.1. Retina
ljudskog oka prekrivena je fotoreceptorskim ćelijama. Fotoreceptorske ćelije apsorbuju
svetlost od slike koju na retinu fokusiraju leća (sočivo) i rožnica-rožnjača (cornea). One
generišu nervne impulse koji putuju ka mozgu kroz optičke nerve od kojih se svaki
sastoji od oko milion vlakana. Frekvencija ovih impulsa je funkcija osvetljenosti retine.
Fotoreceptorske ćelije su najgušće u području žute mrlje (fovea). Pri jakoj svelosti, otvor
zenice je mali i svetlost je fokusirana na žutu mrlju, što omogućava dobro razaznavanje
detalja. Pri slaboj svetlosti, otvor zenice je veći, te je svetlost rasuta po većem delu retine
i slika je loše fokusirana.
Oko zbog optičkih osobina pravi obrnutu sliku o okolini, ali mozak to obrne i vrati u
pravi položaj. Ovu pojavu beba nauči za svojih nekoliko meseci starosti i tako, kasnije se
u našoj spoznaji javljaju prave slike.

Slika 10.1. Grubi prikaz strukture ljudskog oka

Fotoreceptorske ćelije mešavina su ćelija dva tipa: štapića i čunića (konusnog


oblika), tako nazvanih po njihovom obliku. Štapići su mnogo osjetljiviji i omogućavaju
monohromatski vid u noći. Čunići omogućavaju gledanje u boji, ali samo pri visokom
nivou osvetljenosti. Postoje tri tipa konusnih ćelija. One dele vidljivi deo spektra u tri
opsega: crveni, zeleni i plavi. Zbog toga, ove tri boje su označene kao osnovne boje
ljudskog vida. Slika 10.2. prikazuje osetljivost ova tri tipa konusnih ćelija po talasnim
dužinama svetlosti iz vidljivog dela spektra.
Zasnovano na psihofizičkim merenjima, CIE (Commision Internationale de I’Eclairage)
prihvatila je ove krive kao kao krive osetljivosti “tipičnog” posmatrača za tri navedena
pigmenta.

Slika 10.2. Osetljivost fotoreceptorskih ćelija ljudskog oka

10.1. Sistemi boja (kolor modeli)


Korišćenje boje u obradi slike motivisano je sa dva osnovna razloga. Prvi je taj,
da je boja moćan deskriptor koji pojednostavljuje identifikaciju objekata i njihovo
izdvajanje. Drugi razlog je to, što ljudi mogu razlikovati daleko više nijansi boja nego
nijansi sivoga, što je posebno značajno kada se radi interaktivna (pod kontrolom
posmatrača) analiza slike. Obrada slika u boji može se podeliti u dve oblasti. Jedna je
uobičajena obrada slika u boji, dok je druga tzv. pseudocolor, odnosno korišćenje boje za
obradu slika koje u svojoj suštini nemaju boju. Iako je percepcija i interpretacija boje
psihološki fenomen koji još uvek nije u potpunosti razjašnjen, fizička priroda boje može
se opisati nekim formalnim zakonima zasnovanim na eksperimentalnim i teoretskim
rezultatima. Isaac Newton je još 1666. godine opisao razlaganje sunčeve svetlosti na
spektar boja pri prolasku kroz staklenu prizmu. Ljudi i neke životinje vide boju kao deo
spektra koji se reflektuje od objekta. Osnovne karakteristike koje se koriste da bi
razlikovali jednu boju od druge su: osvetljenost, koja odgovara intenzitetu, dominantna
boja (hue) koja odgovara dominantnoj talasnoj dužini i zasićenost, koja je obrnuto
proporcionalna količina bele svetlosti koja je dodata dominantnoj boji. Drugi pristup je
trihromatska teorija po kojoj je predstavljanje boje zasnovano na karakteristikama
ljudskog vida koji svaku boju razlaže na tri komponente (RGB sistem): crvenu, zelenu i
plavu.
Postoji niz postupaka za mešanje boja od kojih ćemo mi spomenuti ukratko samo
najpoznatije:
• Aditivno; ovim postupkom mešanja srećemo se najranije tokom školovanja, npr.
obojeni vrtlog. U jednom od najpoznatijih kolor modela osnovne boje su crvena
(R), zelena (G) i plava (B), tj. to je poznati RGB model. Sabiranjem osnovnih
boja, intenziteti se sabiraju pri projekciji svetlosnih zraka.

Slika 10.3. Prikaz postupka mešanja boja u RGB sistemu

• Subtraktivno; ovaj tip mešanja je suprotan aditivnom. Princip je da kod


osvetljavanja ili refleksije sloja boje, boja proguta neke frekvencije ili ih eliminiše
iz prikazanog sloja boje. Jedan od najrasprostranijih modela, koji meša boje na
ovom principu jeste CMY sistem, gde su osnovne boje cian (C), magenta (M) i
žuto (Y).
• Mešovito mešanje; ovaj princip se koristi u štamparijama kod raster sistema, gde
se veličine nekih tačaka aditivnim, a preklapanja subtraktivnim mešanjem
dobijaju. Važno je naglasiti, da se kod štampanja za izdvajanje kontura koristi
crna boja. Za ove potrebe razvijen je čitav niz kolor modela.
Slika 10.4. CIE kriva osetljivosti boja

Razvojem aplikacija nastala je potreba za uvođenjem standarda, koji se zasniva na


merenju. Razlog ovome je potreba ponovljivosti merenja i rezultata, gde bi se došlo do
jedinstvenih zaključaka u vezi osetljvosti boja. Nekoliko najpoznatijih standarda u
industriji su: OSA-1947, DIN-1953, itd. Danas, u upotrebi najviše je tzv. CIE
(Commision Internationale de I’Eclairage), koji je prihvaćen 1931. godine. CIE je
definisao standardnog (kolorimetrijskog) posmatrača. To je jedna prosečna osetljivost u
uglu opsega 2˚ u odnosu na osetljivost boja celog spektra. Ovaj standardni posmatrač
označava se kao CIE 1931 Standardni posmatrač ili kao CIE 1931 2˚ Standardni
podmatrač. Modernija varijanta je korišćenje standardnog posmatrača CIE 1931 10˚, gde
ugao od 10˚ eliminiše efekat uske spot lampe. Ovaj standard objašnjava sastav RGB
komponenti video slika. Ovaj standard se zasniva na merenju nadražaja boja, tj. na tri
osnovne boje.
Aditivnim mešanjem ne mogu se napraviti neke od zasićenih boja, nego moraju se
koristiti negativni koeficijenti. RGB sistem je linearna kombinacija, gde:
• je svaka boja prikazana preko pozitivnih koeficijenata,
• jednaka količina komponenti stvara beo nadražaj boje,
• je intenzitet svetlosti-luminencija (Y) proporcionalna gustini svetlosti
Kolor komponente mogu se napisati pomoću sledećih izraza:

X = 2 ,3646· R + 0 ,51512· G + 0 ,0052· B


Y = -0 ,8965 · R + 1,4264· G + 0 ,0144 · B
Z = -0 ,4681 · R + 0 ,0888 · G + 1,0092 · B

Ukoliko je tačka belog RGB i XYZ sistema različita, potrebno ih je pomnožiti tzv.
Bradford matricom.
U sistemu XYZ na ravan koju određuju tačke (100,0,0) (0,100,0) (0,0,100) ako
projektujemo boje tela-boje, dobićemo isti nadražaj svetlosti. Osobine boje kao što su
informacije o boji i informacija o zasićenosti ne zavise od dužine vektora, nego samo od
proporcija komponenti od kojih je sastavljena. Koordinate boja dobijamo na sledeći
način:

x = X / (X + Y + Z)
y = Y / (X + Y + Z)
z = Z / (X + Y + Z)

Presek pomenute ravni sa telom boje biće 2D, tj. slika xy je sada tzv. trougao
nadražaja boje.
Slika 10.5. Trougao nadražaja boje

Osnovne tačke (R, G, B) nalaze se na kružnici, tj. na spektralnoj putanji.


Mangente se označavaju komplementom. Pozicija osećaja sive boje (x~ y~ z~ 1/3) zavisi
od same osobe. Prikazivanje boje zavisi od sredstva. Mapu boja nekoliko sredstava za
prikazivanje boja vidimo na donjoj slici.

Slika 10.6. Mapa boja sredstava za prikazivanje boja

Zbog razvoja računarskog prikaza brojeva umesto ranijeg prikaza vrednosti od 1,


sada se normalizacija vrši na 255 (8 bita) vrednosti. Dakle sadržaji nekih od osnovnih
boja zauzimaju opsege od 0-255. Od tri osnovne boje može se napraviti oko 16 miliona
boja i nijansi računarskom obradom, od kojih na jednoj paleti računar može razlikovati
oko 200 vrsta.

10.3. Informacioni sadržaj slike


Da bi odredili informacioni sadržaj slike, potrebno je poznavati u kom opsegu i
kojom rezolucijom vidi naše oko. Ako naprimer naše oko vidi površinu razmere 4:3
(razmera klasičnog TV ekrana, noviji TV ekrani imaju razmeru 16:9), najveći opseg
uglova, koji se vidi po vertikali nalazi se pod uglom od 20˚, a najmanji prostorni ugao
koji oko može osetiti je 2’. Na donjoj slici vide se glavni parametri vida:

Slika 10.7. Površina koju oko može videti, prostorni ugao vida i definicija piksela

Kao prvo, kod određivanja informacionog sadržaja slike potrebno je odrediti


koliko segmenata slike može oko razlikovati (sredstvo za meru kvaliteta je oko). Ljudsko
oko može razlikovati dve tačke, čija udaljenost je 2’, ako je rezolucija veća, tada oko ne
može razlikovati date tačke. Posle ovoga može se računati broj piksela po vetikali, kao:

20 o 20 ⋅ 60 ,
n1 = = = 600 pixel ,
2, 2,

a po horizontali kao:

4
n2 = n1 = 800 pixel ,
3

odavde sledi da je broj piksela u slici:

n = n1 n2 = 4.8 ⋅ 10 5 pixel .

Da bi znali odrediti informacioni sadržaj slike, važan podatak je informacioni


sadržaj jednog piksela. Za ovo potrebno je znati broj vrednosti intenziteta svetlosti, koje
oko zna razlikovati. Oko može razlikovati 100 različitih intenziteta svetlosti u okviru
jednog piksela. Odavde sledi da je informacioni sadržaj jednog piksela:

I = log 2 100 = 6.7bit . 1/100


CBpixel

Informacioni sadržaj crno-bele slike je:

I CBslika = nI CBpixel = 3.19 ⋅10 6 bit .

Na jednoj paleti oko može razlikovati 200-300 boja; neka uzmemo da je 256 boja,
tada informacioni sadržaj jednog piksela u boji je:
1/256
I pixel _ u _ boji = log 2 256 = 8 bit .

U oku ima dvadeset puta manje nerava za osećaj boje nego nerava za osećaj
svetlosti. Minimalnu površinu za osećaj boja reprezentujemo približno kao površinu
dimenzija 5x5 za osećaj svetlosti (slika 10.8.).

Slika 10.8. Pikselska definicija boje

Informacioni sadržaj piksela uzimajuči u obzir svetlost i boju:

I pixel _ u _ boji
I = 6.65 + = 6.65 + 0.32 = 6.97 bit .
∑ pixel
5⋅5

Iz ovog izraza lepo se vidi da boja ima manji informacioni sadržaj od svetlosti.
Infromacioni sadržaj slike u boji je:

I slika _ u _ boji = nI = 3.35 ⋅10 6 bit .


∑ pixel

10.3. Kamera
Arhitektura kamere veoma je slična ljudskom oku. Obe stvari počivaju na istoj
stvari: na optičkom sočivu (leći) i senzoru slike. Sočivo sakuplja delove reflektovane
svetlosti sa predmeta i usmerava ih ka senzoru slike. Zatim, senzor slike konvertuje
svetlost u elektronski ili u nervni video signal.
U praksi, najrasprostraniji senzor u eletronskim kamerama jeste CCD (“charge
coupled device”) senzor. CCD je integrisano kolo, koje je zamenilo vakumske cevi u
kamerama 80-tih godina prošlog veka, isto kao što su ih tranzistori zamenili u
pojačavačima 20-tak godina ranije. Srce CCD kola je jedna silicijumska pločica, koja ima
dimenzije od oko 1cm2. Kao što se vidi na donjoj slici, donji deo je prekriven tankim
slojem metala, koje je povezano na potencijal zemlje. Gornji deo prekriven je tankim
slojem izolatora i nizom elektroda.

Slika 10.9. Prikaz CCD senzora i njegovog napajanja

Kod najčešće koripćenih CCD senzora izčitavanje vrši se u tri faze (“three phase
readout”), gde je svaka treća elektroda povezana. Koristi se silicijum P tipa, na slici
šupljine su označene sa +.
Na slici se vidi da se jedna faza povezuje na pozitivno napajanje a druge dve se
drže na 0V. Posledica ovoga jeste, da se šupljine pomeraju kod svake treće elektrode,
pošto se pozitivna naelektrisanja odbijaju od pozitivnog napona. Zbog ovoga, ispod ovih
elektroda nastaje površina, koja se naziva procepom (skraćena verzija od potencijalnog
procepa iz fizike).
Procep, koji je nastao u materijalu CCD kamere, veoma je moćan senzor svetlosti.
Kao što se vidi na slici, foton svetlosti, koji pada na silicijum, sopstvenu energiju koristi
za generisanje dva naelektrisanja, za elektrone i za šupljine. Šupljina se dalje pomera, a
elektron ostaje zarobljen u procepu, pošto ga pozitivni napon na elektrodi zadržava tamo.
Na slici, elektroni su označeni sa -. Tokom integrisanja svetlost koja pada na CCD
pretvara se u nelektrisanje pomoću CCD senzora. Slabiji izvori svetlosti zahtevaju duže
vreme za integrisanje. Naprimer, prosečno vreme integrisanja TV je 1/60s, dok
sakupljanje svetlosti kod slika iz svemira mogu trajati i nekoliko sati.
Čitanje elektronske slike je veoma lako. Akumulisani elektroni iz svakog procepa
guraju se prema izlaznom pojačavaču. Kao što se vidi, pozitivni napon se vodi preko dve
fazne linije. Zbog ovoga, svaki procepo se pomera udesno. Posle ovoga, ako uklonimo
napon sa prve faze, zbog toga nestaće prvobitni procepi i tako se akumulišu elektroni
pomereni za jedan procep udesno. Ponavljanjem ovog niza impulsa između tri fazne
linije, akumulisani elektroni pomeraju se udesno dotle, dok ne stignu do osetljivog
kapacitivnog pojačavača. Pojačavač se sastoji od jednog kondenzatora i od jednog
operacionog pojačavača sa velikom ulaznom otpornošću. Kada se elektroni izguraju iz
zadnjeg procepa, oni će se nači u kondenzatoru, gde će prouzrokovati pad napona. Da bi
se postigla velika osetljivost, za to bi trebalo koristiti teoretski beskonačno male
kondenzatore, ali u praksi se koriste kondenzatori manji od 1pF. Kondenzator i pojačavač
su osnovni elementi CCD-a i nalaze se na istoj silicijumskoj ploči. Signal na izlazu CCD-
a je niz naponskih nivoa, koji je proporcionalan količini svetlosti, koja je stigla u niz
procepa.

Slika 10.9. Konstrukcija CCD čipa

Na gornjoj slici prikazan je postupak izčitavanja 2D slike iz CCD-a. Posle


vremena integrisanja, akumulisane komponente u svakom procepu pomeraju se nagore za
jedan red po koloni. Svaki put kada se jedan red pomeri, svaki procep iz prvog reda
prenese se u horizontalni registar. Ovo je jedna specijalna grupa, koja se sastoji od CCD
procepa u kojem se naelektrisanja brzo pomeraju horizontalno prema osetljivom
pojačavaču.
Ova struktura pretvara 2D niz u 1D niz. Prvi piksel, koji se izčitava nalazi se u
gornjem levom uglu. Posle ovoga čitanje se nastavlja s leva u desno u prvom redu, i isto
tako u narednim redovima. Ovo se naziva pravilom glavne vrste („row major order“) i
skoro uvek se ovaj način čitanja koristi, kada se 2D niz podataka pretvara u 1D niz
podataka.
Ne koristi se generisanje slike po frejmovima (ramovima) kod svakog generisanja
slike. Drugi popularni način je generisanje slike po linijama (pastovanje po linijama).
Ovde se koristi jedan detektor, koji sadrži jedan 1D niz piksela, npr. 2048 piksela po
dužini i 1 piksel po širini. Kako se slika pomera ispred detektora, tako dobijamo sliku iz
linije u liniju. Ovaj način generisanja slike koriste faksovi i skeneri koji koriste Rentgen
zrake na aerodromima. Postoje različite varijante; negde se pomeraju predmeti a negde
linijski zrak. Dobar primer za pomeranja linijskog zraka jeste, kada avion snima zemlju
ispod sebe. Prednost linijskog skenera jeste, da umesto brzine dobijamo jednostavnost.
Naprimer, faksu je potrebno nekoliko minuta da skenira stranicu teksta, ali krajnja slika
može sadržati više hiljada vrsta i kolona.
Još jednostavniji način generisanja slike jeste generisati sliku iz tačke u tačku.
Ovo rešenje se koristi kod snimanja u svemiru i skenirajućih mikroskopa.

11. Filtriranje slike


Linearno filtriranje jeste jedno od najvažnijih operacija u digitalnoj obradi signala
i slike, kao i u telekomunikacijama. U digitalnoj obradi slike vrši se filtriranje 1D signala
(zvuk, govor, muzika, biomedicinski signali, itd.), dok u digitalnoj obradi slike fitriraju se
2D signali (statičke i pokretne slike, itd.).
Osnovna teorija filtriranja zasniva se Fourier-ovoj transformaciji (u nastavku FT).
U vremenskom ili u frekvencijskom domenu dve operacije su osnove filtriranja;
korelacija i konvolucija. Razlika između korelacije i konvolucije jeste, da je
konvoluciona maska rotirana za 180˚ u odnosu na korelaciju. Kod filtriranja uglavnom se
koristi konvolucija. U digitalnoj obradi signala konvolucija jeste posebno omiljena, zbog
postojanja brzih algoritama za računanje i zadnjih godina razvijeni su specijalni DSP
procesori, tzv. konvolucioni procesori za brzo računanje-obradu podataka. Na ovaj način
omogućeno je brzo i efikasno filtriranje najsloženijih signala.
Konvolucija opisuje, da u okviru jednog sistema za dati ulazni signal, kakav izlaz
će dati sam sistem. Konvolucija jeste linearna operacija. U slučaju aperiodičnih signala
konvolucija je data sledećim izrazom:

+∞
y (t ) = x(t ) ∗ h(t ) = ∫ x(τ )h(t − τ )dτ .
−∞

U slučaju periodičnih signala konvolucija se računa na sledeći način:


t 0 +τ
1
y (t ) = x(t ) ∗ h(t ) =
T ∫ x(t )h(t − τ )dτ ,
t0

gde je x(t) ulazni signal, y(t) je izlazni signal iz filtra a h(t) je impulsni odziv filtra.
Osobine konvolucije povezane su sa FT-jom. Kod primena konvolucije važna
osobina koja se često koristi jeste ta, da konvoluciji u vremenskom domenu odgovara
množenje u frekvencijskom domenu i obrnuto:

y (t ) = x(t ) ∗ h(t ) ↔ Y ( f ) = X ( f ) H ( f ) , ili


y (t ) = x(t )h(t ) ↔ Y ( f ) = X ( f ) ∗ H ( f ) ,

gde je H(f) prenosna funkcija filtra.


U praksi, kod filtriranja najčešće se koristi filtriranje u spektralnom domenu, jer
lakše je množiti nego računati konvoluciju. Ali, danas više to ne predstavlja problem kod
aplikacija u realnom vremenu, pošto tzv. unutrašnje jezgro DSP procesora upravo je
projektovano za operaciju konvolucije i u tom slučaju upravo jeste cilj koristiti
konvoluciju.
1D konvoluciju u slučaju diskretnih signala definišemo na sledeći način:

+∞
y ( n) = ∑ x ( m) h ( n − m) .
m = −∞

Diskretnu konvoluciju moguće je računati na više načina, pomoću raznih


algoritama; direktnim metodama (po formuli) ili pomoću nekog brzog algoritma
(“overlap-add”-preklopiti i sabrati, ili “overlap-save”-preklopiti i zapamtiti). Kod
računanja važno je odrediti dužinu rezultata-izlaznog signala. Ako je x(n) dužine N1 a
h(n) dužine N2, tada je y(n) dužine N1+N2-1.
Slika 11.1. Primer diskretne konvolucije

Primer 11.1. Data su dva diskretna signala. Izračunati njihovu konvoluciju!

x(n) = [3,2,5,6,−1,4]
h(n) = [1,2,3]

Prvo ćemo odrediti dužinu rezultata. Ako je x(n) dužine N1=6, a h(n) dužine
N2=3, tada iz toga sledi da je dužina rezultata: N1+N2-1=6+3-1=8.
Sada ćemo prikazati korake računanja konvolucije. Prvo ćemo prepisati ulazni
signal dopunjen nulama. Zatim ćemo konvolucionu masku rotirati za 180˚ i dopisaćemo
je ispod ulaznog signala tako, da zadnji odbirak maske bude ispod prvog odirka signala.
Posle ovoga poklopljene odbirke množimo i proizvode sabiramo. Zatim masku pomerimo
i postupak ponavljamo, i tako sve do kraja. Postupak je prikazan donjoj slici.

0 0 3 2 5 6 -1 4 0 0
321
321
321
321
32 1
3 21
321
321

3 8 18 22 26 20 5 12 y (n) = [3,8,18,22,26,20,5,12]

11.1. Uvod u prostorno filtriranje


U slučaju filtriranja slike, filtriranje se vrši u prostornom domenu ili u
spektralnom domenu. Postupci i osobine su slične kao i u 1D slučaju. U prostornom
domenu koristimo 2d konvoluciju (korelaciju). 2D konvolucija definiše se slično kao i
1D:

+∞ +∞
y ( x, y ) = ∫ ∫ f ( x, y)h( x − x' , y − y' )dx' dy' ,
− ∞− ∞

gde su x i y prostorne koordinate, a x’ i y’ privremene promenljive koje se gube tokom


integracije. U slučaju diskretnih signala (slike), konvolucija se definiše kao:

+∞ +∞
y (m, n) = ∑ ∑ f ( m' , n' ) h ( m − m' , n − n' ) .
m '= −∞ n '= −∞
Dimenzije rezultata određuju se slično kao i kod 1D konvolucije. Ako su
dimenzije slike MxN tačaka, a dimenzije konvolucione maske KxL, tada su dimenzije
rezultata konvolucije (M+K-1)x(N+L-1) tačaka slike.
U praksi, prostorno filtriranje stvarno se sastoji od operacija nad susednim
tačkama na sledeći način.
1. određivanje početne tačke (x,y)
2. izvršavanje operacija nad onim pikselima, koji se nalaze u unapred određenom
susedstvu oko početne tačke
3. dobijeni rezultat prikazuje izlaz u “datoj” tački
4. ponavljanje postupka za svaku tačku ulazne slike.
11. Filtriranje slike
Linearno filtriranje jeste jedno od najvažnijih operacija u digitalnoj obradi signala
i slike, kao i u telekomunikacijama. U digitalnoj obradi slike vrši se filtriranje 1D signala
(zvuk, govor, muzika, biomedicinski signali, itd.), dok u digitalnoj obradi slike fitriraju se
2D signali (statičke i pokretne slike, itd.).
Osnovna teorija filtriranja zasniva se Fourier-ovoj transformaciji (u nastavku FT).
U vremenskom ili u frekvencijskom domenu dve operacije su osnove filtriranja;
korelacija i konvolucija. Razlika između korelacije i konvolucije jeste, da je
konvoluciona maska rotirana za 180˚ u odnosu na korelaciju. Kod filtriranja uglavnom se
koristi konvolucija. U digitalnoj obradi signala konvolucija jeste posebno omiljena, zbog
postojanja brzih algoritama za računanje i zadnjih godina razvijeni su specijalni DSP
procesori, tzv. konvolucioni procesori za brzo računanje-obradu podataka. Na ovaj način
omogućeno je brzo i efikasno filtriranje najsloženijih signala.
Konvolucija opisuje, da u okviru jednog sistema za dati ulazni signal, kakav izlaz
će dati sam sistem. Konvolucija jeste linearna operacija. U slučaju aperiodičnih signala
konvolucija je data sledećim izrazom:

+∞
y (t ) = x(t ) ∗ h(t ) =
−∞
∫ x(τ )h(t − τ )dτ .
U slučaju periodičnih signala konvolucija se računa na sledeći način:
t 0 +τ
1
y (t ) = x(t ) ∗ h(t ) =
T ∫ x(t )h(t − τ )dτ ,
t0

gde je x(t) ulazni signal, y(t) je izlazni signal iz filtra a h(t) je impulsni odziv filtra.
Osobine konvolucije povezane su sa FT-jom. Kod primena konvolucije važna
osobina koja se često koristi jeste ta, da konvoluciji u vremenskom domenu odgovara
množenje u frekvencijskom domenu i obrnuto:

y (t ) = x(t ) ∗ h(t ) ↔ Y ( f ) = X ( f ) H ( f ) , ili


y (t ) = x(t )h(t ) ↔ Y ( f ) = X ( f ) ∗ H ( f ) ,

gde je H(f) prenosna funkcija filtra.


U praksi, kod filtriranja najčešće se koristi filtriranje u spektralnom domenu, jer
lakše je množiti nego računati konvoluciju. Ali, danas više to ne predstavlja problem kod
aplikacija u realnom vremenu, pošto tzv. unutrašnje jezgro DSP procesora upravo je
projektovano za operaciju konvolucije i u tom slučaju upravo jeste cilj koristiti
konvoluciju.
1D konvoluciju u slučaju diskretnih signala definišemo na sledeći način:

+∞
y ( n) = ∑ x ( m) h ( n − m) .
m = −∞
Diskretnu konvoluciju moguće je računati na više načina, pomoću raznih
algoritama; direktnim metodama (po formuli) ili pomoću nekog brzog algoritma
(“overlap-add”-preklopiti i sabrati, ili “overlap-save”-preklopiti i zapamtiti). Kod
računanja važno je odrediti dužinu rezultata-izlaznog signala. Ako je x(n) dužine N1 a
h(n) dužine N2, tada je y(n) dužine N1+N2-1.
Slika 11.1. Primer diskretne konvolucije

Primer 11.1. Data su dva diskretna signala. Izračunati njihovu konvoluciju!

x(n) = [3,2,5,6,−1,4]
h(n) = [1,2,3]

Prvo ćemo odrediti dužinu rezultata. Ako je x(n) dužine N1=6, a h(n) dužine
N2=3, tada iz toga sledi da je dužina rezultata: N1+N2-1=6+3-1=8.
Sada ćemo prikazati korake računanja konvolucije. Prvo ćemo prepisati ulazni
signal dopunjen nulama. Zatim ćemo konvolucionu masku rotirati za 180˚ i dopisaćemo
je ispod ulaznog signala tako, da zadnji odbirak maske bude ispod prvog odirka signala.
Posle ovoga poklopljene odbirke množimo i proizvode sabiramo. Zatim masku pomerimo
i postupak ponavljamo, i tako sve do kraja. Postupak je prikazan donjoj slici.

0 0 3 2 5 6 -1 4 0 0
321
321
321
321
32 1
3 21
321
321

3 8 18 22 26 20 5 12 y (n) = [3,8,18,22,26,20,5,12]

11.1. Uvod u prostorno filtriranje


U slučaju filtriranja slike, filtriranje se vrši u prostornom domenu ili u
spektralnom domenu. Postupci i osobine su slične kao i u 1D slučaju. U prostornom
domenu koristimo 2d konvoluciju (korelaciju). 2D konvolucija definiše se slično kao i
1D:

+∞ +∞
y ( x, y ) = ∫ ∫ f ( x, y)h( x − x' , y − y' )dx' dy' ,
− ∞− ∞

gde su x i y prostorne koordinate, a x’ i y’ privremene promenljive koje se gube tokom


integracije. U slučaju diskretnih signala (slike), konvolucija se definiše kao:

+∞ +∞
y (m, n) = ∑ ∑ f ( m' , n' ) h ( m − m' , n − n' ) .
m '= −∞ n '= −∞
Dimenzije rezultata određuju se slično kao i kod 1D konvolucije. Ako su
dimenzije slike MxN tačaka, a dimenzije konvolucione maske KxL, tada su dimenzije
rezultata konvolucije (M+K-1)x(N+L-1) tačaka slike.
U praksi, prostorno filtriranje stvarno se sastoji od operacija nad susednim
tačkama na sledeći način.
1. određivanje početne tačke (x,y)
2. izvršavanje operacija nad onim pikselima, koji se nalaze u unapred određenom
susedstvu oko početne tačke
3. dobijeni rezultat prikazuje izlaz u “datoj” tački
4. ponavljanje postupka za svaku tačku ulazne slike.
Pomeranje centra tačke daje nam nova susedstva, jedno za svaki piksel ulazne slike.
ovaj postupak naziva se prostorno filtriranje (Spatial Filtering). Ovo filtriranje
možemo prikazati pomoću sledeće slike:

Slika 11.2. Mehanizam prostornog filtriranja

Kod linearnog filtriranja rezultat dobijamo sabiranjem proizvoda, koje dobijamo


množenjem koeficijenata filtra i piksela koji spadaju pod filtar-maskom poklopljeni deo
slike. Ako rezultat označimo sa R, tada se rezultat filtriranja može napisati kao:
R = w(−1,−1) f ( x − 1, y − 1) + w(−1,0) f ( x − 1, y ) + ...
.
+ w(0,0) f ( x, y, ) + ... + w(1,0) f ( x + 1, y ) + w(1,1) f ( x + 1, y + 1)

Sledeći izraz se koristi kod linearnog filtriranja slike, gde je f slika dimenzija
MxN, a w je maska filtra dimenzija mxn:

a b
g ( x, y ) = ∑ ∑ w(s, t ) f ( x + s, y + t ) ,
s = − at = − b

gde je a = (m − 1) / 2 i b = (n − 1) / 2 . da bi filtriranje bilo potpuno, izraz treba primeniti u


opsegu od x = 0,1,..., M − 1 i y = 0,1,...N − 1 . Ovaj izraz je u stvari korelacija.
Konvolucija se računa slično, samo što kod konvlucije masku treba rotirati za 180˚.
Konvoluciju ćemo prikazati na sledećem primeru.

Primer 11.2. Odredi konvoluciju slike f sa maskom w!

Slika 11.3. Prikaz rešavanja konvolucije

Linearno filtriranje u Matlab-u u Digital Image Processing Toolbox-u vrši


naredba čija sintaksa jeste sledeća:
g=imfilter(f, w, način_filtriranja, granične_opcije, dimenzione_opcije),

gde je f ulazna slika, w je maska filtra a g je rezultat filtriranja. Ostali parametri opisani
su u tabeli.

Opcije Opis

Način filtriranja
’corr’ Filtriranje korelacijom.
’conv’ Filtriranje konvolucijom.

Granične opcije
P Granice ulazne slike dopunjuju sa vrednostima P
(„padding”). Inicijalna vrednost P je 0.
’replicate’ Granice ulazne slike proširuju se („replicating”) sa
vrednostima slike koji se nalaze na spoljašnjim
granicama slike.
’symmetric’ Granice lazne slike proširujun pomoću osne
simetrije oko granica („mirror-reflecting”).
’circular’ Granice ulazne slike proširuje za jednu periodu, kao
2D periodičnu funkciju.

Dimenzione opcije
’full’ Dimenzije izlazne slike podudaraju se sa
dimenzijama proširene slike.
’same’ Dimenzije izlazne slike podudaraju se sa
dimenzijama originalne slike.

Tabela 11.1. Instrukcije i opisi


Pored funkcije imfilter, fitriranje slike može se vršiti i sa funkcijom “filter2”, koja
koristi korelaciju ili sa funkcijama “conv2” ili “conv”, tj. pomoću direktne primene
konvolucije. Sintakse ovih naredbi nalaze se u Matlab Help-u. Deteljniji materijali o
filtriranju nalaze se u Matlab-ovoj dokumentaciji ili u stručno-naučnoj literaturi.
U nastavku prikazaćemo neke primere filtriranja.

Matlab primer 11.1. U ovom primeru prikazaćemo filtriranje pomoću maske dimenzija
3x3, u kojoj se nalaze samo koeficijenti vrednosti 1. Ovaj filtar u stvari vrši zamazivanje-
udebljavanje (“smothing”) u slici. Ovi filtri u stvari računaju srednju vrednost
(“averaging filters”).

Slika 11.4. Linearno filtriranje msakom za usrednjavanje

Na prvoj slici vidimo originalnu sliku. Na drugoj slici vidimo binarni, invertovani
oblik originalne slike. Prag je računat Otsu-ovom metodom. Invertovanje je urađeno zato,
da bi karakteri tablice bili bele boje a pozadina crne boje. Samo u tom slučaju ima svrhe
ozvršiti filtriranje, pošto je cilj izdvojiti-udebljati tablicu i njenu neposrednu okolinu. Na
trećoj slici vidimo efekat filtriranja pomoću konvolucije. Na slici lepo se vidi da su
karakteri popunjeni, udebljani, vidljiviji, dakle cilj jeste postignut. Ovaj rezultat dobijen
je pomoću sledećeg Matlab koda:

>> clear all % brisanje prethodnih podataka


>> im=imread('car3.jpg'); % učitavanje originalne slike
>> I=graythresh(im); % određivanje praga Otsu metodom
>> im1=im2bw(im,I); % primena praga, pretvaranje slice u binarni oblik
>> im1=~im1; % invertovanje slike
>> mask=[1 1 1 % definisanje konvolucione maske (projektovanje filtra)
111
1 1 1];
>> im2=imfilter(im1,mask,'conv'); % filtriranje
>> figure (1) % prikazivanje međurezultata i krajnjeg rezultata
>> imshow(im)
>> figure (2)
>> imshow(im1);
>> figure (3)
>> imshow(im2);

Isti rezultat bi dobili i sa conv2 funcijom, tj.:

>>im2=conv2(im1,mask) ;.

Pažnja: potrebno je obratiti pažnju na tipove podataka, jer se od funkcije do funkcije one
menjaju. Ovo se lako može proveriti u Matlab Help-u i lako se može prevazići
konverzijom između tipova.

Matlab primer 11.2. U ovom primeru prikazaćemo efekte filtriranja na slikama u sivim
nijansama („grayscale“). Filtriranje ćemo vršiti sa dva filtra različitih dimenzija, 5x5 i
11x11. Obe filtar maske sadrže samo 1, kao i u prethodnom primeru.

Slika11.5. (a) Originalna slika; (b) Filtriranje sa 5x5; i (c) 11x11 maskom

Na prvoj slici vidimo originalnu ulaznu sliku, na kojoj je prikazan jedan indijanac.
Na drugoj slici vidimo rezultat filtriranja sa 5x5 filtrom. Na trećoj slici vidimo rezultat
filtriranja sa 11x11 maskom. Najvažniji zaključak jeste, da povećanjem filtar maske
povećava se i zamazivanje (zamašćivanje), slika sve više gubi svoj sadržaj i ostaje u
sovom nijansama. Ove filtre formirali smo sledećim kodom:

>> mask=ones(5); % 5x5 filtar


>> mask=ones(11); % 11x11 filtar.

Filtriranje i prikazivanje rezultata radimo sledećim delom koda:

>> im1=imfilter(im,mask); % filtriranje


>> imshow(im1,[]); % prikaz rezultata.

Učitavanje slike vrši se slično kao u prethodnom primeru.


Matlab primer 11.3. U ovom primeru pokazaćemo kako treba napraviti filtre pomoću
funkcije fspecial.

Slika 11.6. Rezultat filtriranja Laplace-ovim filtrom

Na prvoj slici vidi se originalna slika, koja prikazauje Zemlju iz svemira


(satelitski snimak). Na drugoj slici vidimo istu tu sliku pretvorenu u realni tip podataka
(“double”). Na trećoj slici vidimo rezultat filtriranja Laplace-ovim filtrom (filtrirali smo
realnu sliku, da bi dobili negativne vrednosti koje računa Laplace-ov filtar, inače bi dobili
samo cele brojeve za rezultat). Na četvrtoj slici vidi se razlika realne i filtrirane slike.
Ovom operacijom smo ustvari uradili izoštravanje slike (izdigli smo teksture, ivice).
Ovaj rezultat rezultat dobijen je sledećim Matlab kodom:

>> im1=im2double(im); % pretvaranje slike u realni tip podataka


>> mask=fspecial('laplacian',0) % projektovanje Laplace filtra sa parametrima iz
intervala
% [0,1]

mask =

0 1 0
1 -4 1
0 1 0

>> im2=imfilter(im1,mask,'replicate'); % filtriranje


>> im3=im1-im2; % razlika dva međurezultata

Učitavanje je rađeno kao i u prethodnim primerima i na isti način će se raditi ubuduće.

U prethodnim primerima prikazali smo efekte prostornog filtriranja. Kao što smo
videli, filtre možemo projektovati pomoću ugrađenih funkcija ili manualno prema našim
potrebama i nahođenju (i cilju). Filtar maske možemo veoma lako napraviti, pošto Matlab
radi sa matricama. Kakav filtar želimo, to zavisi isključivo od zadatka. Da bi znali kakav
filtar želimo projektovati, potrebno je poznavati osobine filtara kao i njihove efekte na
sliku (npr. koje frekvencije želimo propustiti, a koje potisnuti, itd.). Npr. na donjim
slikama vidimo dva filtra, po jedan niskopropusni i visokopropusni filtar.

Na osnovu izgleda maski jasno se vidi koje frekvencije će propustiti, a koje


potisnuti dati filtri. Osim ovih filtara, veoma značajnu ulogu imaju i Sobel-ov, Prewitt-ov
i Laplace-ov filtar, jer oni ustvari izdvajaju ivice u slici, što predstavlja jedan od
najvažnijih operacija u algoritmima obrade slike. Ove maske dobijaju se računanjem
gradijenta. U stručno-naučnoj literaturi može se pronaći detaljan opis ove teorije mi je u
ovom materijalu nećemo obrazlagati.

11.2. Filtriranje u frekvencijskom domenu


Filtriranje u frekvencijskom domenu zasniva se na FT. U odnosu na filtriranje u
prostornom domenu, filtriranje u frekvencijskom domenu ima mnoge prednosti. Te
prednosti javljaju se kod projektovanja filtra, kod restauracije slike, kod kompresije, kod
poboljšanja slike i mnogih drugih praktičnih aplikacija. U cilju boljih rezultata filtriranja,
moguće je kombinovati postupke u prostornom i frekvencijskom domenu. Postupak
filtriranja u frekvencijskom domenu prikazan je na sledećoj slici:
Slika 11.7. Frekvencijsko filtriranje

Koraci filtriranja u frekvencijskom domenu su sledeći:

• Ulaznu sliku potrebno je pomnožiti sa (-1)x+y, da bi transformacija bila centrirana


• Računanje DFT od f(x,y), tj. računanje F(u,v)
• Množenje F(u,v) sa H(u,v) funkcijom prenosa filtra
• Računanje IDFT od proizvoda
• Izdvajanje realnog dela rezultata
• Množenje izdvojenog realnog dela rezultujuće slike sa (-1)x+y, da bi se poništio
efekat množenja sa početka algoritma.

Pod pretprocesiranjem podrazumeva se pretvaranje slike u odgovarajući format


(„grayscale“, binarni oblik, dimenzije, itd.). Pod krajnjom obradom uglavnom se
podrazumeva reskaliranje slike („rescaling“) i podešavanje dimenzija, sve u cilju lakšeg
razumevanja i tumačenja rezultata. U nastavku objasnićemo ukratko sam postupak
filtriranja u frekvencijskom domenu.
U prvom koraku važna stvar jeste množenje, da bi rezultat DFT u frekvencijskom
domenu bio centriran, tj.

[ ]
ℑ f ( x, y )(−1) x + y = F (u − M / 2, v − / 2) .

Ovim množenjem koordinatni početak F(u,v) pomera se na koordinate (M/2,N/2) u


frekvencijskom domenu, gde se nalazi koordinatni početak slike dimenzija MxN.
U drugom koraku računa se 2D DFT ulazne slike prema sledećem izrazu:

M −1 N −1
1
ℑ[ f ( x, y )] = F (u , v) = ∑∑ f ( x, y)e − j 2π ( ux / M + vy / N )
,
MN x =0 y =0
gde je F(u,v) 2D DFT od ulazne slike f(x,y). Promenljive u i v predstavljaju promenljive u
frekvencijskom domenu (koje se često označavaju i sa f1 i f2), a x i y su promenljive u
prostornom domenu.
U trećem koraku dobijenu sliku u frekvencijskom domenu F(u,v) množimo sa
H(u,v) prenosnom funkcijom filtra:

G (u, v) = F (u, v) H (u, v) ,

gde je G(u,v) spektar rezultata filtriranja.


U četvrtom koraku računamo IDFT od G(u,v) prema sledećem izrazu:

M −1 N −1
ℑ −1 [G (u, v)] = g ( x, y ) = ∑∑ F (u, v)e j 2π ( ux / M + vy / N )
,
u =0 v =0

gde je g(x,y) rezultujuća slika u prostornom domenu.


U narednom koraku potrebno je izdvojiti realni deo rezultata i to ćemo uraditi na
sledeći način:

g f ( x, y ) = Re[ g ( x, y )] ,

gde je gf(x,y) realni deo od g(x,y).


Na kraju, dobijenu realnu sliku potrebno je pomnožiti sa(-1)x+y, da bi krajnju
izfiltriranu sliku centrirali, tj. da bi koordinatni početak bio u gf(0,0).

Slično kao i kod 1D konvolucije i FT, tako i za 2D konvoluciju i FT možemo


napisati sledeće osobine:

f ( x, y ) ∗ h( x, y ) ↔ F (u, v) H (u , v) ili f ( x, y )h( x, y ) ↔ F (u, v) ∗ H (u , v) .

U Matlab-u postoji nekoliko ugrađenih funkcija, pomoću kojih lako se može vršiti
filtriranje u frekvencijskom domenu. Najčešće korišćene funkcije jesu: fft2, ifft2, fftshift,
ifftshift, real, fspecial, freqz, itd.

2D DFT može se računati pomoću brzog DFT algoritma (FFT) sledećom Matlab
sintaksom:

F=fft2(f, P, Q),

gde je f ulazna slika, a F je rezultat DFT-a dimenzija PxQ. Dimenzije PxQ dobijamo
dopunjavanjem nulama (“zero padding”), gde se ulazna slika f dopunjuje s
odgovarajućim brojem nula.
Transliranje DFT-a možemo uraditi na sledeći način:

Fc=fftshift(F),
gde je Fc centrirana verzija DFT-a. Dobijenu sliku možemo pogledati pomoću sledeće
ugrađene naredbe:

imshow(abs(Fc), []),

gde abs(Fc) označava apsolutnu vrednost od Fc.


Pošto posle pomeranja dinamički opseg slike biće očekivano velik, potrebno je
uraditi neko “podešavanje” pomoću logaritamske transformacije:

S2=log(1+abs(Fc))
imshow(S2, []).

Posle ovih podešavanja mnogo bolje se mogu videti frekvencijske komponente slike u
spektru.
Sledeće naredba vraća centriranu sliku u prvobitni položaj:

F=ifftshift(Fc).

Invernzna DFT računa se na sledeći način:

f=ifft2(F),

gde F označava spektar slike, a f je data slika u prostornom domenu. Posle ovoga ostaje
nam samo izdvojiti realni deo slike:

f1=real(f), ili f1=real(ifft2(F)),

gde je f1 realna slika.


U nastavku objasnićemo način odabiranja vrednosti P i Q kod dopunjavanja slike
nulama. Ako npr. MxN dimenzije slike f(x,y), a dimenzije filtra h(x,y) su AxB, tada u cilju
izbegavanja grešaka odabiramo da je:

P ≥ M + A − 1 i Q ≥ N + B − 1.

Pomoću sledeće funkcije možemo definisati (kreirati) prostorne filtre:

h=fspecial(’tip’, parametri),

gde ’tip’ označava tip filtra , npr. Gauss, Laplace, Sobel, usrednjivanje, Prewitt,
logaritamski, itd. Inicijalna veličina ovih filtara jeste 3x3. Pod parametrima
podrazumevamo npr. dimenzije, radijus, ugao, itd. Detaljan opis ove naredbe nalazi se u
Matlab-ovom Help-u.
Frekvencijske prenosne funkcije filtara iz prostornog domena možemo lako
računati pomoću sledeće funkcije:
H=freqz2(h, R, C),

gde je H prenosna funkcija filtra, h je impulsni odziv 2D filtra, R je broj željenih vrsta, a
C je broj željenih kolona.

Matlab primer 11.4. U ovom primeru prikazaćemo postupak filtriranja u frekvencijskom


domenu. Razmotrićemo oblike niskopropusnog i visokopropusnog filtra u
frekvencijskom domenu.

Pomoću sledećeg Matlab koda generisaćemo jedan NF filtar, koji ćemo Z


transformacijom prebaciti u frekvencijski domen.

>> mask=[1 2 1;2 4 2;1 2 1]; % filtar u prostornom domenu


>> mesh(mask); % prikaz filtra u prostornom domenu
>> MASK=freqz2(mask); % prebacivanje filtra u frekvencijski domen
>> mesh(MASK); % prikaz filtra u frekvencijskom domenu

Na prvoj slici vidimo NF filtar u prostornom domenu, dok na drugoj slici vidimo isti taj
filtar u frekvencijskom domenu. Na obe slike lepo vidi se osobina filtra da izdiže niske
učestanosti a visoke potiskuje.

4 20

3.5
15
3

2.5 10

2
5
1.5

1 0
3 80
2.5 3 60 80
2 2.5 40 60
2 40
1.5 1.5 20 20
1 1 0 0

Slika 11.8. NF filtar

Filtar propusnik visokih učestanosti dobija se sledećim kodom:

>> mask=[4 2 4; 2 1 2; 4 2 4];


>> mesh(mask);
>> MASK=freqz2(mask);
>> mesh(MASK);
4 30

3.5 20

3
10
2.5
0
2

1.5 -10

1 -20
3 80
2.5 3 60 80
2 2.5 40 60
2 40
1.5 1.5 20 20
1 1 0 0

Slika 11.9. VF filtar

I u ovom slučaju na prvoj slici je varijanta filtra u prostornom, a na drugoj varijanta u


frekvencijskom domenu. Na ovim slikama takođe se lepo vide osobine filtra.

VF filtar lako se može izračunati preko VF filtra na sledeći način:

VF=1-NF.

Ovaj kratki opis u potpunosti opisuje čitav postupak.

Matlab primer 11.5. Sledeći primer opisuje Gauss-ov filtar i njegove osobine.
0.8 1

0.6 0.8

0.4 0.6

0.2 0.4

0 0.2
3 80
2.5 3 60 80
2 2.5 40 60
2 40
1.5 1.5 20 20
1 1 0 0

Slika 11.10. Filtriranje Gauss-ovim NF filtrom

Filtriranje vrši sledeći Matlab kod:

>> im=imread('5.1.13.tiff'); % učitavanje slike


>> h=fspecial('gaussian'); % generisanje Gauss-ovog NF filtra
>> H=freqz2(h,256,256); % prebacivanje filtra u frekvencijski domen
>> IM=freqz2(im,256,256); % prebacivanje ulazne slike u frek. domen
>> Y=IM*H; % filtriranje slike osobinom konvolucije
>> y=real(ifft2(Y)); % IDFT i izdvajanje realnog dela rezultata
>> y1=gscale(y); % reskaliranje slike u opseg od 0-256, s funkcijom gscale
% [8], koja je pisana za ovu namenu
>> y2=histeq(y1,256); %ekvalizacija histograma u cilju bolje preglednosti slike

Opis postupka jasno se vidi i iz Matlab koda.


Na prvoj slici vidimo frekvencijski oblik VF filtra, a na drugom njegov spektar. Na trećoj
slici vidimo rezultat filtriranja u frekvencijskom domenu. Na četvrtoj slici vidimo rezultat
u prostornom domenu. Na petoj slici vidimo reskaliranu sliku, koju smo dobili upotrebom
funkcije gscale. Na zadnjoj slici vidimo sliku posle ekvalizacije histograma.

U narednom primeru prikazaćemo varijantu, kada generišemo VF filtar. Postupak


filtriranja je identičan, kao i malopre.

Slika 11.11. Filtriranje Gauss-ovim VF filtrom

VF filtar jednostavno izvodimo iz NF filtra. To se može uraditi sledećim Matlab kodom:

>> H1=1-H; % određivanje VF filtra iz NF filtra

Matlab primer 11.6. U ovom primeru prikazaćemo filtriranje Sobel-ovim filtrom u


frekvencijskom domenu. Osnovna osobina Sobel-ovog filtra jeste, da izdvaja ivice u slici.

Na prvoj slici vidimo originalnu ulaznu sliku, a na drugoj njen spektar. Na trećoj slici
vidimo Sobel-ov filtar u prostornom domenu. Na zadnjoj slici vidimo rezultat filtriranja
posle IDFT. Na slici vide se izdvojene ivice (koje je filtar mogao izdvojiti).
Slika 11.12. Filtriranje u frekvencijskom domenu Sobel-ovim filtrom

Ove rezultate dobili smo sledećim Matlab kodom:

>> im=imread('house.tiff'); % učitavanje slike


>> im=rgb2gray(im); %pretvaranje slike u sive nijanse
>> IM=fft2(im,512,512); % DFT slike
>> IM1=fftshift(log(1+abs(IM))); % transliranje spektra u cilju bolje preglednosti
>> h=fspecial('sobel'); % generisanje Sobel-ovog filtra
>> H=freqz2(h,512,512); % Z transformacija filtra
>> y=real(ifft2(H.*IM)); % filtriranje, IDFT, izdvajanje realnog dela rezultata

U cilju promene načina filtiranja potrebno je promeniti parametre filtra, transformacije,


transliranja, reskaliranja, itd. Opis ovih postupaka može se pronaći u Matlab Help-u.

Na kraju, ukratko ćemo uporediti zahteve u računanju kod postupaka u


prostornom domenu sa konvolucijom i kod postupaka u frekvencijskom domenu sa FT.
1. Posmatrajmo sistem za obrau slike, koji obrađuje slike dimenzija 480x640 piksela
filtriranjem u prostornom domenu sa filtar maskom dimenzija 3x3.
Za svaki piksel slike kod filtriranja potrebno je izvršiti 3x3=9 množenja. Broj piksela je
480x640=307.200, tako da broj operacija množenja i sabiranja kod filtriranja pomoću
konvolucije je 2.764.800. Šta se dešava kada je filtar dimenzija 11x11? Tada je broj
množenja i sabiranja 307.200x121=37.171.200.
Koji je zaključak kod ovog postupka? Povećanjem dimenzija filtra, broj operacija se
kvadratno povećava tokom filtriranja.
2. Sada posmatrajmo sistem za obradu govora, koji obrađuje slike dimenzija
512x512 u slučaju filtriranja u frekvencijskom domenu. Dimenzije filtra u
frekvencijskom domenu poklapaju se sa dimenzijama same ulazne slike u
frekvencijskom domenu.
Broj potrebnih računanja za konvertovanje slike u frekvencijski domen jeste
N2logN=710.219. Broj množenja u prostornom domenu je 262.142, a zahtevi kod
inverzne transformacije su N2logN=710.219. Dakle, broj potrebnih računanja kod
filtriranja u frekvencijskom domenu za sliku dimenzija 512x512 je 1.682.582.

Upoređivanjem primera pod tačkama 1 i 2 možemo zaključiti da postupci, gde se


koristi 2D FFT zahtevaju manji broj računanja, nego postupci, gde se koristi filtriranje sa
filtrima dimenzija 3x3 pomoću konvolucije.

12. Transformacije slike


Fourier-ova transformacija predstavlja sliku kao zbir kompleksnih
eksponencijalnih članova različitih amplituda, frekvencija i faza. FT ima važnu ulogu u
mnogim aplikacijama obrade slike, kao što su kompresija slike, analiza slike,
rekonstrukcija slike, itd.

12.1. Fourier-ova transformacija (FT)


Ako f(m,n) prestavlja jednu dvodimenzionalnu prostornu funkciju, gde su m i n
prostorne promenljive, tada 2D FT od f(m,n) definiše se kao:

∞ ∞
F (ω1 , ω 2 ) = ∑ ∑ f (m, n)e
m = −∞ n = −∞
− jω1m
e − jω 2 n ,

gde su ω1, ω2 dve frekvencijske promenljive. Funkciju F (ω1 , ω 2 ) nazivamo


frekvencijskom predstavom (transformacijom) funkcije f(m,n). Zbog osobine
periodičnosti, funkcija se predstavlja samo u intervalu − π ≤ ω1 , ω 2 ≤ π . Član F(0,0)
računa se kao zbir svih f(m,n)-ova i predstavlja jednosmernu-DC komponentu.
Inverzna FT jeste transformacija kojom se dobija početna funkcija (slika). Ona se
definiše na sledeći način:
π π
1
∫ π ω ∫ πf (m, n)e
jω1m
f (m, n) = e jω2 n dω1 dω 2 .
4π 2 ω1 =− 2 =−

Na donjoj slici dat je primer slike i njene FT:

Slika 12.1. Slika u prostornom domenu i amplituda njene FT

12.2. Diskretna kosinusna transformacija (DCT)


Postoji niz transformacija, koje su razvijene za potrebe kompresije. Npr.
Karhunen-Loeve transformacija radi najbolju kompresiju, ali veoma je teška i
problematična za primenu. FT je jednostavna za primenu, ali ima lošu kompresiju. Posle
dugog razvoja stručnjaci su dalje razvijali FT i došli do diskretne kosinusne
transformacije (DCT). Dok FT koristi i sinusne i kosinusne članove, dotle DCT koristi
samo kosinusne članove. Postoji čitav niz postupaka za DCT, koji se malo razlikuju u
matematičkom aparatu. Npr. jedna od verzija jeste; slika od 129 tačaka, odbirci od 0 do
128. Zatim ovaj niz dupliramo i dobijemo 255 odbiraka u sledećem redosledu:
0,1,2,...127, 128, 127,...,2,1. FT ovog niza od 256 odbiraka imaće spektar od 129
odbiraka u redosledu od 0 do 128. Pošto smo u vremenskom domenu generisali jedan
simetričan signal, zato su imaginarni delovi jednaki nuli. Tačnije rečeno, krenuli smo od
jednog signala u vremensko domenu, koji ima 129 odbiraka i u spektru smo dobili 129
odbiraka i svaki odbirak predstavlja kosinusni odbirak, tj. dobili smo DCT transformaciju
Ako DCT obrađuje blok od 8x8 piksela, tada će ih on preslikati u blok od 8x8
piksela, drugim rečima, 64 brojeva preslikaće u 64 drugih brojeva. Svaka vrednost je
realna, tako da nema potrebe za kompleksnom matematikom. Ovako, svaka vrednost
posle Fourier-ove analize predstavlja amplitudu bazne funkcije. Donja slika prikazuje 4
funkcije od 64 baznih funkcija.
Slika 12.2. Prikaz nekih od baznih funkcija

Niskofrekvencijske komponente zauzimaju levi, gornji ugao spektra, dok visoke


frekvencije se nalaze u donjem, desnom delu spektra. Jednosmerna komponenta je prva,
levo, gornja komponenta u spektru. Ovako, npr. [0,1] bazna funkcija predstavlja jedan
polukosinusni signal u jednom smeru, dok komponenta [1,0] predstavlja isti taj
polukosinus, samo rotiran za 90˚.
DCT spektar računamo tako, što korelišemo blok od 8x8 piksela sa svakom
baznom funkcijom tako, što množimo baznu funkciju sa blokom od 8x8 piksela i zatim
saberemo vrednosti. Potrebno je uraditi dva podešavanja, da bi završili računanje DCT.
Prvo, podelimo 15 spektralnih vrednosti u nultoj vrsti i u nultoj koloni sa 2. Drugo, svih
64 kompoeneti podelimo sa 16.
Kod inverzne DCT prosto saberemo bazne funkcije, nema potrebe raditi nikakve
dodatne korake, ovo se u potpunosti poklapa sa Fourier-ovom analizom i teorijom, samo
sa drugim baznim funkcijama.
DCT jedne slike posmatramo kao zbir sinusa različitih amplituda i frekvencija.
2D DCT matrice dimenzija MxN definišemo kao:

M −1 N −1
π (2m + 1) p π (2n + 1)q
B pq = α pα q ∑∑ Amn cos cos 0 ≤ p ≤ M − 1, 0 ≤ q ≤ N −1
m =0 n =0 2M 2N
,

gde su

⎧ 1/ M , p=0 ⎧ 1/ M , q = 0
αp = ⎨ i αq = ⎨ .
⎩ 2 / M , 1 ≤ p ≤ M-1 ⎩ 2 / M , 1 ≤ q ≤ M-1

Vrednost Bpq nazivamo koeficijentom DCT transformacije.


DCT jeste transformacija, koja se može okrenuti, tako da rezultat inverzne
transformacije je početna slika u prostornom domenu:

M −1 N −1
π (2m + 1) p π (2n + 1)q
Amn = ∑∑ α
m=0 n =0
p α q B pq cos
2M
cos
2N
0 ≤ p ≤ M − 1, 0 ≤ q ≤ N −1,

gde su

⎧ 1/ M , p=0 ⎧ 1/ M , q=0
αp = ⎨ i αq = ⎨ .
⎩ 2 / M , 1 ≤ p ≤ M-1 ⎩ 2 / M , 1 ≤ q ≤ M-1

12.3. Postupci kompresije slike


Tehnike kompresije mogu se podeliti u dve kategorije:
• kompresija bez gubitaka;
• kompresija sa gubicima.
Tehnike bez gubitaka omogućavaju perfektnu rekonstrukciju originalne slike, dok je kod
tehnika sa gubicima rekonstruisana slika slična originalu, ali ne i u potpunosti jednaka.

12.3.1. JPEG standard za kompresiju nepokretne slike

Postoji čitav niz postupaka sa gubicima koji su razvijeni za potrebe kompesije


slike, koje nazivamo kompresionim transformacijama. Jedna od najboljih transformacija
jeste JPEG, čiji naziv potiče iz imena Joint Photographers Experts Group. U nastavku
opisaćemo ukratko postupak JPEG kompresije.
JPEG omogućuje kompresiju bilo kakve digitalne slike, sive ili u boji, sa gubicima ili
bez gubitaka, nezavisno od njene rezolucije. Postoje četiri načina kompresije po JPEG
standardu:
• Sekvencijalno DCT kodovanje: slika se koduje jednim prolazom kroz sliku, s leva
na desno, pa odozgo prema dole.
• Progresivno DCT kodovanje: slika se koduje u više prolaza, s ciljem da korisnik
što pre dobije makar i grubu sliku, a zatim sve finiju i finiju strukturu slike.
• Kodovanje bez gubitaka: garantuje se perfektna rekonstrukcija originalne slike, ali
je stepen kompresije mali.
• Hijerarhijsko kodovanje: slika se koduje različitim rezolucijama, pri čemu za
rekonstrukciju slike niže rezolucije nije potrebno poznavanje podataka o
kodovanju slike više rezolucije.

Slika 12.3. Blok šema JPEG sekvencijanog kodera i dekodera

U nastavku opisaćemo sekvencijalno DCT kodovanje. U tom slučaju koder se


sastoji iz tri osnovna bloka:
• Blok za računanje direktne diskretne kosinusne transformacije (FDCT),
• Kvantizer,
• Entorpijski koder.
Ceo postupak počinje podelom slike na blokove od 8x8 piksela. Potpuni JPEG
algoritam može koristiti piksele sa različitim brojem bita, u kojima je sadržana
informacija i o boji. U primeru koji će biti opisan svaki piksel opisuje informaciju
veličine 1 Byte-a u okviru jedne skale sa vrednostima od 0 do 255. Blok od 8x8 piksela
tretiramo nezavisno tokom celog postupka kompresije, dakle kod početka algoritma,
svaki blok opisan je informacijom od 64 Byte-a. Posle transformacije i odabiranja
podataka, isti taj blok biće opisan sa 2 do 20 Byte-a. Kod dekompresije, algoritam će od
tih 2 do 20 Byte-a napraviti jednu aproksimaciju, koja će imati veličinu od 64 Byte.
Slika 12.4.

Na slici 12.4. vidimo jedan blok od 8x8 piksela, na kojem će biti prikazano JPEG
kodovanje. Leva kolona slika a, b i c prikazuje originalne vrednosti piksela. Srednja
kolona prikazuje DCT na slikama d, e i f od date grupe piksela i na kraju desna kolona
prikazuje efekat redukcije bita na spektralne komponente na slikama g, h i i. Kao dobar
primer slika g prikazuje “skrnavljenje” slike na 10 bita. Slično, slika h prikazuje
“skrnavljenje-sakaćenje” na 8 bita, a slika i na 5 bita. Kao što se vidi, greške se
povećavaju u slučaju reprezentacije sa manjim brojem bita.

Slika 12.5. Uticaj kvantizacije na meru greške; a) 10 bita, b) 8 bita, i c) 5 bita

Na slici lepo se vidi da slika sadrši svaku od spektralnih komponenti (odbacivanje


spektralnih komponenti-sažimanje frekvencijskog opsga). Pošto sam signal sadrži
uglavnom niskofrekvencijske komponente, tako visokofrekvencijske komponente mogu
se odbaciti. Slika 12.6. prikazuje meru distorzije slike, kada se odbaci različiti broj
visokofrekvencijskih komponenti. Ako koristimo svaki član bloka 8x8, dobićemo slučaj
pod d, na slici c eliminisana je trećina harmonika, ali u ovom slučaju greška je mala-
zanemarujuća kod rekonstrukcije. Greške su pre svega rezultat uticaja šuma i ostalih
štetnih efekata.

Slika 12.6. Uticaj broja frekvencijskih komponenti na kvalitet rekonstrukcije; a) svi


frekvencijski koeficijenti su prisutni, b) 23% frekvencijskih koeficijenata je prisutno
JPEG algoritam je dobar primer kako se koristi više kompresionih postupaka u
cilju postizanja što efektnijih rezultata. U nastavku prikazaćemo kompletni postupak
JPEG-a:
1. Sliku podelimo na blokove dimenzija 8x8.
2. Primenjujemo DCT na svaki od ovih blokova.
3. Svaki blok spektra od 8x8 komprimujemo bit redukcijom i odbacivanjem visokih
spektralnih komponenti. Ovaj postupak radimo u jednom koraku kontrolišući ga
tzv. tabelom kvantizacije. Na slici 12.7. prikazane su dve tabele kvantizacije:

Slika 12.7. Kompresione tabele kvantizacije; a) mala kompresija, b) velika kompresija

Svaka vrednost iz spektra podeljena je s jednom posmatranom vrednošću iz tabele


i rezultat se zaokružuje na susednu celu vrednost. Sa kvantizacijom iskoristili smo
osobinu, da za ljudsko oko nisu iste važnosti različite vrednosti frekvencijskih
koeficijenata. Naprimer, vrednost u gornjem levom uglu tabele kvantizacije je 1,
pretpostavimo, da DC vrednost ne menjamo, radi upoređivanja u donjem desnom
uglu slike a vrednost je 16, dakle početni opseg od -127 do 127 redukovan je na
opseg od -7 do 7. S druge strane reprezentaciju od 8 bita redukovali smo na
reprezentaciju od 4 bita. Rezultate DCT-a u svih 64 slučajeva možemo poređati
prema njihovoj važnosti. Članove sa višim frekvencijama-kod kojih je
višekoračna rezolucija manje štetna delimo sa većim vrednostima, a članove sa
manjim frekvencijama delimo sa manjim vrednostima. Najbrutalniji slučaj jeste,
kada se, ako taj član eliminišemo u potpunosti; to je prikazano na slici 12.7. b.
4. Modifikovani spektar iz bloka 8x8 transformiše se u jedan linearni niz. Ovu polje
prikazano je na slici 12.8., gde su visokofrekvencijske komponente postavljene na
kraj reda. Ovakvo grupisanje eliminiše nule tokom dugih iteracija.
Slika 12.8. Struktura rednog izčitavanja

5. Veliki broj nula posle poređanja, koje se javlja u slučaju komponenti viših
frekvencija omogućuje generisanje kraćeg koda.
6. Na kraju, krajnju komprinovanu formu dobijamo Huffman-ovim ili aritmetičkim
kodovanjem.

Meru kompresije i krajnje gubitke možemo zapaziti u kvalitetu slike, kada


algoritam-program za kompresiju završi rad. Slika 12.9. prikazuje meru distorzije slike.

Slika 12.9. Efekat JPEG kompresije na sliku; a) originalna slika, b) kompresija 10:1, c)
kompresija 45:1

Noviji standard JPEG2000 sadrži mnoge novine i specifikacije, koji ne postoji u


ranijim JPEG standardima. Osnovna strukturna razlika jeste primena Wavelett
transformacije umesto DCT transformacije, i na taj način i pri većim nivoima kompresije
slika neće sadržati sitne mozaike. Pošto su nove tehnologije uglavnom internet-
orijentisane, interesantan rezultat ovog razvoja je vidljiv kod “skidanja” nepokretnih slika
sa interneta na PC računar korisnika - slike su prvo lošije i postepeno se popravljaju i na
kraju su savršene. Ovim postupkom kompresije nećemo se posebno baviti, samo ćemo
spomenuti da je firma Analog Devices razvila jedno integrisano kolo, čiji zadatk je JPEG
kompresija i dekompresija. Detaljimogu se naći u stručno-naučnoj literaturi [8], [9].
MPEG je standard za kompresiju pokretne slike. Ovaj standard se koristi u
kompjuterskoj obradi slike i u oblasti digitalne televizije. MPEG se takoe koristi za
kompresiju muzikog signala uz video signal. MPEG je skraenica od Moving Pictures
Experts Group. MPEG kodovanje je koliinski složenije od JPEG kodovanja. MPEG
kodovanje i dekodovanje se u sve veem broju sluajeva integriše u integralna kola.
Najrasprostraniji algoritmi za prenos video signala su MPEG 1, 2, 3, 4, kao i
H.261, H.262, H.263, i H.264. Logino, prvi standard koji se pojavio oznaen je sa 1 ili
sa njim paralelno razvijeni standard sa H.261. Ostali standardi su proistekli iz ovih tokom
razvoja. Glavni zadatak enkodera jeste, da kroz odreeni vremenski period pomou DCT-
a ili Wavelett transformacije naini jednu slino komprinovanu sliku kao i kod JPEG
standarda, tj. da generišu razliku izmešu dobijenih referentnih slika na osnovu kojih
dekoder e napraviti video sekvencu.
Kod MPEG kompresije koriste se dva tipa kompresije; jedan za kompresiju
informacija izmešu frejmova i jedan za kompresiju same slike. U sluaju kompresije
izmeu slika postoji više tipova kompresije: I (Intra Coded Pictures), P (Predictive
Coded Pictures), B (Bidirectionally Predictive Coded Pictures) i D (DC Coded Pictures),
koji koduje DC komponente na niskim frekvencijama koji su rezultat DCT-a. Prvi korak
je odrediti da li dobijenu sliku (malu sliku) treba kodovati intra – ili interframe
postupkom. Da bi ovo odredili i u interesu dalje obrade, prvo dobijenu sliicu treba
pravilno pretprocesirati. Tek posle ovih koraka može se doneti pravilna odluka o tome,
koji postupak kodovanja treba primeniti (slika 12.10).

Slika 12.10. Struktura MPEG kompresije

Matlab primer 12.1. U sledeem primeru prikazaemo DCT i IDCT transformaciju. Na


prvoj slici prikazana je originalna slika. Na drugoj slici vidi se dijagram, koji pokazuje
raspodelu energije signala slike. Može se primetiti da najvea koncentracija energije je u
gornjem levom uglu (zato, jer DC komponenta ima najveu energiju). Na treoj slici
vidimo rezultat inverzne DCT transformacije.
10

-2

-4

-6

-8

-10

Slika 12.11. Primer DCT i IDCT

Ove rezultate dobili smo sledeim Matlab kodom:

>> im=imread('boat.512.tiff'); % uitavanje slike


>> J = dct2(im); % DCT transformacija
>> imshow(log(abs(J)),[]), colormap(jet(64)), colorbar % prikaz rezultata
>> J(abs(J) < 10) = 0; % ograniavanje amplitude, sve ispod 10 je
0
>> K = idct2(J); % inverzna DCT
>> figure, imshow(K,[0 255]) % prikaz inverzne DCT

Matlab primer 12.2. U narednom primeru prikazaemo kompresiju slike pomou DCT,
obradom nad blokovima. Na prvoj slici vidimo originalnu sliku, koja prikazuje jednog
majmuna u sivim nijansama. Na drugoj slici vidimo rezultat kompresije, koji smo dobili
obradom nad blokovima 8x8. Može se uoiti da je rezultujua slika malo mutnija od
originala. Dakle, tokom kompresije došlo je do gubitka podataka. DCT i blokovska
obrada su osnove za popularni JPEG standard. U JPEG standardu koristi se blokovska
obrada nad blokovima dimenzija 8x8 i 16x16. Znai osnova za JPEG su DCT i Huffman-
ovo kodovanje.
Slika 12.12. Prikaz kompesije pomou DCT

Kompresija vrši sledei Matlab kod:

>> I=imread('4.2.03.tiff');
>> I=rgb2gray(I); % pretvaranje slike u sive nijanse
>> I = im2double(I);
>> T = dctmtx(8); % raunanje DCT matrice
>> B = blkproc(I,[8 8],'P1*x*P2',T,T'); % DCT, blokovska obrada
>> mask = [1 1 1 1 0 0 0 0 % maska
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
>> B2 = blkproc(B,[8 8],'P1.*x',mask); % blokovska obrada
>> I2 = blkproc(B2,[8 8],'P1*x*P2',T',T); % inverzna DCT, blokovska obrada
>> imshow(I), figure, imshow(I2) % prikaz rezultata

You might also like