Professional Documents
Culture Documents
Obrada Slike by Odri
Obrada Slike by Odri
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.
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
Slika 10.7. Površina koju oko može videti, prostorni ugao vida i definicija piksela
20 o 20 ⋅ 60 ,
n1 = = = 600 pixel ,
2, 2,
a po horizontali kao:
4
n2 = n1 = 800 pixel ,
3
n = n1 n2 = 4.8 ⋅ 10 5 pixel .
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.).
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:
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.
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.
+∞
y (t ) = x(t ) ∗ h(t ) = ∫ x(τ )h(t − τ )dτ .
−∞
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 ( n) = ∑ x ( m) h ( n − m) .
m = −∞
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]
+∞ +∞
y ( x, y ) = ∫ ∫ f ( x, y)h( x − x' , y − y' )dx' dy' ,
− ∞− ∞
+∞ +∞
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 ( 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
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]
+∞ +∞
y ( x, y ) = ∫ ∫ f ( x, y)h( x − x' , y − y' )dx' dy' ,
− ∞− ∞
+∞ +∞
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:
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 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.
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”).
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:
>>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 =
0 1 0
1 -4 1
0 1 0
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.
[ ]
ℑ f ( x, y )(−1) x + y = F (u − M / 2, v − / 2) .
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:
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
g f ( x, y ) = Re[ g ( x, y )] ,
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), []),
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).
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:
P ≥ M + A − 1 i Q ≥ N + B − 1.
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.
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
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
VF=1-NF.
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
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
∞ ∞
F (ω1 , ω 2 ) = ∑ ∑ f (m, n)e
m = −∞ n = −∞
− jω1m
e − jω 2 n ,
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
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
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.
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.
Slika 12.9. Efekat JPEG kompresije na sliku; a) originalna slika, b) kompresija 10:1, c)
kompresija 45:1
-2
-4
-6
-8
-10
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
>> 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