You are on page 1of 32

FAKULTET ELEKTROTEHNIKE, STROJARSTVA I BRODOGRADNJE

SVEUILITE U SPLITU

DIGITALNA OBRADA I ANALIZA


SLIKE
Laboratorijske vjebe

Damir Krstini / Maja Braovi

Listopad, 2013.

Sadraj
VJEBA 1............................................................................................. 3
Obrada i analiza digitalne slike programom MATLAB...........................................3
VJEBA 2............................................................................................. 6
MATLAB Image Processing Toolbox.......................................................................6
VJEBA 3............................................................................................. 8
Operacije temeljene na histogramu 1..................................................................8
VJEBA 4........................................................................................... 13
Operacije temeljene na histogramu 2................................................................13
VJEBA 5........................................................................................... 16
Konvolucija i korelacija.......................................................................................16
VJEBA 6........................................................................................... 22
Segmentacija slike.............................................................................................22
VJEBA 7........................................................................................... 25
Medijan filter......................................................................................................25
VJEBA 8........................................................................................... 27
Uvod u OpenCV..................................................................................................27
SEMINARSKI RAD............................................................................... 31
LITERATURA......................................................................................32

VJEBA 1
Obrada i analiza digitalne slike programom MATLAB
Prouite osnovne funkcije Image Processing Toolbox modula koji je dio
programskog paketa MATLAB. U radu koristite sustav pomoi MATLAB-a i upute za
koritenje Image Processing Toolbox modula.
Slike na kojima e se najee testirati MATLAB-ove funkcije su standardne testne
slike u digitalnoj obradi i analizi slike i prikazane su na slici 1.1. Slike e se u
okviru ovih vjebi nazivati lena-grayscale.jpg i lena-color.jpg.

Slika 1.1. Slike koje e se najee koristiti u okviru ovih laboratorijskih vjebi su
lena-grayscale.jpg i lena-color.jpg
U okviru vjebe potrebno je izvriti sljedee korake:
Osnovne operacije
1. Uitavanje slike:
A = imread('lena-grayscale.jpg');
Slika je pohranjena u matricu A. Utvrdite dimenzije matrice naredbom
size(A). Koji je format brojeva (tip podataka) koriten za pohranu slike u
memoriji?
2. Prikaz slike:
3

imshow(A)
3. Prikaz dodatnih informacija na slici:
imshow(A)
colorbar
impixelinfo
Prouite dobivene informacije. Koje su od ovih informacija interaktivne?
4. Informacije o datoteci sa pohranjenom slikom:
imfinfo('lena-grayscale.jpg')
Prouite i opiite dobivene informacije.
5. Pohrana slike:
imwrite(A, 'C:/.../slika.jpg', 'jpg');
Koritenjem funkcije imwrite() pohranite sliku u razliitim formatima.
6. Pohrana slike sa razliitim stupnjem kompresije:
imwrite(A, 'C:/.../komprimirana_slika.jpg', 'jpeg', 'Quality', 10);
Koritenjem funkcije imwrite() pohranite sliku u jpeg formatu sa razliitim
stupnjem kompresije (razina kvalitete 5%, 25%, 50%, 100%). Prouite
razliku izmeu pohranjenih slika.
7. Izvrite naredbe:
figure; imshow(A, [100, 200]);
Objasnite nain prikaza slike. to oznaavaju brojevi u uglatim zagradama?
Matrine operacije na slici
1. Izdvajanje regije:
A1 = A(115:150, 115:180);
figure; imshow(A1);
Koji je efekt izvoenja gornjih naredbi? Izdvojite cijelu glavu ene na slici i
pohranite je u datoteku kao zasebnu sliku pod imenom glava.jpg.
2. Izvrite naredbu:
figure; imshow(255-A);
Na koji nain je dobiven negativ ulazne slike?
3. Smanjite ulaznu sliku na slijedei nain:
B1 = A(1:2:256, 1:2:256);
figure; imshow(B1);
Na koji nain je dobivena umanjena slika?
Tipovi brojeva i memorijska reprezentacija slike
1. Smanjite ulaznu sliku na slijedei nain:
4

B2 = (A(1:2:256, 1:2:256) + A(2:2:256, 2:2:256))/2;


figure; imshow(B2);
Koja od dvije umanjene verzije (B1, B2) vjernije odgovara izvornoj slici?
Prouite tip brojeva koriten pri memorijskoj reprezentaciji slike i objasnite
razlog dobivanja loije kvalitete raunanjem srednje vrijednosti susjednih
piksela.
2. Izvrite slijedee naredbe:
D=im2double(A);
figure; imshow(D);
colorbar
impixelinfo
Prouite raspon vrijednosti elemenata matrice D i prikazanu sliku. Smanjite
sliku pohranjenu u matricu D na ranije opisan nain:
R1 = D(1:2:256, 1:2:256);
R2 = (D(1:2:256, 1:2:256) + D(2:2:256, 2:2:256))/2;
figure; imshow(R1);
figure; imshow(R2);
Prouite razlike u odnosu na prethodni sluaj (tip brojeva uint8). Koja od
umanjenih slika u ovom sluaju vjernije odgovara izvornoj slici?
Opiite ukratko korake vjebe. Datoteku sa opisom vjebe, zajedno sa snimljenim
izlaznim slikama, zapakirajte u zip arhivu i uploadajte na e-Learning portal.

VJEBA 2
MATLAB Image Processing Toolbox
Prouite napredne funkcije Image Processing Toolbox modula koji je dio
programskog paketa MATLAB. U radu koristite sustav pomoi MATLAB-a i upute za
koritenje Image Processing Toolbox modula.
Konvertiranje slike u boji u sliku u razinama sive boje
Konvertiranje slike u boji u sliku u razinama sive boje rauna se po sljedeoj
formuli:
slika u razinama sive boje=0.299R+ 0.587G+ 0.114B
gdje R, G i B oznaavaju crveni, zeleni i plavi kanal ulazne slike.
Funkcija u MATLAB-u koja konvertira sliku u boji u sliku u razinama sive boje zove
se rgb2gray().
U okviru vjebe potrebno je izvriti sljedee korake:
1. U MATLAB-u uitajte sliku lena-color.jpg i prikaite je.
2. Ulaznu sliku konvertirajte u sliku u razinama sive boje pomou funkcije
rgb2gray() i rezultat spremite u datoteku siva-slika-1.jpg.
3. Napiite funkciju za konvertiranje slike u boji u sliku u razinama sive boje.
Funkciju primijenite na ulaznoj slici i rezultat spremite u datoteku siva-slika2.jpg.
Usporedite rezultate dobivene koritenjem MATLAB-ove funkcije rgb2gray() i
funkcije koju ste sami napisali.
4. Promijenite dimenzije slike siva-slika-1.jpg na 100x100. Koristite funkciju
imresize().
Primjer koritenja funkcije imresize():
skalirana_slika = imresize(slika, [novi_broj_redaka
novi_broj_stupaca]);
skalirana_slika = imresize(slika, faktor_skaliranja);
Skaliranu
sliku
pohranite
u
zasebnu
datoteku
pod
imenom
skalirana_slika.jpg.
Opiite ukratko korake vjebe. Datoteku s opisom vjebe, zajedno sa snimljenim
izlaznim slikama, uploadajte na e-Learning portal.

Dodatne informacije korisne za izvravanje ove vjebe mogu se pronai na:


http://www.mathworks.com/products/demos/image/contrast/ipexcontrast.html.
Upute za pisanje MATLAB funkcija moete pronai na sljedeem link-u:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/function.html.

VJEBA 3
Operacije temeljene na histogramu 1
Histogram je grafika reprezentacija distribucije podataka. Histogram slike
prikazuje broj piksela na slici po razini sive boje.
MATLAB-ova funkcija koja rauna histogram slike naziva se imhist() i njezin je
rezultat prikazan na slici 3.1.

Slika 3.1. Histogram slike lena-grayscale, prikazan pomou MATLAB-ove funkcije


imhist()
Kumulativni histogram
Kumulativni histogram se koristi za prikaz broja piksela iji je intenzitet manji ili
jednak trenutnom intenzitetu. Maksimalna vrijednost (tj. visina najvieg stupca) u
kumulativnom histogramu slike uvijek je jednaka ukupnom broju piksela na slici.
MATLAB-ova funkcija za raunanje kumulativnog histograma zove se cumsum().
Primjer raunanja kumulativnog histograma dan je u tablici 3.1. Grafiki prikaz
kumulativnog histograma za primjer iz tablice 3.1 dan je na slici 3.1.
Tablica 3.1. Primjer raunanja kumulativnog histograma
Postotak bodova na
ispitu

Broj studenata koji je


ostvario odreeni
postotak bodova na
ispitu

Kumulativni histogram

0-24%

3
8

25-49%

3+2=5

50-74%

5+3=8

75-100%

8+2=10

Slika 3.1. Grafiki prikaz kumulativnog histograma


Rastezanje histograma
Rastezanje histograma (engl. histogram stretching) se koristi za poveanje
kontrasta na IOI (engl. Intensity of Interest) podruja slike na raspon svih moguih
vrijednosti piksela dostupnih za taj tip slike. Minimalna razina sive boje na slici se
mapira u 0, a maksimalna u 255. Ovaj se postupak jo zove i normalizacija
histograma. MATLAB-ova funkcija za rastezanje histograma zove se imadjust().
Algoritam za rastezanje histograma:
1. Uitana slika se pomou funkcije im2double() prebacuje u tip podataka
double.
2. Odreuje se minimalna i maksimalna vrijednost piksela uitane slike.
Na primjer, za 8 bitne (tip uint8) slike u razinama sive boje minimum bi bio
0, a maksimum 255. Za double slike minimum bi bio 0, a maksimum 1.
Neka se dobivene vrijednosti zovu a i b.
9

3. Odreuje se minimalna i maksimalna vrijednost piksela koji se stvarno


pojavljuju na slici. Neka se dobivene vrijednosti zovu c i d.
(Napomena: robusniji pristup bi bio prvo izraunati histogram slike, te c i d
odrediti na nain da 5% piksela ima intenzitet manji od c, a 5% vei od d
[1].)
4. Nove vrijednosti piksela se raunaju po sljedeoj formuli:
ba
pixel izlazni ( x , y)=( pixel ulazni ( x , y)c)
+a
d c

( )

5. Histogram nove slike se prikazuje pomou funkcije imhist().


Primjer ujednaavanja histograma prikazan je na slici 3.2.

Slika 3.2. a) Ulazna slika preuzeta je iz Berkeley Image Dataset-a [2] i


konvertirana u sliku u razinama sive boje; b) ulazna slika nakon primjene funkcije
za rastezanje histograma
Ujednaavanje histograma
Ujednaavanje histograma (engl. histogram equalization) je tehnika poveanja
kontrasta na slici s ciljem dobivanja ujednaenog histograma (histograma u kojem
su svi stupci otprilike iste visine, tj. broj piksela je otprilike jednak za sve razine
sive boje). MATLAB-ova funkcija za ujednaavanje histograma zove se histeq().
Algoritam za ujednaavanje histograma:
1. Uitava se slika.
2. Rauna se histogram uitane slike.
3. Rauna se kumulativni histogram uitane slike i sprema se u vektor v.
MATLAB-ova funkcija za raunanje kumulativnog histograma je
cumsum(histogram_slike).
4. Stvara se prazna matrica (tipa uint8) koja ima jednake dimenzije kao i
10

uitana slika.
4.1. Dimenzije uitane slike moete dobiti na slijedei nain:
[broj_redaka, broj_stupaca] = size (uitana_slika);
4.2. Praznu matricu tipa uint8 moete dobiti na slijedei nain:
nova_slika = zeros (broj_redaka, broj_stupaca);
nova_slika = im2uint8(nova_slika);
5. Za svaki piksel uitane slike rauna se nova vrijednost po sljedeoj formuli:
255
pikselizlazni (x , y )=v (piksel ulazni (x , y ))
ukupan broj piksela
6. Histogram nove slike se prikazuje pomou funkcije imhist().
Primjer ujednaavanja histograma prikazan je na slici 3.3.

Slika 3.3. a) Ulazna slika preuzeta je iz Berkeley Image Dataset-a [2] i


konvertirana u sliku u razinama sive boje; b) ulazna slika nakon primjene funkcije
za ujednaavanje histograma
U okviru vjebe potrebno je izvriti sljedee korake:
1. U MATLAB-u uitajte sliku lena-grayscale.jpg i prikaite je.
2. Prikaite histogram uitane slike. Koristite funkciju imhist().
Napomena: funkcija imhist() ne radi sa slikama u boji, ve samo sa binarnim
slikama i slikama u razinama sive boje.
Objasnite nain na koji funkcionira funkcija imhist().
3. Na sliku lena-grayscale.jpg primijenite operaciju rastezanja histograma i
ujednaavanja histograma. Koristite MATLAB-ove funkcije za rastezanje
(imadjust()) i ujednaavanje (histeq()) histograma.
Prikaite i usporedite rezultate funkcija imadjust() i histeq(). Slike pohranite
u zasebne datoteke (lena-str.jpg i lena-equ.jpg).
11

4. Prikaite kumulativni histogram uitane slike. Koristite funkciju cumsum().


5. Napiite MATLAB funkciju za raunanje kumulativnog histograma slike.
Napomena: moete koristiti funkciju imhist() za raunanje histograma slike.
Za provjeru rezultata vlastite funkcije moete koristiti MATLAB-ovu funkciju
cumsum().
Opiite ukratko korake vjebe. Dokument sa opisom vjebe uploadajte na eLearning portal. U dokument ukljuite izlazne slike iz svih koraka laboratorijske
vjebe.
Upute za pisanje MATLAB funkcija moete pronai na sljedeem link-u:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/function.html.
Svi koraci potrebni za izvoenje vjebe opisani su u materijalima sa predavanja
(prostori_boja.pdf, osnovne_operacije.pdf). Osnove koritenja Image Processing
Toolbox modula dane su u prvoj vjebi.

12

VJEBA 4
Operacije temeljene na histogramu 2
U okviru vjebe potrebno je izvriti sljedee korake:
1. U MATLAB-u uitajte sliku lena-grayscale.jpg i prikaite je.
2. Na sliku lena-grayscale.jpg primijenite operaciju rastezanja histograma i
ujednaavanja histograma. Ove operacije realizirajte bez koritenja Image
Processing Toolbox-a (napiite svoje funkcije)!
Napomena: moete koristiti funkciju imhist() za raunanje histograma slike.
Za provjeru rezultata vlastitih funkcija moete koristiti MATLAB-ove
ugraene funkcije za rastezanje (imadjust()) i ujednaavanje (histeq())
histograma.
Prikaite i usporedite rezultate napisanih funkcija. Slike pohranite u zasebne
datoteke (lena-str2.jpg i lena-equ2.jpg).
Dodatak: kako bi se lake snalazili izmeu viestrukih prozora sa slikama koje
otvorite u Matlab-u dok budete usporeivali rezultate vaih i Matlab-ovih funkcija,
moete svakoj slici dodijeliti naslov koji e se ispisati iznad nje (slika 4.1). Na
primjer:
figure; imshow(A);
title('Ovo je originalna slika')
figure; imshow(B);
title('Slika nakon ujednacavanja histograma')
Nadalje, vie slika moete prikazati unutar istog prozora (engl. figure) pomou
funkcije subplot(r,c,i) (slika 4.2), gdje r oznaava broj redaka na koje se dijeli
prozor, c broj stupaca, a i indeks koji oznaava mjesto na koje se uitava
odreena slika (detaljnije informacije o ovoj funkciji moete dobiti naredbom help
subplot u Matlab-u). Na primjer:
figure;
subplot(1,2,1), imshow(A), title('Ovo je originalna slika');
subplot(1,2,2), imshow(B), title('Slika nakon ujednacavanja histograma');

13

Slika 4.1. Originalna slika i slika nakon ujednaavanja histograma. Napomena:


slike su dobivene programom GNU Octave, pa se mogu malo razlikovati od onih
dobivenih Matlab-om

Slika 4.2. Originalna slika i slika nakon ujednaavanja histograma, prikazane


unutar istog prozora. Napomena: slike su dobivene programom GNU Octave, pa
se mogu malo razlikovati od onih dobivenih Matlab-om
14

Opiite ukratko korake vjebe. Dokument sa opisom vjebe uploadajte na eLearning portal. U dokument ukljuite izlazne slike iz svih koraka laboratorijske
vjebe.
Pseudokod algoritama za rastezanje i ujednaavanje histograma dan je u
prethodnoj vjebi (Vjeba 3: Operacije temeljene na histogramu 1).
Upute za pisanje MATLAB funkcija moete pronai na sljedeem link-u:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/function.html.
Svi koraci potrebni za izvoenje vjebe opisani su u materijalima sa predavanja
(prostori_boja.pdf, osnovne_operacije.pdf) i u prethodnoj laboratorijskoj vjebi.
Osnove koritenja Image Processing Toolbox modula dane su u prvoj vjebi.

15

VJEBA 5
Konvolucija i korelacija
Konvolucija (engl. convolution) je jedna od najvanijih operacija u digitalnoj
obradi i analizi slike. Njezina osnovna ideja je primjena filtera (ili kernela) na
piksele originalne slike s ciljem mijenjanja izgleda te slike.
Konvolucija je usko vezana za korelaciju (engl. correlation). Konvolucijom se na
sliku primjenjuje filter zarotiran za 180 oko svog sredinjeg elementa, a kod
korelacije takva rotacija ne postoji.
Filter se na sliku primijenjuje kao prozor konanih dimenzija koji putuje preko
njezinih piksela i mijenja njihovu razinu sive boje. Filteri predstavljaju teine
piksela preko kojih se prozor trenutno nalazi, pa se promjena boje trenutnog
piksela rauna na nain prikazan na slici 5.1.

O34=I 23F11+ I 24F 12+ I 25F 13+ I 33F 21 + I 34F 22 + I 35F23+ I 43F 31+ I 44F32+ I 45F 33

Slika 5.1. Razina sive boje piksela mijenja se pod utjecajem filtera. Na slici je
prikazan primjer promjene razine sive boje piksela I34. Nova vrijednost tog piksela
oznaena je sa O34. Napomena: u ovom se primjeru sredinji element filtera
postavlja preko trenutnog piksela slike, ali to nije openito pravilo.

Konstrukcija filtera
Zadatak: potrebno je konstruirati filter koji bi zadanu sliku translatirao za 2 piksela
desno i 1 piksel gore.
Rjeenje: U MATLAB-u se filteri na sliku primjenjuju koritenjem funkcije
imfilter(slika, filter). Filter je zapisan u obliku matrice koju imfilter() pomie po
pikselima slike i pri tome rauna njihove nove razine sive boje. Budui da imfilter()
na trenutni piksel slike postavlja sredinji element filtera, za rjeavanje
16

postavljenog zadatka potrebno je konstruirati filter dimenzija 3x5 na nain koji je


prikazan na slici 5.2.

Slika 5.2. a) Ulazna slika; b) pozicija filtera na ulaznoj slici ako se za trenutni
piksel slike uzme piksel I34
Na slici 5.2 filter je konstruiran na nain da svi susjedni pikseli trenutnog piksela
imaju teinu nula, osim piksela koji se nalazi 2 piksela lijevo i 1 piksel dolje. U
primjeru na slici taj piksel je oznaen sa I42. Piksel I34 e onda poprimiti vrijednost
piksela I42, odnosno piksel I42 e biti translatiran za dva piksela desno i 1 piksel
gore.
Napomena: MATLAB-ova funkcija imfilter() automatski rauna korelaciju, a ne
konvoluciju. To nije vano ako je filter simetrian, meutim u sluaju da nije
potrebno je posebno naglasiti koja se od te dvije opcije eli koristiti.

Niskopropusno filtriranje
Niskopropusnim filtriranjem (engl. low-pass filtering) istiu se niske frekvencije
na slici, tj. umanjuju se nagle promjene razine sive boje piksela na slici (kao rubovi
objekata i teksture). Razina sive boje piksela se pribliava vrijednostima susjednih
piksela. Filteri koji spadaju u ovu skupinu koriste se za izglaivanje slike (engl.
image smoothing) i uklanjanje uma, te slike na koje se primijene mogu izgledati
zamueno.
Niskopropusni filter usrednjavanja dimenzija 3x3 dobije se koritenjem
sljedee formule:

17

( )

1 1 1
1
filter = 1 1 1
9
1 1 1

Nazivnik gornjeg razlomka je dobiven zbrajanjem elemenata matrice.


Gaussov niskopropusni filter dimenzija 3x3 dobije se koritenjem sljedee
formule:
filter =

( )

1 1 2 1
2 4 2
16
1 2 1

Visokopropusno filtriranje
Visokopropusnim filtriranjem (engl. high-pass filtering) istiu se visoke
frekvencije na slici, tj. poveavaju se nagle promjene razine sive boje piksela na
slici. Filteri koji spadaju u ovu skupinu koriste se za izotravanje slike (engl. image
sharpening).
Laplaceov visokopropusni filter dimenzija 3x3 dobije se koritenjem sljedee
formule:

0 1 0
filter = 1 4 1
0 1 0

Napomena: prethodno definirani filteri za niskopropusno i visokopropusno


filtriranje su simetrini pa je svejedno da li se za njih rauna konvolucija ili
korelacija.
Gradijenti
Gradijent je filter koji mjeri iznos promjene razine sivih vrijednosti piksela slike u
ortogonalnim smjerovima. U digitalnoj obradi i analizi slike koristi se za detekciju
rubova (engl. edge detection) na slici.
Horizontalni Sobel operator dobije se koritenjem sljedee formule:

1 0 1
filter = 2 0 2
1 0 1

Vertikalni Sobel operator dobije se koritenjem sljedee formule:

18

1 2 1
filter = 0
0
0
1
2
1

Magnituda gradijenta dobije se koritenjem sljedee formule:

G= G x 2+ G y 2
gdje je Gx horizontalni Sobel operator primijenjen na originalnu sliku, a Gy
vertikalni Sobel operator primijenjen na originalnu sliku.
U okviru vjebe potrebno je izvriti sljedee korake:
1. U MATLAB-u uitajte sliku lena-grayscale.jpg.
2. Na sliku lena-grayscale.jpg primijenite operaciju konvolucije koritenjem
funkcije imfilter(). Konstruirajte i primijenite sljedee filtre:
niskopropusni filter usrednjavanja dimenzija 3x3
niskopropusni filter usrednjavanja dimenzija 7x7
Gaussov niskopropusni filter dimenzija 3x3
Laplaceov visokopropusni filter dimenzija 3x3
Prikaite dobivene slike i pohranite ih u zasebne datoteke.
3. Na sliku primjenite operaciju detekcije rubova gradijentom. Pri tome
koristite Sobel operator. Prikaite rubove detektirane u horizontalnom i
vertikalnom smjeru, te magnitudu gradijenta. Sve tri slike pohranite u
zasebne datoteke.
Napomena 1 (raunanje magnitude gradijenta): slike na kojima su
primijenjeni horizontalni i vertikalni Sobel operatori prebacite u tip double
pomou funkcije im2double().
Napomena 2 (raunanje magnitude gradijenta): kod kvadriranja matrica
MATLAB e generirati greku ako se napie matrica^2. Ispravna sintaksa je
matrica.^2.
4. Konstruirajte filter koji izvornu sliku translatira za 30 piksela desno i 10
piksela gore. Primijenite filter na ulaznu sliku na razliite naine:
kao vrijednosti potrebne za raunanje konvolucije izvan podruja slike
koristite 0 (primjer se nalazi na slici 5.1 pod a))
replicirajte granine piksele slike (primjer se nalazi na slici 5.1 pod b))
koristite zrcalnu sliku na rubovima (primjer se nalazi na slici 5.1 pod c))
primijenite cirkularnu konvoluciju (primjer se nalazi na slici 5.1 pod d))
Sve izlazne slike pohranite u zasebne datoteke.

5. Konstruirajte filter dimenzija 9x9 koji primijenjen na sliku simulira efekt


horizontalnog pomicanja kamere (primjer se nalazi na slici 5.2). Pri tome
moete koristiti MATLAB-ovu funkciju fspecial(). Primijenite filter na ulaznu
sliku i prikaite rezultat. Sliku pohranite u zasebnu datoteku.
19

Slika 5.1. Primjeri razliitih naina translacije slike za 30 piksela desno i 10 piksela
gore

Slika 5.2. Primjer filtera koji simulira horizontalno pomicanje kamere


20

Opiite ukratko korake vjebe. Dokument sa opisom vjebe uploadajte na eLearning portal. U dokument ukljuite izlazne slike iz svih koraka laboratorijske
vjebe.
Dodatne informacije korisne za izvravanje ove vjebe mogu se pronai na:
http://www.mathworks.com/help/toolbox/images/ref/imfilter.html,
http://www.mathworks.com/help/toolbox/images/f16-14527.html.
Svi koraci potrebni za izvoenje vjebe opisani su u matrijalima za predavanja
(prostori_boja.pdf, osnovne_operacije.pdf, filtriranje.pdf). Osnove koritenja Image
Processing Toolbox modula dane su u prvoj vjebi.

21

VJEBA 6
Segmentacija slike
Segmentacija slike se moe definirati kao proces u kojem se slika dijeli na
homogene segmente (cjeline ili regije). Ovi se homogeni segmenti ponekad
nazivaju i superpikseli.
Algoritam k-sredina
Algoritam k-sredina (engl. k-means algorithm) je jedan od najjednostavnijih i
najee koritenih algoritama za segmentaciju podataka. Njime se pikseli slike
dijele na k regija, a k se unaprijed zadaje.
Algoritam k-sredina je prvi put predloio Lloyd u [3], pa se u raunarstvu jo
naziva i Lloydov algoritam. Rije je o iterativnom algoritmu koji skup od n
ulaznih podataka dijeli na k regija u konanom broju iteracija. Algoritam sluajnim
odabirom odabire k poetnih sredita regija, usporeuje koordinate svakog
ulaznog podatka sa tim sreditima, te podatak dodjeljuje regiji ijem je sreditu
najblii. Podaci u i-toj regiji su sliniji jedni drugima nego podacima u bilo kojoj
drugoj regiji. Slinost izmeu razliitih piksela na slici je najee definirana kao
Euklidska udaljenost izmeu njihovih koordinata.
Ako se algoritmu k-sredina kao ulaz zada slika u razinama sive boje, onda pikseli
te slike imaju samo jednu koordinatu razinu sive boje. Udaljenost izmeu 1dimenzionalnih toaka X = x i Y = y je definirana na slijedei nain:
2
d X , Y = x y = x y .
Ako se algoritmu k-sredina kao ulaz zada slika u boji, onda pikseli te slike imaju tri
koordinate po jednu razinu sive boje za svaki kanal od kojeg se sastoje.
Udaljenost izmeu 3-dimenzionalnih toaka X = x 1 , x 2 , x3 i Y = y1 , y 2 , y 3 je
2
2
2
definirana na slijedei nain: d X , Y = x 1 y 1 x 2 y 2 x 3 y 3 .

Slinost izmeu toaka se poveava sa smanjivanjem udaljenosti izmeu njih.


Pseudokod algoritma k-sredina:
1. korisnik zadaje broj regija za segmentaciju k;
2. algoritam sluajnim odabirom odabire k poetnih sredita regija koji se
nalaze na maksimalnoj meusobnoj udaljenosti;
3. rauna se udaljenost svakog podatka (npr. toke ili piksela) od svih moguih
sredita regija i podatak se dodjeljuje regiji ijem je sreditu najblii;
4. sredita regija se preraunavaju na nain da se smjetaju u sredita
22

podataka koji su im u prethodnoj iteraciji dodijeljeni;


5. algoritam se ponavlja sve dok ne konvergira ili dok se ne postigne traena
tonost.
Shematski prikaz algoritma k-sredina dan je na slici 6.1.

Slika 6.1. Grafiki prikaz rada algoritma k-sredina. U danom primjeru koritene su
tri grupe za segmentaciju. Manje toke predstavljaju ulazne podatke, a vee toke
predstavljaju sredita grupa na koje se ti podaci dijele.
Poetne koordinate sredita regija se odabiru sluajnim odabirom, a u svakoj
sljedeoj iteraciji se raunaju kao aritmetika sredina koordinata podataka koji su
im u prethodnoj iteraciji dodijeljeni. Na primjer, ako se regiji A u iteraciji i dodijele
3-dimenzionalni podaci X = x 1 , x 2 , x3 i Y = y1 , y 2 , y 3 , onda e koordinate sredita
grupe A u iteraciji i1 biti:
C A= c 1 , c 2 , c3
c 1=

x 1 y 1
2

c 2=

x 2 y 2
2

c 3=

x 3 y 3
2

Primjer segmentacije slike pomou algoritma k-sredina prikazan je na slici 6.2.

23

Slika 6.2. Prvi stupac prikazuje ulazne slike, drugi stupac njihove histograme, a
trei stupac segmentirane slike. Ulazne slike su preuzete iz Berkeley Image
Dataset-a [2].
U okviru vjebe potrebno je izvriti sljedee korake:
1. Napiite funkciju za segmentaciju slike u boji. Segmentaciju realizirajte
koritenjem algoritma k-sredina koji je u MATLAB-u implementiran pod
nazivom kmeans().
Ulazne slike, dobivene segmentacije i funkciju za segmentaciju pohranite u zip
arhivu i uploadajte na e-Learning portal.
Prilikom testiranja algoritma moete koristiti slike iz Berkeley Image Dataset-a [2]
koje su besplatne za edukacijsku i nekomercijalnu upotrebu. Berkeley Image
Dataset se nalazi na sljedeem linku:
http://www.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/BSDS300/html/dat
aset/images.html.
Upute za pisanje MATLAB funkcija moete pronai na sljedeem link-u:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/function.html.

24

VJEBA 7
Medijan filter
Medijan filter (engl. median filter) je nelinearni filter koji se u digitalnoj obradi i
analizi slike koristi za uklanjanje uma. Po funkciji je slian niskopropusnom filteru
usrednjavanja (engl. mean filter) jer i jedan i drugi vre izglaivanje slike (engl.
image smoothing), ali je robusniji od njega i najee daje bolje rezultate.
Primjeri medijan filtera razliitih veliina nalaze se na slici 7.1.

Slika 7.1. a) Ulazna slika je preuzeta iz Berkeley Image Dataset-a [2] i na nju je
primijenjen 'salt & pepper' filter; b) 3x3 medijan filter; c) 5x5 medijan filter; d) 7x7
medijan filter.
Medijan filter za svaki piksel slike promatra piksele u njegovoj okolini, te razinu
sive boje trenutnog piksela mijenja sa medijanom razine sivih vrijednosti tog
25

piksela i piksela u njegovoj okolini. Ovaj je filter nelinearan zato to vrijedi


sljedea nejednakost:
medijan ( A+ B)medijan ( A )+ medijan(B)
gdje su A i B dvodimenzionalne matrice jednakih dimenzija.
Medijan (statistika)
Medijan se koristi u statistici za odreivanje sredine neke distribucije podataka. Za
sortirani niz brojeva (1, 5, 8, 10, 13) medijan bi iznosio 8, jer je polovica brojeva u
nizu manja od 8, a polovica vea od 8. Da se je u nizu nalazio paran broj brojeva,
onda bi se za medijan uzela aritmetika sredina dvaju brojeva u sredini niza.

U okviru vjebe potrebno je izvriti sljedee korake:


1. Napiite MATLAB funkciju za nelinearni medijan filter.
Ulaznu sliku, rezultat obrade (izlaznu sliku) i MATLAB funkciju pohranite u zip
arhivu i uploadajte na e-Learning portal.
Upute za pisanje MATLAB funkcija moete pronai na sljedeem link-u:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/function.html.

26

VJEBA 8
Uvod u OpenCV
OpenCV (engl. Open Source Computer Vision) je open-source biblioteka funkcija
koje se koriste u digitalnoj obradi i analizi slike. Razvijena je od strane INTEL-a i
prilagoena aplikacijama koje se trebaju izvravati u stvarnome vremenu.
Trenutno se moe koristiti sa C, C++, Java i Python programskim jezicima [4].
OpenCV i njegova dokumentacija se mogu pronai na: http://opencv.org/.
Vana napomena: OpenCV slike sprema u BGR (a ne RGB) formatu, pa prilikom
programiranja pripazite na redoslijed kanala!

Slika 8.1. Prikaz RGB matrica u MATLAB-u, i BGR matrica u OpenCV-u


Uitavanje i prikazivanje slike
Programski kod za uitavanje i prikazivanje slike u MATLAB-u:
A = imread('lena.jpg');
imshow(A)
Programski kod za uitavanje i prikazivanje slike u OpenCV-u:
#include <iostream>
#include <opencv2/opencv.hpp>
27

using namespace std;


using namespace cv;
int main()
{
Mat img = imread(lena.jpg);
namedWindow(Slika);
imshow(Slika, img);
waitKey();
return 0;
}
Spremanje slike
Programski kod za spremanje slike u MATLAB-u:
A = imread('lena.jpg');
imwrite(A, 'lena-2.jpg');
Programski kod za spremanje slike u OpenCV-u:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread(lena.jpg);
imwrite(lena-2.jpg, img);
return 0;
}
Dohvaanje dimenzija slike
Programski kod za dohvaanje dimenzija slike u MATLAB-u:
A = imread('lena.jpg');
[r s k] = size(A);
Programski kod za dohvaanje dimenzija slike u OpenCV-u:

28

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread(lena.jpg);
int rows = img.rows;
int columns = img.cols;
int channels = img.channels();
return 0;
}
Pristup pikselima slike
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread(lena-color.jpg);
int rows = img.rows;
int columns = img.cols;
int channels = img.channels();
int i, j;
for (i = 0; i < rows; i++)
{
uchar* ptr_img = img.ptr<uchar>(i);
for (j = 0; j < columns; j++)
{
int b = (int)ptr_img[j*channels+0];
int g = (int)ptr_img[j*channels+1];
int r = (int)ptr_img[j*channels+2];
}
}
return 0;
}
29

Dodatne informacije o OpenCV biblioteci mogu se pronai u [5, 6, 7].

30

SEMINARSKI RAD
Prijedlozi tema za izradu seminarskog rada:
1.

Automatsko odreivanje broja regija za segmentaciju kod algoritma ksredina

2.

Segmentacija slike (bez upotrebe algoritma k-sredina)

3.

Detekcija oblaka, dima i/ili magle na slici

4.

Izdvajanje (ili detekcija) lica na slici

5.

Izrada programa za poboljavanje fotografija (npr. npr. pojaavanje


kontrasta na slici, izotravanje/zamuivanje slike )

6.

Izrada programa koji kao ulaz prima 3 fotografije razliite ekspozicije i


kombinira ih u HDR (engl. High Dynamic Range) fotografiju

7.

Detekcija toaka na slici koje su invarijantne na rotaciju slike, mijenjanje


njezinih dimenzija te djelomino invarijantne na osvjetljenje

8.

Detekcija kutova na slici (engl. corner detection)

9.

Izrada programa koji na sliku primjenjuje razliite linearne i/ili nelinearne


filtere

10.

Pretvaranje slike u razinama sive boje u sliku u boji (engl. pseudo-coloring)

11.

Detekcija pokreta na sekvenci slika (ili videu)

12.

Detekcija rubova na slici

13.

Detekcija broja objekata na binarnoj slici (engl. blob extraction, blob


discovery)

14.

Kreiranje panoramske fotografije od dvije ili vie fotografija

31

LITERATURA
[1]

"Contrast Stretching", dostupno na:


http://homepages.inf.ed.ac.uk/rbf/HIPR2/stretch.htm.

[2]

Martin, D.; Fowlkes, C.; Tal, D.; Malik, J.: "A Database of Human Segmented
Natural Images and its Application to Evaluating Segmentation Algorithms
and Measuring Ecological Statistics", Proc. 8th Int'l Conf. Computer Vision
(2), pp. 416-423, July 2001.

[3]

Lloyd, S. P.: "Least Squares Quantization in PCM", IEEE Transactions on


Information Theory (28), pp. 129-137, 1982.

[4]

"OpenCV. Open Source Computer Vision", dostupno na: http://opencv.org/.

[5]

Bradski, G.; Kaehler, A.: "Learning OpenCV: Computer Vision with the
OpenCV Library", O'Reilly Media, October 2008.

[6]

Laganire, R.: "OpenCV 2 Computer Vision Programming Cookbook", Packt


Publishing Ltd., May 2011.

[7]

Baggio, D. L. et al.: "Mastering OpenCV with Practical Computer Vision


Projects", Packt Publishing, 2012.

32

You might also like