Professional Documents
Culture Documents
Jasmina Muminovic 15009
Jasmina Muminovic 15009
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
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()).
𝐹𝑐 = 𝑓𝑓𝑡𝑠ℎ𝑖𝑓𝑡(𝐹)
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);
6
Slika 3. FT slike prirode bez šuma
7
Slika 6. FT slike prirode sa Gausovim šumom
8
Slika 9. FT slike prirode sa salz&pepper šumom
9
Slika 11. FT slike sa Gausovim š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
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()).
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);
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);
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
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))))
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
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
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');
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');
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
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);
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);
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
clc
clear all
close all
38
%Konerzija u sivu sliku
I=rgb2gray(A);
figure, imshow(I)
%Racunanje negativa
J=255-I;
figure,imshow(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)
%Bojenje objekata
L = labelmatrix(CC); %Label matrix
labeledImage = bwlabel(BW2);
RGB = label2rgb(L);
figure, imshow(RGB)
39
hold on
plot(centroids(:,1),centroids(:,2), 'b*')
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
40
Slika 38. Siva slika
41
Slika 40. Histogram sive slike
42
Slika 42. Binarna slika nakon popunjavanja rupa
43
Slika 44. Detektovane ivice flaše
44
Slika 46. Pikaz centra objekta
45
Slika 48. Koordinate flaše 1
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:
47
Slika 53. Histogram sive slike
48
figure, imshow(A)
%Racunanje negativa
J=255-I;
figure,imshow(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)
%Bojenje objekata
L = labelmatrix(CC); %Label matrix
labeledImage = bwlabel(BW2);
RGB = label2rgb(L);
figure, imshow(RGB)
49
figure, imshow(BW2)
hold on
plot(centroids(:,1),centroids(:,2), 'b*')
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
%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
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.
51
Slika 56. Visina flaša-primjer 2
%Racunanje negativa
52
J=255-Is;
figure,imshow(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)
%Bojenje objekata
L = labelmatrix(CC); %Label matrix
labeledImage = bwlabel(BW2);
RGB = label2rgb(L);
figure, imshow(RGB)
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
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
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