You are on page 1of 57

Univerzitet u Tuzli

Fakultet elektrotehnike
Modul: Automatika i robotika

Seminarski rad
Predmet: Robotika i mašinska vizija
Nastavnik: red.prof.dr.sc Naser Prljača

Muminović Jasmina
Br. Indeksa: 15009

Tuzla, juni, 2019


Sadržaj

Zadatak 1. ...................................................................................................................................................... 5
Zadatak 2. .................................................................................................................................................... 13
Zadatak 3. .................................................................................................................................................... 18
Zadatak 4. .................................................................................................................................................... 22
Zadatak 5. .................................................................................................................................................... 29
Zadatak 6. .................................................................................................................................................... 37
Literatura ..................................................................................................................................................... 57

2
Sadržaj slika:
Slika 1. Orginalna slika .............................................................................................................. 6
Slika 2. Siva slika ....................................................................................................................... 6
Slika 3. FT slike prirode bez šuma ............................................................................................. 7
Slika 4. Slika prirode sa Gausovim šumom ............................................................................... 7
Slika 5. Siva slika prirode sa Gausovim šumom ........................................................................ 7
Slika 6. FT slike prirode sa Gausovim šumom .......................................................................... 8
Slika 7. Slika prirode sa salt&pepper šumom ............................................................................ 8
Slika 8. Siva slika prirode sa salt&pepper šumom ..................................................................... 8
Slika 9. FT slike prirode sa salz&pepper šumom ....................................................................... 9
Slika 10. FT slike bez šuma ....................................................................................................... 9
Slika 11. FT slike sa Gausovim šumom ................................................................................... 10
Slika 12. FT slike sa salt&pepper šumom ................................................................................ 10
Slika 13. DCT slike bez šuma .................................................................................................. 12
Slika 14. DCT slike sa šumom ................................................................................................. 12
Slika 15.Mean filter na slici bez šuma te sa Gausovim i salt&pepper šumom ........................ 14
Slika 16. Mean filter na slici bez šuma te sa Gausovim i salt&pepper šumom ....................... 14
Slika 17. Median filter .............................................................................................................. 15
Slika 18. Median filter .............................................................................................................. 16
Slika 19. Gausov filter .............................................................................................................. 17
Slika 20. Gausov filter .............................................................................................................. 17
Slika 21. Niskopropusni filter .................................................................................................. 19
Slika 22. Niskopropusni filter .................................................................................................. 19
Slika 23. Visokopropusni filter ................................................................................................ 21
Slika 24. Visokopropusni filter ................................................................................................ 21
Slika 25. Detekcija prvog reda ivica na slici prirode bez šuma ............................................... 23
Slika 26. Detekcija prvog reda ivica na zašumljenoj slici prirode ........................................... 24
Slika 27. Detekcija prvog reda ivica na slici bez šuma ............................................................ 24
Slika 28. Detekcija prvog reda ivica na slici sa šumom ........................................................... 25
Slika 29. Laplasijan detektor -slika prirode ............................................................................. 26
Slika 30. Laplasijan detektor-man made slika ......................................................................... 27
Slika 31. Poređenje (Sobel &Canny) ....................................................................................... 28
Slika 32. . Poređenje (Sobel &Canny) ..................................................................................... 29
Slika 33. Manuelno i automatski nalaženje praga .................................................................... 31
Slika 34. Histogram .................................................................................................................. 31
Slika 35. Bojenje komponenti .................................................................................................. 34
Slika 36. Bojanje komponenti .................................................................................................. 36
Slika 37. Orginalna slika .......................................................................................................... 40
Slika 38. Siva slika ................................................................................................................... 41
Slika 39. Negativ sive slike ...................................................................................................... 41
Slika 40. Histogram sive slike .................................................................................................. 42
Slika 41. Binarna slika ............................................................................................................. 42

3
Slika 42. Binarna slika nakon popunjavanja rupa .................................................................... 43
Slika 43. Binarna slika nakon diletacije ................................................................................... 43
Slika 44. Detektovane ivice flaše ............................................................................................. 44
Slika 45. Labeliranje objekta .................................................................................................... 44
Slika 46. Pikaz centra objekta .................................................................................................. 45
Slika 47. Detektovane flaše i prihvatne tačke .......................................................................... 45
Slika 48. Koordinate flaše 1 ..................................................................................................... 46
Slika 49. Koordinate flaše 2 ..................................................................................................... 46
Slika 50. Koordinate flaše 3 ..................................................................................................... 46
Slika 51. Koordinate flaše 4 ..................................................................................................... 47
Slika 52. Orginalna slika .......................................................................................................... 47
Slika 53. Histogram sive slike .................................................................................................. 48
Slika 54. Detektovane flaše i prihvatne tačke .......................................................................... 48
Slika 55. Visina flaša ................................................................................................................ 51
Slika 56. Visina flaša-primjer 2................................................................................................ 52
Slika 57. Posmatrana slika ....................................................................................................... 55
Slika 58. Ispis boje boce i kutije kojoj pripada ....................................................................... 56

4
Zadatak 1.
Linearne diskretne transformacije sive digitalne slike (2DFT, 2DCT) te njihove evaluacije na
digitalnim slikama različitih scena (natural, man made). Koristiti orginalne slike i slike
kontaminirane šumom. Koristiti MATLAB funkcije (fft2(), dct2(), imnoise()).

Furijeova transformacija predstavlja kamen temeljac linearnog filtriranja. Ona obezbjeđuje


značajnu fleksibilnost u dizajnu i razvijanju rješenja za filtriranje u oblastima kao što su
poboljšanje slike, restauracija, uklanjanje šuma i druge značajne upotrebe.
Digitalne slike su po definiciji diskretne. Neka imamo digitalnu sliku, tj. matricu dimenzija
𝑚 × 𝑛, označenu sa 𝑓(𝑥,𝑦), gdje su 𝑥 = 0,1,2,…,𝑚 − 1 i 𝑦 = 0,1,2,…,𝑛 − 1. Diskretna Furijeova
transformacija (DFT) dvodimenzionalnog signala 𝑓(𝑥,𝑦), označena sa 𝐹(𝑢,𝑣) je data izrazom:

𝑚−1 𝑚−1 𝑢,𝑥 𝑣,𝑦


𝐹(𝑢, 𝑣) = ∑ ∑ 𝑓(𝑥, 𝑦)𝑒 −𝑗2𝜋( 𝑚 + 𝑛 )
𝑥=0 𝑦=0

gdje su 𝑢 = 0,1,2,…,𝑚 − 1 i 𝑣 = 0,1,2,…,𝑛 − 1. Primjećuje se da je i transformacija dimenzija


𝑚 × 𝑛.
Inverzna Furijeova transformacija je data formulom:

1 𝑚−1 𝑚−1 𝑢,𝑥 𝑣,𝑦


𝑓(𝑥, 𝑦) = ∑ ∑ 𝐹(𝑢, 𝑣)𝑒 −𝑗2𝜋( 𝑚 + 𝑛 )
𝑚𝑛 𝑢=0 𝑣=0

Za izračun 2D Furierove transformacije i njezine inverzije u praksi se koristi brza Fourierova


transformacija (engl. Fast Fourier Transformation, FFT). U MATLAB-u se vrši pomoću
funkcije fft2, čija je sintaksa:
𝐹 = 𝑓𝑓𝑡2(𝑓)

Ova funkcija vraća Furierovu transformaciju dimenzije 𝑚 × 𝑛 (matricu), čije je središte u


gornjem lijevom uglu, u kojem je smješten i koordinatni početak slike. Za centriranje
transformacije koristi se funkcija fftshift:

𝐹𝑐 = 𝑓𝑓𝑡𝑠ℎ𝑖𝑓𝑡(𝐹)

gdje je F transformacija izračunata sa fft2 a Fc je centrirana transformacija. Za uobičajen prikaz


transformacije vrši se njeno skaliranje sa brojem elemenata ulazne matrice.
Za dodavanje šuma na slike upotrebljava se funkcija imnoise, u čijoj sintaksi se bira vrsta šuma
koji se primjenjuje:

clc
clear
close all
im=imread('priroda.jpg'); %ucitavanje slike
%im=imread('monalisa.jpg');

5
figure
imshow(im); %prikaz orginalne slike
gray_im=rgb2gray(im); %konvertovanje slike u grayscale
figure
imshow(gray_im); %prikaz sive slike
im_ft=fft2(gray_im); %fft sive slike
im_ft=im_ft/numel(im_ft); %skaliranje fft s brojem elemenata ulazne
matrice
im_ft=fftshift(im_ft); %centriranje
figure
imshow(im_ft); %prikaz fft
%slika kontamirana sumom
im_noise=imnoise(im,'gaussian'); %dodavanje Gausovog suma
%im_noise=imnoise(im,'salt & pepper'); %dodavanje salt&pepper suma
figure
imshow(im_noise); %prikaz slike kontamirane sumom
gray_im_noise=rgb2gray(im_noise); %konvertovanje u sivu sliku
figure
imshow(gray_im_noise); %prikaz sive slike
im_noise_ft=fft2(gray_im_noise); %fft
im_noise_ft=im_noise_ft/numel(im_noise_ft); %skaliranje
im_noise_ft=fftshift(im_noise_ft); %centriranje
figure
imshow(im_noise_ft);

Slika 1. Orginalna slika

Slika 2. Siva slika

6
Slika 3. FT slike prirode bez šuma

Slika 4. Slika prirode sa Gausovim šumom

Slika 5. Siva slika prirode sa Gausovim šumom

7
Slika 6. FT slike prirode sa Gausovim šumom

Slika 7. Slika prirode sa salt&pepper šumom

Slika 8. Siva slika prirode sa salt&pepper šumom

8
Slika 9. FT slike prirode sa salz&pepper šumom

Slika 10. FT slike bez šuma

9
Slika 11. FT slike sa Gausovim šumom

Slika 12. FT slike sa salt&pepper šumom

10
Poredeći prikaze transformacije slika sa i bez šuma, može se uočiti uticaj šuma na sliku te se
sa same transformacije može saznati da li je šum prisutan. U odnosu na sliku ptice (prirode),
slika auta ima veće frekvencije.

Jedan od problema koji se javlja kod DFT jeste da daje kompleksan signal što utiče na povećane
zahtjeve za memorijom. Značajniji problem je što se može desiti da se filtriranjem zašumljene
slike izgube njezine značajke, te dolazi do oscilatornih efekata na filtriranoj slici. Ovo se mora
izbjegavati kod kompresije slika. To se izbjegava korištenjem direktne kosinusne
transformacije (DCT). Po njoj je slika zbir sinusoida različitih amplituda i frekvencija.

Primjer kompresije korištenjem DCT jesu JPEG slike. U MATLAB-u se proračun najčešće vrši
korištenjem funkcije dct2 a razvijeni su i drugi algoritmi. Kako je DCT realna transformacija
ne postoji fazni dio spektra, već samo amplitudni dio. Za lakše razumijevanje, rezultati su
prikazani na logaritamskoj skali.

clc
clear
close all
im=imread('priroda.jpg'); %ucitavanje slike
figure
subplot(2,2,1)
imshow(im); %prikaz originalne slike
gray_im=rgb2gray(im); %konvertovanje slike u grayscale
subplot(2,2,2)
imshow(gray_im); %prikaz sive slike
im_ft=dct2(gray_im); %dct sive slike
subplot(2,2,3)
imshow(im_ft);
subplot(2,2,4)
imshow(log(abs(im_ft)),[])
colormap(gca,jet(64))
im_noise = imnoise(im,'gaussian'); %dodavanje Gausovog suma
figure
subplot(2,2,1)
imshow(im_noise); %prikaz slike sa sumom
gray_im_noise=rgb2gray(im_noise); %konvertovanje u sivu sliku
subplot(2,2,2)
imshow(gray_im_noise); %prikaz sive slike
im_noise_ft=dct2(gray_im_noise); %dct
subplot(2,2,3)
imshow(im_noise_ft);
subplot(2,2,4)
imshow(log(abs(im_noise_ft)),[])
colormap(gca,jet(64))

11
Slika 13. DCT slike bez šuma

Slika 14. DCT slike sa šumom

12
Uočljivo je da se na slici sa šumom spektar signala proširuje i u visoke frekvencije dok je za
sliku bez šuma koncentrisan u koordinatnom početku.

Zadatak 2.
Linearno filtriranje sive digitalne slike u prostornom domenu te njihova evaluacija na
digitalnim slikama različitih scena. Koristiti originalne slike i slike kontamirane sa šumom.
Koristiti MATLAB funkcije (fspecial(), imnoise(), imfilter()).

Kod linearnog filtriranja u prostornom domenu operacije filtriranja se izvode direktno na


pikselima slike. Ovakvo filtriranje vrši se tako što se svaki piksel u okolini množi
odgovarajućim koeficijentom i sumiraju se rezultati kako bi se dobio odziv za svaku tačku (𝑥,𝑦).
Ako je okolina dimenzije 𝑚 × 𝑛, potrebno je 𝑚𝑛 koeficijenata. Oni su raspoređeni kao matrica
zvana filter, maska, kernel, itd., često uz dodatak pridjeva konvolucioni.
Najjednostavniji linearni filter jeste mean filter, koji daje jednake težine svim pikselima maske.
Za cjelu okolinu dimenzije 𝑚 × 𝑛 koristi se težina 1/(𝑚𝑛) čime se svaki piksel u izlaznoj slici
zamjenjuje srednjom vrijednošću piksela iz njegove okoline, te se time dobija efekat
zaglađivanja. Za bilo koju dimenziju okoline, težina unutar maske je 1. Mean filter se koristi za
uklanjanje šuma ali nije efikasan ukoliko su devijacije šuma velike.

clc
clear
close all
im=imread('priroda.jpg'); %ucitavanje slike
%im=imread('buba.jpg');
gray_im=rgb2gray(im); %konvertovanje slike u grayscale
figure
subplot(2,3,1),
imshow(gray_im); %prikaz slike
im_sp=imnoise(gray_im,'salt & pepper',0.03);%salt&pepper sum (3%)
subplot(2,3,2),
imshow(im_sp);
im_g=imnoise(gray_im,'gaussian',0.02); %Gausov sum (sa varijansom
0.02) s
subplot(2,3,3),
imshow(im_g);
k=ones(3,3)/9; %mean filter
im_mean=imfilter(gray_im,k); %primjena filtera na originalnu sliku
im_sp_mean=imfilter(im_sp,k); %primjena filtera na sliku sa SP sumom
im_g_mean=imfilter(im_g,k); %primjena filtera na sliku sa Gausovim
sumom
subplot(2,3,4),
imshow(im_mean);
subplot(2,3,5),
imshow(im_sp_mean);
subplot(2,3,6),
imshow(im_g_mean);

13
Slika 15.Mean filter na slici bez šuma te sa Gausovim i salt&pepper šumom

Slika 16. Mean filter na slici bez šuma te sa Gausovim i salt&pepper šumom

Primjetno je zaglađenje slike bez šuma kao i djelimično uklanjanje šuma sa zašumljenih slika
no primjetan je gubitak kvaliteta slike u odnosu na originalnu. Uklanjanje Gausovog šuma ovaj
filter radi daleko bolje nego uklanjanje salt&pepper šuma.

14
Pored ovog filtera, koristi se i median filter, koji ne izaziva zamagljivanje slike i time čuva
originalni kvalitet. Ovdje se svaki piksel mijenja medianom njegove 𝑚 × 𝑛 okoline. Ima dobro
uklanjanje šuma čak i ako su mu devijacije velike.

clc
clear
close all
im=imread('priroda.jpg'); %ucitavanje slike
im=imread('buba.jpg');
gray_im=rgb2gray(im); %konvertovanje slike u grayscale
figure
subplot(2,3,1),
imshow(gray_im); %prikaz slike
im_sp=imnoise(gray_im,'salt & pepper',0.03); %salt&pepper sum (3%)
subplot(2,3,2), imshow(im_sp);
im_g=imnoise(gray_im,'gaussian',0.02); %Gausov sum (sa varijansom
0.02)
subplot(2,3,3), imshow(im_g);
im_mean=medfilt2(gray_im,[3 3]); %primjena mediana na originalnu
sliku
im_sp_mean=medfilt2(im_sp,[3 3]); %primjena mediana na sliku sa SP
sumom
im_g_mean=medfilt2(im_g,[3 3]); %primjena mediana na sliku sa
Gausovim sumom
subplot(2,3,4), imshow(im_mean);
subplot(2,3,5), imshow(im_sp_mean);
subplot(2,3,6), imshow(im_g_mean);

Slika 17. Median filter

15
Slika 18. Median filter
Primjetno je da nema gubitka visokofrekventnih dijelova (ivica) kao i odlično uklanjanje
salt&pepper šuma.
Funkcija fspecial obezbjeđuje upotrebu dvodimenzionalnih filtera; ona generira masku 𝑤
koristeći sintaksu:
𝑤 = 𝑓𝑠𝑝𝑒𝑐𝑖𝑎𝑙(′𝑡𝑖𝑝′ , 𝑝𝑎𝑟𝑎𝑚𝑒𝑡𝑟𝑖),
dok su neki od tipova filtera koje koristi: average, gaussian, laplacian, prewitt, sobel, unsharp
itd.
Filter koji je često u praktičnoj upotrebi je Gausov filter. Kod Gausovog filtera maska je nastala
iz kontinualne dvodimenzionalne Gausove funkcije, a diskretna aproksimacija je specificirana
sa parametrima standardne devijacije Gausove funkcije i veličine kernela. Parametar devijacije
služi za kontrolisanje stepena zaglađenosti koju filter daje. Ovaj filter je niskopropusan i uklanja
visokofrekventni sadržaj slike a može se korisitit i u frekventnom domenu.

clc
clear
close all
%im=imread('priroda.jpg'); %ucitavanje slike
im=imread('buba.jpg');
gray_im=rgb2gray(im); %konvertovanje slike u grayscale
figure
subplot(2,3,1),
imshow(gray_im); %prikaz slike
im_sp=imnoise(gray_im,'salt & pepper',0.03); %salt&pepper sum (3%)
subplot(2,3,2), imshow(im_sp);
im_g=imnoise(gray_im,'gaussian',0.02); %Gausov sum (sa varijansom
0.02)
subplot(2,3,3), imshow(im_g);

16
k=fspecial('gaussian', [5 5], 2); %Gausov filter, kernel dim. 5x5
im_mean=imfilter(gray_im,k); %primjena filtera na originalnu sliku
im_sp_mean=imfilter(im_sp,k); %primjena filtera na sliku sa SP sumom
im_g_mean=imfilter(im_g,k); %primjena filtera na sliku sa Gausovim
sumom
subplot(2,3,4), imshow(im_mean);
subplot(2,3,5), imshow(im_sp_mean);
subplot(2,3,6), imshow(im_g_mean);

Slika 19. Gausov filter

Slika 20. Gausov filter

17
U poređenju sa prethodna dva obrađena linearna filtera, Gausov daje najbolje rezultate i pri otklanjanju
šuma i čuvanju kvaliteta slike, no mean i median su i dalje vrijedni za mnoge upotrebe.

Zadatak 3.
Linearno filtriranje sive digitalne slike u frekventnom domenu ( lowpass, highpass, bandpass
i bandstop) te njihova evaluacija na slikama različitih scena. Koristiti originalne slike i slike
kontamirane sa šumom

Osnovna procedura filtriranja u frekventnom domenu uključuje tri koraka:


• Izračunava se Furijeova transformacija
• Vrši se potiskivanje određenih frekvencija u transformaciji njihovim množenjem sa
funkcijom filtera
• Izračunavanje inverzne Furijeove transformacije i vraćanje u prostorni domen.
U upotrebi su najčešće idealni, Batervortov i Gausov filter.

Niskopropusni filter
Niskopropusni filter služi za propuštanje niskih frekvencija dok visoke potiskuje. Ovi filteri se
korise za zamagljivanje slike. U nastavku je kod sa kreiranim Batervortovim filterom prvog
reda.

%nikopropusni filter
clc
clear
close all
%im=imread('buba.jpg');
im=imread('priroda.jpg');
gray_im=rgb2gray(im);
im_noise=imnoise(gray_im,'gaussian');
im_ft = fftshift(fft2(gray_im));
im_noise_ft=fftshift(fft2(im_noise));
subplot(2,3,1), imshow(gray_im);
subplot(2,3,4), imshow(im_noise);
[h,w]=size(gray_im);
d=15; n=1; %kreiranje matrice filtera
[x,y]=meshgrid(-floor(w/2):floor((w-1)/2),-floor(h/2):floor((h-
1)/2));
bl=1./(1+(sqrt(2)-1)*((x.^2+y.^2)/d^2).^n); %za originalnu sliku
im_ft_bl = im_ft.*bl;
im_bl = ifft2(im_ft_bl);
im_bl_a = abs(im_bl);
im_bl_m = max(im_bl_a(:)); %za sliku sa sumom
im_noise_ft_bl = im_noise_ft.*bl;
im_noise_bl = ifft2(im_noise_ft_bl);
im_noise_bl_a = abs(im_noise_bl);
im_noise_bl_m = max(im_noise_bl_a(:));
subplot(2,3,2), imshow(im_bl_a/im_bl_m)
subplot(2,3,3), imshow(mat2gray(log(1+abs(im_ft_bl))))

18
subplot(2,3,5), imshow(im_noise_bl_a/im_noise_bl_m)
subplot(2,3,6), imshow(mat2gray(log(1+abs(im_noise_ft_bl))))

Slika 21. Niskopropusni filter

Slika 22. Niskopropusni filter

19
Može se primijetiti zaglađivanje ivica na slikama no filtriranje slike sa šumom daje gotovo isti
rezultat kao i primjena filtera na originalnu sliku a šum je gotovo u potpunosti otklonjen.

Visokopropusni filter
Visokopropusni filter uklanja niske dok propušta visoke frekvencije. Prikaz se može izvršiti
koristeći inverziju Batervortovog filtera iz prethodne obrade.

%visokopropusni filter
clc
clear
close all
im=imread('buba.jpg');
%im=imread('priroda.jpg');
gray_im=rgb2gray(im);
im_noise=imnoise(gray_im,'gaussian');
im_ft = fftshift(fft2(gray_im));
im_noise_ft=fftshift(fft2(im_noise));
subplot(2,3,1), imshow(gray_im);
subplot(2,3,4), imshow(im_noise);
[h,w]=size(gray_im); d=15; n=1; %kreiranje matrice filtera
[x,y]=meshgrid(-floor(w/2):floor((w-1)/2),-floor(h/2):floor((h-
1)/2));
b1=1./(1+(sqrt(2)-1)*((x.^2+y.^2)/d^2).^n);
bh=1-b1; %za originalnu sliku
im_ft_bh = im_ft.*bh; im_bh = ifft2(im_ft_bh);
im_bh_a = abs(im_bh); im_bh_m = max(im_bh_a(:)); %za sliku sa sumom
im_noise_ft_bh = im_noise_ft.*bh;
im_noise_bh = ifft2(im_noise_ft_bh);
im_noise_bh_a = abs(im_noise_bh);
im_noise_bh_m = max(im_noise_bh_a(:));
subplot(2,3,2), imshow(im_bh_a/im_bh_m)
subplot(2,3,3), imshow(mat2gray(log(1+abs(im_ft_bh))))
subplot(2,3,5), imshow(im_noise_bh_a/im_noise_bh_m)
subplot(2,3,6), imshow(mat2gray(log(1+abs(im_noise_ft_bh))))

20
Slika 23. Visokopropusni filter

Slika 24. Visokopropusni filter

Uočljivo je izdvajanje ivica jer filter propušta visoke frekvencije. U ovom slučaju šum nije
otklonjen jer ga filter propušta.

21
Zadatak 4.
Evaluacija opšte poznatih detektora ivica na sivim slikama različitih scena. Koristiti originalne
slike i slike kontamirane sa dodatnim aditivnim Gausovskim šumom. Koristiti MATLAB
funkcije imnoise(), edge().

Iako čine manji dio slike, i za ljude i za mašinsku viziju najvažniji dijelovi frekvencijskog
područja su visokofrekventni. Niskopropusni dijelovi predstavljaju većinski dio slike no
najčešće čine pozadinu te homogene površine. Najbitniji dio visokofrekventog dijela su ivice,
koje čine objekte odnozno sliku prepoznatljivom. Problem s ivicama je to što nose malo
energije pa ona može biti narušena primjenom šuma.
Detekcija ivica je metoda segmentiranja slike po regijama bazirana na diskontinuitetu, tj. gdje
se dešava značajna promjena nivoa sivila ili teksture, tu je kraj jedne regije odnosno početak
druge. Pojačavanje ovih diskontinuiteta poboljšava šanse uspješnosti prepoznavanja svih
detalja. Slike se prvo moraju prevesti u sivu sliku da bi se detekcija mogla obaviti. Detekcija
ivica je podijeljena u dvije glavne kategorije: detekcija prvog i detekcija drugog reda.
Najpoznatiji detektori prvog reda su Robertsov, Previtov i Sobelov. Sva tri su implementirana
kao kombinacija dva kernela, jednog za derivaciju po 𝑥 i drugog za derivaciju po 𝑦.
Previtov i Sobelov detektori se koriste češće od Robertsovog jer on ne daje dobre rezultate za
okoline veće od 3x3, gdje gubi informacije. Prednost Sobelovog detektora je da zaglađuje
region ivica, smanjujući mogućnost da izolirani pikseli ili pikseli šuma dominiraju odzivom
filtera.
Za nalaženje ivica u MATLAB-u postoji funkcija edge, pri čijem pozivu se bira vrsta detektora.

clc
clear
close all
im=imread('priroda.jpg'); %ucitavanje slike
%im=imread('buba.jpg');
im=rgb2gray(im); %konvertovanje slike u grayscale
im_noise=imnoise(im,'gaussian');
im_r=edge(im,'roberts'); %Robertsov detektor
im_p=edge(im,'prewitt'); %Previtov detektor
im_s=edge(im,'sobel'); %Sobelov detektor
%prikaz originala i ivica figure
subplot(2,2,1), imshow(im);
title('Original');
subplot(2,2,2), imshow(im_r);
title('Roberts');
subplot(2,2,3), imshow(im_p);
title('Prewitt');
subplot(2,2,4), imshow(im_s);
title('Sobel'); %detekcija za zasumljenu sliku
im_noise_r=edge(im_noise,'roberts'); %Robertsov detektor
im_noise_p=edge(im_noise,'prewitt'); %Previtov detektor
im_noise_s=edge(im_noise,'sobel'); %Sobelov detektor
%prikaz zasumljene slike i ivica
figure
subplot(2,2,1), imshow(im_noise);

22
title('Zasumljena slika');
subplot(2,2,2), imshow(im_noise_r);
title('Roberts');
subplot(2,2,3), imshow(im_noise_p);
title('Prewitt');
subplot(2,2,4), imshow(im_noise_s);
title('Sobel');

Slika 25. Detekcija prvog reda ivica na slici prirode bez šuma

23
Slika 26. Detekcija prvog reda ivica na zašumljenoj slici prirode

Slika 27. Detekcija prvog reda ivica na slici bez šuma

24
Slika 28. Detekcija prvog reda ivica na slici sa šumom

Na slici prirode bez šuma jako dobro su uočeni obrisi ptice te Previtov i Sobelov daju slabu
naznaku ivice u pozadini. Uticaj šuma znatno degradira kvalitet ivica no ipak se može lako
prepoznati oblik ptice. Na slici auta detekcija ivica je dosta bolja nego slika prirode. Čak i sa
šumom moguće je uočavanje detalja.
Najviše korišten detektor drugog reda je Laplasijan detektor. Kako bi se izbjegla pogrešna
detekcija odnosno slaba mogućnost detekcije dijagonalnih ivica, rotacijom početnog 3x3
kernela (A) i kombinovanjem za početnim nastaje kernel (B) kojim se mogu detektovati ivice i
pod uglom od 45°.

Detektor drugog reda omogućava dobro detektovanje ivica zahvaljujući mogućnosti detekcije
male promjene gradijenta, pa je prikladan za digitalno naglašavanje ivica.

clc
clear
close all
im=imread('priroda.jpg'); %ucitavanje slike
%im=imread('buba.jpg');
im=rgb2gray(im); %konvertovanje slike u grayscale
im_noise=imnoise(im,'gaussian');
k=fspecial('laplacian'); %kreiranje Laplasijan filtera
im_e=imfilter(im,k,'symmetric'); %Laplasijan ivice s
subplot(2,2,1), imagesc(im);
subplot(2,2,2), imagesc(im_e); %za ispravno skaliranje i prikaz
colormap('gray'); %primjena na zasumljenu sliku
im_noise_e=imfilter(im_noise,k,'symmetric'); %Laplasijan ivice

25
subplot(2,2,3), imagesc(im_noise);
subplot(2,2,4), imagesc(im_noise_e); %za ispravno skaliranje i
prikaz
colormap('gray');

Slika 29. Laplasijan detektor -slika prirode

26
Slika 30. Laplasijan detektor-man made slika

Detekcija ivica na originalnim slikama je dobra, jasnija za sliku auta a kod slike ptice čak ima
i slabog raspoznavanja pozadinskog objekta. Slike pokazuju da je ovaj filter izuzetno osjetljiv
na šum, pa je detekcije ivica kod zašumljenih slika zapravo i nema.
Kod klase detektora zasnovanih na kernelu (detektori prvog reda) moguće je estimirati ivice
samo u pravcu x i y koordinata. Stoga su uvedeni različiti detektori koji daju rješavaju ovaj
problem, npr. Kirchov, Laplasijan, Laplasijan-Gausijan, Kanijev i drugi. U izvođenju
Kanijevog detektora polazi se od jednodimenzionalne kontinualne idealno strme ivice kojoj je
superponiran bijeli Gausov šum. Za Kanijev algoritam karakterističan je postupak potiskivanja
ne-maksimuma (non-maximum suppression) nakon formiranja gradijentne slike. U procesu
potiskivanja ne-maksimuma vrši se poređenje modula gradijenta za svaki piksel sa
vrijednostima gradijenta u dvije tačke koje se nalaze sa obje strane ivice, a vrijednost gradijenta
se zadržava samo ako je veća od obje vrijednosti sa kojima se poredi. Nakon potiskivanja
nemaksimuma vrši se poređenje sa unaprijed definisanom vrijednošću praga u cilju formiranja
ivica.

clc
clear
close all
%im=imread('priroda.jpg'); %ucitavanje slike
im=imread('buba.jpg');
im=rgb2gray(im); %konvertovanje slike u grayscale
im_noise=imnoise(im,'gaussian');
im_s=edge(im,'sobel'); %Sobelov detektor

27
im_c=edge(im,'canny'); %Kanijev detektor
%prikaz originala i ivica
figure
subplot(2,2,1), imshow(im_s);
title('Sobel'), ylabel('Original');
subplot(2,2,2), imshow(im_c);
title('Canny'); %detekcija za zasumljenu sliku
im_noise_s=edge(im_noise,'sobel'); %Sobelov detektor
im_noise_c=edge(im_noise,'canny'); %Kanijev detektor
%prikaz zasumljene slike i ivica
subplot(2,2,3), imshow(im_noise_s);
title('Sobel'), ylabel('Zasumljena slika');
subplot(2,2,4), imshow(im_noise_c);
title('Canny');

Slika 31. Poređenje (Sobel &Canny)

28
Slika 32. . Poređenje (Sobel &Canny)

Da se zaključiti da Kanijev detektor daje najbolje rezultate za nalaženje ivica na slikama bez
šuma. Na slici prirode su jasno detektovani oblici iz pozadine što drugi detektori nisu učinili.
Kao i Laplasijan, i ovaj je neupotrebljiv kod slika zahvaćenih šumom.

Zadatak 5.
Segmentacija različitih sivih slika korištenjem praga. Prag odrediti manuelno analizom
histograma slike i automatski korištenjem MATLAB funkcije graythresh(). Zatim izvršiti
labeliranje (bojenje) povezanih komponenti segmentirane slike korištenjem MATLAB
funkcije bwlabel()).

Kako bi se omogućilo lakše prepoznavanje pojedinačnih objekata u mašinskoj viziji, tj. kako bi
mašine mogle uspješno obavljati posao bez ljudskog nadgledanja, vrši se segmentiranje slike u
regije slične po nekoj karakteristici. Postoji više tehnika segmentacije:
• globalne tehnike – zasnovane na globalnim karakteristikama slike
• lokalne tehnike – zasnovane na procjeni odnosa piksela i okolnih piksela
• tehnike zasnovane na spajanju i dijeljenju regiona po određenim pravilima
segmentiranja
Karakteristike bitne za segmentaciju su boja, tekstura i kretnja objekata. Neka imamo sliku
aviona na nebu, gdje je cilj segmentacije praćenje tog aviona. U tom slučaju bitne karakteristike

29
su kretnja i boja objekta. Ukoliko npr. imamo razne vrste voća na pokretnoj traci, a želimo
izvršiti automatsko sortiranje voća, tada su od značaja boja i oblik.
Biranje praga po intenzitetu slike/objekata je jednostavan proces. Bira se takva vrijednost
praga, gdje pikseli čiji je intenzitet veći od praga bivaju dodijeljeni jednoj regiji dok oni sa
manjim intenzitetom pripadaju drugoj regiji. Manuelno postavljanje praga može se odrediti
metodom pokušaja i pogreške, kao i analizom histograma slike. Pri analizi histograma vrši se
aproksimacija polinomom na osnovu koje se dobija vrijednost praga, koji je uočljiv i sa grafa.
Automatsko postavljanje praga dobijeno je korištenjem Otsuove metode – globalna metoda,
sadržane u funkciji graythresh. U praktičnoj upotrebi automatsko postavljanje praga se najčešće
koristi.
clc
clear
close all
im=imread('coins.png'); %ucitavanje slike
im=rgb2gray(im);
figure(1)
subplot(2,3,1), imshow(im); %prikaz slike
%rezultati manuelnog odredjivanja praga
subplot(2,3,2),im2bw(im,0.2); title('0.2');
subplot(2,3,3),im2bw(im,0.35); title('0.35');
subplot(2,3,4),im2bw(im,0.5); title('0.5');
[counts,X]=imhist(im); %racunanje histograma
P = polyfit(X,counts,6); %racunanje polinoma
Y=polyval(P,X) %fitovanje histogramu and evaluacija
[V,ind]=sort(abs(diff(Y)));
sum=0;
for i=1:255
sum=sum+ind(i,1);
end
av=sum/255;thresh=av/255 %nalazenje minimuma polinoma
subplot(2,3,5), im2bw(im,thresh); title(thresh); %rezultat
figure(2)
plot(X,counts);
hold on, plot(X,Y,'r.'); %histogram
level = graythresh(im) %nalazenje praga - Otsuova metoda
figure(1),
subplot(2,3,6), im2bw(im,level); title(level);%rezultat

30
Slika 33. Manuelno i automatski nalaženje praga

Slika 34. Histogram

Prethodni kod primjenjen na druge sive slike:

31
32
Bojenje odnosno pronalaženje objekata slike je prestavljeno sljedećim kodom:
clc
clear
close all
im = imread('coins.png'); %ucitavanje slike

33
subplot(1,3,1), imshow(im); %prikaz originalne slike
level = graythresh(im); %nalazenje praga
subplot(1,3,2), im2bw(im,level); %nalazenje praga
img=im2bw(im,level);
L=bwlabel(img); %nalazenje povezanih objekata
Lrgb = label2rgb(L, 'hsv','k','shuffle'); %prikaz obojene slike
subplot(1,3,3)
imshow(im);
hold on
boje=imshow(Lrgb);
set(boje, 'AlphaData', 0.3);

Slika 35. Bojenje komponenti

34
Kako su ovi novčići odvojeni, svaki novčič je pronađen i obojen drugom bojom. Iako je sredina
najtamnijeg novčića gotovo odvojena od ivice, imaju dodirnu tačku pa su obojene istom bojom.
Ako se na sliku primijeni dilatacija, dobijaju se spojeni krugovi na segmentiranoj slici koje
algoritam onda ‘prepozna’ kao jedan oblik, što se vidi pri bojenju:

clc
clear
close all

35
im = imread('coins.png'); %ucitavanje slike
subplot(1,3,1), imshow(im); %prikaz originalne slike
level = graythresh(im); %nalazenje praga
se=ones(6); %strukturni element
im_dil=imdilate(im,se); %dilatacija
subplot(1,3,2), im2bw(im_dil,level); %prikaz segmentirane slike
img=im2bw(im_dil,level);
L=bwlabel(img); %nalazenje povezanih objekata
Lrgb = label2rgb(L, 'hsv','k', 'shuffle'); %prikaz obojene slike
subplot(1,3,3)
imshow(im);
hold on
boje=imshow(Lrgb);
set(boje, 'AlphaData', 0.3);

Slika 36. Bojanje komponenti

36
Zadatak 6.
Robotski manipulator sortira boce po boji i po visini u 4 kutije na sljedeći način:
1. Mala boce boje 1 se pohranjuju u kutiju broj 1
2. Velike boce boje 1 se pohranjuju u kutiju broj 2
3. Male boce boje 2 se pohranjuju u kutiju broj 3
4. Velike boce boje 2 se pohranjuju u kutiju broj 4

37
Za ispravan rad, robotskom manipulator je potrebna informacija o koordinati boce i broju
kutije u koju je potrebno pohraniti boce. Ovu informaciju robotski manipulator dobija od
sistema mašinske vizije putem odgovarajućeg protokola.
Potrebno je razviti Matlab program koji iz slike u boji na kojoj se nalaze nedodirujuće boce
različite veličine(tj. velika i mala u dvije različite boje) locira vrh svake boce kao i kutiju u koju
je istu potrebno pohraniti. ( npr. Možete koristiti malu i veliku bocu u crvenoj boji + malu i
veliku bocu u zelenoj boji). Naravno možete koristiti bilo koje dvije boje.
(Pomoć: Poredate boce različite visine i boje koje ste odabrali na stolu, osigurajte bijelu
pozadinu i slikajte. Konvertujte sliku u boji u sivu sliku, isfiltrirajte, segmetirajte pragom,
obojite povezane komponente i iz povezanih komponenti odredite vrh svake boce kao i njihove
dimenzije. Na osnovu lokacije povezanih komponenti, sa slike u boji odredite boju svake boce.
Na osnovu ovih informacija (dimenzije i boje) svaku povezanu komponentu asocirati sa brojem
tako da vrijedi:
1. Mala flaša boje 1 se pohranjuju u kutiju broj 1
2. Velike flaše boje 1 se pohranjuju u kutiju broj 2
3. Male flaše boje 2 se pohranjuju u kutiju broj 3
4. Velike flaše boje 2 se pohranjuju u kutiju broj 4
Koristiti Matlab funkcije (RGB2gray(), imfilter(), graythresh(), bwlabel(), regionprops(), etc.)
Detalje pomenutih funkcija možete doboti iz MATLAB dokumentacije: npr. help bwlabel

Rješenje datog problema se sastoji iz nekoliko segmenata i to:

1. Učitavanje originalne slike


2. Pretvorba u sivu sliku
3. Računanje negtiva sive slike
4. Računanje histagrama sive slike i očitavanje praga za tresholding
5. Binarizacija sive sike pomoću praga
6. Popunjavanje rupa
7. Dilatacija i erozija u svrhu izdvajanja ivica
8. Pronalazak povezanih površina
9. Uklanjanje malih površina koje nisu objekti od interesa
10. Labeliranje povezanih površina
11. Pronalazak centara o okvirova za objekte ('Centroid','BoundingBox')
12. Računanje koordinata prihvatnih tačaka

clc
clear all
close all

%Ucitavanje i prikaz originalne slike


A = imread('flase.jpg');
%A = imread('flase2.jpg');
figure, imshow(A)

38
%Konerzija u sivu sliku
I=rgb2gray(A);
figure, imshow(I)

%Racunanje negativa
J=255-I;
figure,imshow(J);

%Racunanje i prikaz histagrama


figure, imhist(J);

%Binarizacija
BW = im2bw(J,0.2);
figure, imshow(BW)

%Popunjavanje rupa
BW2 = imfill(BW,'holes');
figure, imshow(BW2)

%Dilatacija
se = strel('line',5,60);
BW3 = imdilate(BW2,se);
figure, imshow(BW3)

%erozija
erodedI = imerode(BW3,se);
figure, imshow(erodedI)

%Ivice flasa
nova=BW3-erodedI;
figure, imshow(nova)

%Uklanjanje površine manje od 1000 piksela


cc = bwconncomp(BW2);
stats = regionprops(cc, 'Area');
idx = find([stats.Area] > 1000 );
BW2 = ismember(labelmatrix(cc), idx);

%Pronadji povezane povrsine


CC = bwconncomp(BW2);

%Bojenje objekata
L = labelmatrix(CC); %Label matrix
labeledImage = bwlabel(BW2);
RGB = label2rgb(L);
figure, imshow(RGB)

%Centar objekta i okvir


S = regionprops(CC,'Centroid','BoundingBox');

boundingboxes = cat(1, S.BoundingBox); %Box


centroids = cat(1, S.Centroid); %Centroid

%Plotanje centroida na binarnu sliku


figure, imshow(BW2)

39
hold on
plot(centroids(:,1),centroids(:,2), 'b*')
hold off

%Plotanje okvira na originalnoj slici


figure, imshow(A)
hold on
for k = 1:size(boundingboxes,1)
rectangle('position',boundingboxes(k,:),'Edgecolor','r')
end
hold off

%Racunanje koordinata
hold on
for i= 1: size(boundingboxes,1)
x(i)=boundingboxes(i,1)+boundingboxes(i,3)/2;
y(i)=boundingboxes(i,2);
plot(x(i),y(i),'b*','MarkerSize',12,'LineWidth',2);
end
hold off

disp('Koordinate centara vrha flase su: ');


for i=1:length(x)
disp('X= ');
x(i)
disp('Y= ');
y(i)
end

Slika 37. Orginalna slika

40
Slika 38. Siva slika

Slika 39. Negativ sive slike

41
Slika 40. Histogram sive slike

Slika 41. Binarna slika

42
Slika 42. Binarna slika nakon popunjavanja rupa

Slika 43. Binarna slika nakon diletacije

43
Slika 44. Detektovane ivice flaše

Slika 45. Labeliranje objekta

44
Slika 46. Pikaz centra objekta

Slika 47. Detektovane flaše i prihvatne tačke

Koordinate prihvatnih tačaka:

45
Slika 48. Koordinate flaše 1

Slika 49. Koordinate flaše 2

Slika 50. Koordinate flaše 3

46
Slika 51. Koordinate flaše 4

Kako su korištene flaše imale svijetlih dijelova, isti su se morali ukloniti kako bi se izvršilo
pravilno nalaženje težišta i vrhova. To je učinjeno tako što je negativ segmentirane slike
podvrgnut dilataciji. Isto bi se dobilo i da je segmentirana slika podvrgnuta eroziji. Upotrebom
funcije regionprops dobijen je set osobina koje su bile od značaja za nalaženje koordinata težišta
i vrhova.

Ukoliko prethodni kod primjenimo na više flaša, dobit ćemo iste rezultatey sa različitm
prihvatnim tačkama:

Slika 52. Orginalna slika

47
Slika 53. Histogram sive slike

Slika 54. Detektovane flaše i prihvatne tačke

Određivanje visine i boje flaše:


clc
clear all
close all

%Ucitavanje i prikaz originalne slike


%A = imread('flase.jpg');
A = imread('flase2.jpg');

48
figure, imshow(A)

%Konerzija u sivu sliku


I=rgb2gray(A);
figure, imshow(I)

%Racunanje negativa
J=255-I;
figure,imshow(J);

%Racunanje i prikaz histagrama


figure, imhist(J);

%Binarizacija
BW = im2bw(J,0.2);
figure, imshow(BW)

%Popunjavanje rupa
BW2 = imfill(BW,'holes');
figure, imshow(BW2)

%Dilatacija
se = strel('line',5,60);
BW3 = imdilate(BW2,se);
figure, imshow(BW3)

%erozija
erodedI = imerode(BW3,se);
figure, imshow(erodedI)

%Ivice flasa
nova=BW3-erodedI;
figure, imshow(nova)

%Uklanjanje površine manje od 1000 piksela


cc = bwconncomp(BW2);
stats = regionprops(cc, 'Area');
idx = find([stats.Area] > 1000 );
BW2 = ismember(labelmatrix(cc), idx);

%Pronadji povezane povrsine


CC = bwconncomp(BW2);

%Bojenje objekata
L = labelmatrix(CC); %Label matrix
labeledImage = bwlabel(BW2);
RGB = label2rgb(L);
figure, imshow(RGB)

%Centar objekta i okvir


S = regionprops(CC,'Centroid','BoundingBox');

boundingboxes = cat(1, S.BoundingBox); %Box


centroids = cat(1, S.Centroid); %Centroid

%Plotanje centroida na binarnu sliku

49
figure, imshow(BW2)
hold on
plot(centroids(:,1),centroids(:,2), 'b*')
hold off

%Plotanje okvira na originalnoj slici


figure, imshow(A)
hold on
for k = 1:size(boundingboxes,1)
rectangle('position',boundingboxes(k,:),'Edgecolor','r')
end
hold off

%Racunanje koordinata
hold on
for i= 1: size(boundingboxes,1)
x(i)=boundingboxes(i,1)+boundingboxes(i,3)/2;
y(i)=boundingboxes(i,2);
plot(x(i),y(i),'b*','MarkerSize',12,'LineWidth',2);
end
hold off

disp('Koordinate centara vrha flase su: ');


for i=1:length(x)
disp('X= ');
x(i)
disp('Y= ');
y(i)
end

%Visina flaše
for i=1:length(y)
if y(i) < 250;
disp('Velika flasa je visine: ');
VelikaFlasa(i)=y(i);
disp(y(i));
end
if y(i) > 250;
disp('Mala flasa je visine: ');
MalaFlasa(i)=y(i);
disp(y(i));
end

end

Dobije se sledeći rezultat:

50
Slika 55. Visina flaša

Ukoliko prethodni kod primjenimo na više flaša, potrebno je na osnovu koordinata flaše (y
koordinate) odrediti referentnu vrijednost koja će razdvajati veliku i malu flašu. U prvom
slučaju (slika 1-4 flaše ) za referentnu vrijednost smo koristili 250, a u drugom (slika 2-8 flaša)
smo koristili 100.

Izmijenjeni dio koda :


for i=1:length(y)
if y(i) < 100;
disp('Velika flasa je visine: ');
VelikaFlasa(i)=y(i);
disp(y(i));
end
if y(i) > 100;
disp('Mala flasa je visine: ');
MalaFlasa(i)=y(i);
disp(y(i));
end
end

51
Slika 56. Visina flaša-primjer 2

Matlab kod za određivanje boje flaše:


clc
clear all
close all

%Ucitavanje i prikaz originalne slike


I = imread('flase.jpg');
%I = imread('flase2.jpg');
figure, imshow(I)

%Konerzija u sivu sliku


Is=rgb2gray(I);
figure, imshow(Is)

%izracunavanje praga slike


Is_prag = graythresh(Is);
figure, imshow(Is_prag);

%segmentiranje sive slike pragom


im2bw(Is,Is_prag);
title('Segmentirana slika');
I_seg=im2bw(Is,Is_prag);

%Racunanje negativa

52
J=255-Is;
figure,imshow(J);

%Racunanje i prikaz histagrama


figure, imhist(J);

%Binarizacija
BW = im2bw(J,0.2);
figure, imshow(BW)

%Popunjavanje rupa
BW2 = imfill(BW,'holes');
figure, imshow(BW2)

%matrica jedinica 10x10


matr=ones(10);

%Dilatacija
se = strel('line',5,60);
BW3 = imdilate(BW2,se);
figure, imshow(BW3)

%erozija
erodedI = imerode(BW3,se);
figure, imshow(erodedI)

%Ivice flasa
nova=BW3-erodedI;
figure, imshow(nova)

%Uklanjanje površine manje od 1000 piksela


cc = bwconncomp(BW2);
stats = regionprops(cc, 'Area');
idx = find([stats.Area] > 1000 );
BW2 = ismember(labelmatrix(cc), idx);

%Pronadji povezane povrsine


CC = bwconncomp(BW2);

%Bojenje objekata
L = labelmatrix(CC); %Label matrix
labeledImage = bwlabel(BW2);
RGB = label2rgb(L);
figure, imshow(RGB)

%Centar objekta i okvir


S = regionprops(CC,'Centroid','BoundingBox');

boundingboxes = cat(1, S.BoundingBox); %Box


centroids = cat(1, S.Centroid); %Centroid

%Plotanje centroida na binarnu sliku


figure, imshow(BW2)
hold on
plot(centroids(:,1),centroids(:,2), 'b*')
hold off

53
%Plotanje okvira na originalnoj slici
figure, imshow(I)
hold on
for k = 1:size(boundingboxes,1)
rectangle('position',boundingboxes(k,:),'Edgecolor','r')
end
hold off

%Racunanje koordinata
hold on
for i= 1: size(boundingboxes,1)
x(i)=boundingboxes(i,1)+boundingboxes(i,3)/2;
y(i)=boundingboxes(i,2);
plot(x(i),y(i),'b*','MarkerSize',12,'LineWidth',2);
end
hold off

%pronalazenje najvece vrijednosti RGB boje u matrici P1 za svaku


bocu.
j=1;
for i=1:length(x)
P1=impixel(I,x(i),y(i)+40); %upisivanje vrijednosti piksela u
matricu
if(P1(1)>P1(2)) %ako je R>G
if(P1(1)>P1(3)) %ako je R>B
indeks(j)=1;
else %R<B
indeks(j)=3;
end
else %R<G
if(P1(2)>P1(3))
indeks(j)=2;
else
indeks(j)=3;
end
end
j=j+1;
end

k=1; %varijabla koja označava kutije (koja boca ide u koju kutiju)
for i=1:4
if(indeks(i)==1)
%sortiranje velikih i malih boca
if(y(i)>250)
str=['Mala boca crvene boje se pohranjuje u kutiju broj
',num2str(k)];
disp(str);
k=k+1;
else
str=['Velika boca crvene boje se pohranjuje u kutiju
broj ',num2str(k)];
disp(str)
k=k+1;
end
end

54
if(indeks(i)==2)
if(y(i)>250)
str=['Mala boca zelene boje se pohranjuje u kutiju broj
',num2str(k)];
disp(str)
k=k+1;
else
str=['Velika boca zelene boje se pohranjuje u kutiju
broj ',num2str(k)];
disp(str)
k=k+1;
end
end
if(indeks(i)==3)
if(y(i)>250)
str=['Mala boca plave boje se pohranjuje u kutiju broj
',num2str(k)];
disp(str)
k=k+1;
else
str=['Velika boca plave boje se pohranjuje u kutiju broj
',num2str(k)];
disp(str)
k=k+1;
end
end
end

Slika 57. Posmatrana slika

Na komandnom prostoru dobijemo sledeći ispis:

55
Slika 58. Ispis boje boce i kutije kojoj pripada

56
Literatura
• Digital Image Processing Using MATLAB – R. Gonzalez, R. Woods, S. Eddins
• Fundamentals of Digital Image Processing – C. Solomon, T. Breckon
• Materijali sa predavanja
• Materijali sa vježbi

57

You might also like