Professional Documents
Culture Documents
Ma Inskavizija
Ma Inskavizija
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 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')
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')
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)
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
19
26 %Display the "Sharpened" image
27 figure, imshow(HPF_kula, [])
Rezultati
1 a=imread('noiseball.png');
20
2 imshow(a)
3
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:
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).
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
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