You are on page 1of 37

UNIVERZITET U TUZLI

FAKULTET ELEKTROTEHNIKE
AUTOMATIKA I ROBOTIKA

MAŠINSKA VIZIJA
Seminarski rad

Profesor: Student:
dr. sc. Naser Prljača, red. prof. Nedim Babić

Juni 2018
Sadržaj

1 Zadatak 1: Linearne diskretne transformacije 3


1.1 2D DFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 2D DCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 Zadatak 2: Filtriranje slike u prostornom domenu 15

3 Zadatak 3: Filtriranje slike u frekventnom domenu 17


3.1 Niskopropusni filteri - za glačanje slike . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Visokofrekventni filteri - za izoštravanje slike . . . . . . . . . . . . . . . . . . . . . 19
3.3 Band-stop - Notch filteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4 Zadatak 4: Detekcija ivica 22

5 Zadatak 5: Segmentacija slike 27

6 Zadatak 6: Izdvajanje vrhova flaša 30


1 Zadatak 1: Linearne diskretne transformacije
1.1 2D DFT
Na dvije vrste slika (natural i man made) ćemo uraditi diskretnu Fourierovu transformaciju.
Radimo pomoću MATLAB funkcije fft2().

1 a=imread('sarajevo.jpg');
2 b=rgb2gray(a);
3 %Ovaj red ispod koristimo poslije za dodavanje suma
4 %imgGN=imnoise(b,'gaussian');
5 imgFT=fft2(b);
6 %Skaliramo rezultat za prave koef DFT−a
7 imgFT=imgFT/prod(size(imgFT));
8 imgFT=fftshift(imgFT); %Centriramo spektar
9 imshow(imgFT), title('2D DFT "natural" slike')

1 a=imread('noc.jpg');
2 b=rgb2gray(a);
3 %Ovaj red ispod koristimo poslije za dodavanje suma
4 %imgGN=imnoise(b,'gaussian');
5 imgFT=fft2(b);
6 %Skaliramo rezultat za prave koef DFT−a
7 imgFT=imgFT/prod(size(imgFT));
8 imgFT=fftshift(imgFT); %Centriramo spektar
9 imshow(imgFT), title('2D DFT "man−made" slike')

U nastavku su prikazani rezultati transformacije za "natural" sliku bez i sa Gaussovim šumom.

3
4
5
6
7
A evo rezultata i za "man-made" sliku.

8
9
10
1.2 2D DCT

1 a=imread('sarajevo.jpg');
2 b=rgb2gray(a);
3 %Ovaj red ispod koristimo poslije za dodavanje suma
4 %imgGN=imnoise(b,'gaussian');
5 imgCT=dct2(b);
6 imshow(imgCT), title('2D DCT "natural" slike')

1 a=imread('noc.jpg');
2 b=rgb2gray(a);
3 %Ovaj red ispod koristimo poslije za dodavanje suma
4 %imgGN=imnoise(b,'gaussian');
5 imgCT=dct2(b);
6 imshow(imgCT), title('2D DCT "man−made" slike')

Dakle u nastavku su prikazani rezultati 2D DCT na "natural i man-made" slici.

11
12
13
14
2 Zadatak 2: Filtriranje slike u prostornom domenu
Filtriranje slike, ili korelacijom ili konvolucijom, može se izvesti korištenjem matlab funkcije imfil-
ter. Npr., filtrirajmo sliku sa 5x5 kernelom istih težinskih koeficijenata. Ovakav filter se još zove
filter usrednjavanja.

1 I = imread('eight.tif');
2 h = ones(5,5) / 25;
3 I2 = imfilter(I,h);
4 imshow(I), title('Original slika');
5 figure, imshow(I2), title('Filtrirana slika')

15
Funkcija imfilter može da filtrira bilo koji ulazni tip. Međutim potrebno je razmisliti o ulaz-
nom tipu jer funkcija može preuduzeti zaokruživanja ili odbacivanja decimalnih vrijednosti ili
može rezultat biti negativna vrijednost. Funkcija imfilter može izvršiti filtriranje ili korelacijom ili
konvolucijom. Podrazumijevana je opcija korelacija. Međutim ako želimo izvršiti filtriranje konvo-
lucijom može se proslijediti string ’conv’ kao opcioni parametar funkcije imfilter. U prethodnom
primjeru zbog simetričnog kernela rotacija nema uticaja te je rezultat korelacijom ekvivalentan
filtriranju konvolucijom. Ova funkcija može filtrirati i RGB slike kao multidimenzione podatake.
Prilikom filtriranja 2D filterom RGB slike filtrira se svaki sloj odnosno komponenta. Rezultat
slika je takođe RGB.

Matlab funkcija fspecial proizvodi različite vrste predefiniranih filtera, u obliku korelacijskog ker-
nela. Poslije kreiranja filtera sa fspecial on se može primijeniti direktno na sliku korištenjem
funkcije imfilter. Npr. filter za izoštravanje slike primijenjen na sivu sliku. Ovaj filter ima efekat
da ivice i fini detalji u slici postaju jasniji.

1 I = imread('moon.tif');
2 h = fspecial('unsharp');
3 I2 = imfilter(I,h);
4 imshow(I), title('Original slika')
5 figure, imshow(I2), title('Filtrirana slika')

16
Ako pak npr. uzmemo jedan nelinarni filter Median. Dodamo recimo malo šuma na sliku onih
kovanica (salt-peper) i uradimo filtriranje.

1 I = imread('eight.tif');
2 J = imnoise(I,'salt & pepper',0.02);
3 K = medfilt2(J);
4 imshow(J), figure, imshow(K)

3 Zadatak 3: Filtriranje slike u frekventnom domenu


Ovo filtriranje se bazira na računanju DFT od slike, nakon toga množimo rezultat transformacije
sa filterskom prenosnom funkcijom (u zavisnosti koji filter koristimo Gaussov, Butherworthov
itd.). Računamo zatim inverznu FT i na kraju dobijemo sliku popravljenog kvaliteta. Koristili
smo funkcije lpfilter.m hpfilter.m notch.m paddedsize.m dftuv.m

3.1 Niskopropusni filteri - za glačanje slike


Glačanje(zamagljenje) ili bluranje se postiže slabljenjem komponenti visoke frekvencije u određe-
nom opsegu unutar transformisane originalne slike. Najčešće su u upotrebi: idealni(vrlo oštar),
Gausovski(vrlo blag), Buttherworthov(zavisno od reda). Ovdje ćemo kroz MATLAB pokazati
filtriranje slike pomoću Gausovog NF.
Ovdje ćemo filtrirati "man-made" sliku

1 a=imread('kula.jpg');
2 %Convert to grayscale
3 b=rgb2gray(a);
4 imshow(b)
5
6 %Determine good padding for Fourier transform
7 PQ = paddedsize(size(b));
8
9 %Create a Gaussian Lowpass filter 5% the width of the Fourier transform
10 D0 = 0.05*PQ(1);
11 H = lpfilter('gaussian', PQ(1), PQ(2), D0);

17
12
13 % Calculate the discrete Fourier transform of the image
14 F=fft2(double(b),size(H,1),size(H,2));
15
16 % Apply the highpass filter to the Fourier spectrum of the image
17 LPFS_kula = H.*F;
18
19 % convert the result to the spacial domain.
20 LPF_kula=real(ifft2(LPFS_kula));
21
22 % Crop the image to undo padding
23 LPF_kula=LPF_kula(1:size(b,1), 1:size(b,2));
24
25 %Display the blurred image
26 figure, imshow(LPF_kula, [ ])

Pa dobijemo rezultate

18
3.2 Visokofrekventni filteri - za izoštravanje slike

1 a=imread('kula1.jpg');
2
3 %Convert to grayscale
4 b=rgb2gray(a);
5 imshow(b)
6
7 %Determine good padding for Fourier transform
8 PQ = paddedsize(size(b));
9
10 %Create a Gaussian Highpass filter 5% the width of the Fourier transform
11 D0 = 0.05*PQ(1);
12 H = hpfilter('gaussian', PQ(1), PQ(2), D0);
13
14 % Calculate the discrete Fourier transform of the image
15 F=fft2(double(b),size(H,1),size(H,2));
16

17 % Apply the highpass filter to the Fourier spectrum of the image


18 HPFS_kula = H.*F;
19
20 % convert the result to the spacial domain.
21 HPF_kula=real(ifft2(HPFS_kula));
22

23 % Crop the image to undo padding


24 HPF_kula=HPF_kula(1:size(b,1), 1:size(b,2));
25

19
26 %Display the "Sharpened" image
27 figure, imshow(HPF_kula, [])

Rezultati

3.3 Band-stop - Notch filteri

1 a=imread('noiseball.png');

20
2 imshow(a)
3

4 %Determine good padding for Fourier transform


5 PQ = paddedsize(size(a));
6
7 %Create Notch filters corresponding to extra peaks in the Fourier transform
8 H1 = notch('btw', PQ(1), PQ(2), 10, 50, 100);
9 H2 = notch('btw', PQ(1), PQ(2), 10, 1, 400);
10 H3 = notch('btw', PQ(1), PQ(2), 10, 620, 100);
11 H4 = notch('btw', PQ(1), PQ(2), 10, 22, 414);
12 H5 = notch('btw', PQ(1), PQ(2), 10, 592, 414);
13 H6 = notch('btw', PQ(1), PQ(2), 10, 1, 114);
14
15 % Calculate the discrete Fourier transform of the image
16 F=fft2(double(a),PQ(1),PQ(2));
17
18 % Apply the notch filters to the Fourier spectrum of the image
19 FS_noiseball = F.*H1.*H2.*H3.*H4.*H5.*H6;
20

21 % convert the result to the spacial domain.


22 F_noiseball=real(ifft2(FS_noiseball));
23
24 % Crop the image to undo padding
25 F_noiseball=F_noiseball(1:size(a,1), 1:size(a,2));
26

27 %Display the blurred image


28 figure, imshow(F_noiseball,[])

21
4 Zadatak 4: Detekcija ivica
Za odredivanje ivica koristit ćemo funkciju edge(). Podržano je nekoliko različitih metoda odre-
đivanja ivica. Funkcija kao rezultat vraća binarnu sliku veličine ulazne slike na kojoj su označene
detektirane ivice. Podržane metode su sobel, prewitt, roberts, zerocross, log i canny. Za metode
koje se oslanjaju na procjenu prve derivacije estimacija derivacije se računa za svaku tačku te se
na tako dobivenoj slici vrši amplitudna segmentacija. Prag za amplitudnu segmentaciju moguće
je zadati unaprijed. Za metode koje se oslanjaju na procjenu druge derivacije detektira se prolaz
kroz nulu. I za te metode je moguće zadati prag, no prag tada određuje strminu ruba. Pokazat
ćemo detekciju ivica na nekim slikama:

1 [img,map]=imread('knjiga_ssa.png'); % ucitavamo sliku


2 rub=edge(img,'sobel'); % primjenimo Sobelovu metodu
3 imshow(rub) % p r i k a i m o detektirane rubove
4 rub=edge(img,'sobel',0.02); % zadali smo osjetljivost 0,02
5 imshow(rub)
6 rub=edge(img,'log',[],4); % primjenjujemo LoG metodu
7 % uz devijaciju 4
8 imshow(rub)

22
23
Ako pak dodamo malo šuma "so i biber" nakon detekcije dobijemo:

24
Pa evo još jedan primjer:

1 a=imread('kotromanic.jpg');
2 I=rgb2gray(a);
3 %I=imread('moon.tif'); %Ucitava sliku
4 IEr=edge(I,'roberts'); %Robertsov detektor
5 IEp= edge(I,'prewitt'); %Prewittov detektor
6 IEs =edge(I,'sobel'); %Sobelov detektor
7 subplot(2,2,1), imshow(I); %Prikaz originalne slike
8 subplot(2,2,2), imshow(IEr);
9 subplot(2,2,3), imshow(IEp);
10 subplot(2,2,4), imshow(IEs);

25
26
5 Zadatak 5: Segmentacija slike
U nastavku je dat primjer segmentacije slike primjenom thresholdinga. U prvom dijelu primjera,
threshold je odabran manuelno na principu proba-greška, što je prihvatljivo samo u ograničenom
broju slučajeva. Medutim, većina aplikacija obrade slike zahtijeva potpuno automatsku segmen-
taciju, tako da je potrebno automatski odrediti threshold u skladu sa nekim kriterijem. Jedan
jednostavan pristup za automatsko odredivanje thresholda je aproksimacija histograma sa poli-
nomijalnom funkcijom i nalaženje thresholda kao minimalnu vrijednost date krive. Prikladniji
pristup automatskog odredivanja thresholda je dat Otsuovim metodom koji nalazi threshold koji
minimizira varijansu unutar jedne klase (regiona).

1 I = imread('coins.png'); %Ucitava originalnu sliku


2 subplot(2,2,1), imshow(I); %Prikazuje originalnu sliku
3 subplot(2,2,2),im2bw(I,0.35); %Rezultat manuelnog odredjivanja praga
4 [counts,X] = imhist(I); %Racunanje histograma slike
5 P = polyfit(X,counts,6); Y = polyval(P,X); %Prilagodjavanje histograma
6 [V,ind] = sort(abs(diff(Y))); thresh = ind(3)./255; %Nalazenje minimuma polinoma
7 subplot(2,2,3), im2bw(I,thresh); %Prikaz polinomijalnog praga
8 level = graythresh(I); %Nalazenje praga
9 subplot(2,2,4), im2bw(I,level); %Rezultat Otsu'ove metode
10 figure; plot(X,counts); hold on, plot(X,Y,'r.'); %Histogram

27
28
Thresholding sa maksimalnom entropijom je vrlo sličan Otsuovom metodu, s tim da ovaj metod
vrši maksimiziranje entropije unutar klase, umjesto maksimi- ziranja varijanse unutar klase kao
kod Otsuovog metoda. Entropija predstavlja mjeru neizvjesnosti da će se dogoditi neki dogadaj i
može biti izvedena iz his- tograma sivih vrijednosti.
Što se tiče metoda ručnog odabiranja praga potrebno je dakle na osnovu histograma slike odrediti
prag segmentacije. Ukoliko na slici postoji više različitih regija takvih da je svjetlina tačaka unutar
regije otprilike jednaka, očekujemo bimodalan ili multimodalan histogram. Jedan takav histogram
prikazan je dole na slici. Na tom histogramu vidimo nekoliko skupina, te bi u slučaju segmentacije
na dvije regije za prag odabrali vrijednost oko 130.

Za amplitudnu segmentaciju koristimo funkciju grayslice() koja ulazne slike segmentira sa zadanim
pragovima. Pragovi se navode u jednom vektoru i moraju biti između 0 i 1. Ako izlaz funkcije
grayslice() nismo pridružili nekoj varijabli, funkcija odmah crta rezultat segmentacije. Postupak
je opisan u sljedećem primjeru:

29
1 [img,map]=imread('testpat1.tif'); % u i t a v a m o sliku
2 imhist(img) % prikazujemo histogram
3 grayslice(im2double(img),130/255);
4 % segmentiramo sliku pragom koji smo odabrali

6 Zadatak 6: Izdvajanje vrhova flaša

1 a=imread('coca−cola.jpg');
2 figure, imshow(a), title('Originalna slika')
3 b=rgb2gray(a);
4 figure, imshow(b), title('Siva slika')
5 c=255−b;
6 figure, imshow(c), title('Siva slika − komplement')
7 level= graythresh(c)
8 BW=im2bw(c,level);
9 figure, imshow(BW), title('Binarna slika')
10 d=bwlabel(BW);
11 figure, imshow(d), title('Binarna slika nakon bwlabel')
12 % P o m o u vislabels o z n a i m o brojevima sve bijele p o v r i n e
13 vislabels(d), title('Objekti oznaceni')
14 e=regionprops(d, 'Area','BoundingBox');
15 area_values=[e.Area]
16 %Vidimo koje su p o v r i n e epove , i ograni imo prikaz
17 idx=find((1319 ≤ area_values) & (area_values ≤1560))
18 f= ismember(d, idx);
19 %I dobijemo izdvojene epove na kraju
20 figure, imshow(f), title('Izdvojeni vrhovi f l a a ')
21 g = regionprops(f,'centroid'); % R a u n a m o t e i t a
22 centroids = cat(1, g.Centroid); %i p r i k a e m o koordinate t e i t a epova
23 imshow(f)
24 hold on
25 plot(centroids(:,1),centroids(:,2), 'b*')
26 hold off

30
Rezultati

31
32
33
34
35
36
37

You might also like