Professional Documents
Culture Documents
Vjezba9 Segmentcija - Slike Watershed
Vjezba9 Segmentcija - Slike Watershed
Laboratorijske vježbe:
Segmentacija slike -
nastavak
113
114POGLAVLJE 10. LABORATORIJSKE VJEŽBE: SEGMENTACIJA SLIKE - NASTAVAK
osnovna koraka su: Neka je cijela slika početno područje od interesa; Analizirati
cijelo područje i odlučiti da li svi pikseli sadržani unutar regiona zadovoljavaju
kriterij sličnosti; Ako je to istina, onda područje od interesa (takode nazvan blo-
kom) odgovara regionu slike i kao takav je labeliran; Ako nije, tada se područje
od interesa dijeli (obično u četiri jednaka poddijela) i svaki od tih dijelova se
smatra novim područjima od interesa. Ovaj proces se nastavlja sve dok se slika
ne prestane dalje dijeliti. U najgorem slučaju, ovo se može desiti kada površine
ne budu veličine od samo jednog piksela. Ovakva procedura podjele predstavlja
primjer metoda koje se nazivaju divide-and-conquer i top-down metode. Proces
kojim se svaki blok dijeli u četiri jednaka podbloka naziva se quadtree dekom-
pozicija. Nakon svake podjele (split) slijedi proces spajanja (merge) kojim se
susjedni regioni spajaju, ukoliko je to naravno potrebno. Jednom kada više
nema spajanja ili podjele slike, proces segmentacije je završen.
h2=fspecial('gaussian',[30 30],12);
subplot(3,3,4), imshow(imfilter(A,h1),[]); %Prikaz slike filtrirane sa sigma=6
subplot(3,3,7), imshow(imfilter(A,h2),[]); %Prikaz slike filtrirane sa sigma=12
[bw,thresh]=edge(A,'log'); %Detekcija ivica pomo\'{c}u LoG filtera
subplot(3,3,2), imshow(bw,[]);
[bw,thresh]=edge(A,'canny'); %Detekcija ivica pomo\'{c}u Canny filtera
subplot(3,3,3), imshow(bw,[]);
[bw,thresh]=edge(imfilter(A,h1),'log'); %LoG detekcija ivica sa sigma=6
subplot(3,3,5), imshow(bw,[]);
[bw,thresh]=edge(imfilter(A,h1),'canny'); %Canny detekcija ivica sa sigma=6
subplot(3,3,6), imshow(bw,[]);
[bw,thresh]=edge(imfilter(A,h2),'log'); %LoG detekcija ivica sa sigma=12
subplot(3,3,8), imshow(bw,[]);
[bw,thresh]=edge(imfilter(A,h2),'canny'); %Canny detekcija ivica sa sigma=12
subplot(3,3,9), imshow(bw,[]);
A=imread('coins.png'); % u i t a v a n j e slike
bw=im2bw(A,graythresh(A)); %automatski threshold
se=strel('disk',10); bwo=imopen(bw,se); %uklanjanje pozadine primjenom morfolo\v{s}kog
D = bwdist(~bwo); % r a u n a n j e funkcije segmentacije
D = -D; D(~bwo) = -255; %inverzija
L = watershed(D); % r a u n a n j e watershed transformacije
figure, subplot(1,4,1), imshow(A); %prikaz slike
subplot(1,4,2), imshow(bw) %thresholdovana slika
subplot(1,4,3), imshow(D,[]); %prikaz funkcije segmentacije
ind=find(L==0); Ac=A; Ac(ind)=0; %identificiranje watersheds
subplot(1,4,4), imshow(Ac,[]); hold on
A=imread('overlapping euros.jpg');
Agrad=ordfilt2(A,25,ones(5))-ordfilt2(A,1,ones(5)); %racunanje funkcije segmentacije
figure, subplot(1,3,1), imshow(A,[]);
subplot(1,3,2), imshow(Agrad,[]);
I = imread('coins.png');
imshow(I)
title('Originalna slika');
mask = zeros(size(I));
mask(25:end-25,25:end-25) = 1;
figure, imshow(mask);
title('Pocetna lokacija konture');
bw = activecontour(I,mask,300);
figure, imshow(bw);
title('Segmentirana slika');
im=imread('coins.png');
10.5. K-MEANS CLUSTERING 117
for i=1:256
img hist(i)=sum(sum(im==(i-1)));
end;
for i=1:256
hist value(i)=i-1;
end;
%inicijalizacija clustera
cluster = zeros(k,1);
cluster count = zeros(k,1);
for i=1:k
cluster(i)=uint8(rand*255);
end;
old = zeros(k,1);
while (sum(sum(abs(old-cluster))) >k)
old = cluster;
closest cluster = zeros(256,1);
min distance = uint8(zeros(256,1));
min distance = abs(hist value-cluster(1));
for i=1:k
if (cluster count(i) == 0)
cluster(i) = uint8(rand*255);
else
cluster(i) = uint8(sum(img hist(closest cluster==i).*hist value(closest cluster==i))/cluster c
end;
end;
end;
imresult=uint8(zeros(size(im)));
for i=1:256
imresult(im==(i-1))=cluster(closest cluster(i));
end;
clustersresult=uint8(zeros(size(im)));
for i=1:256
118POGLAVLJE 10. LABORATORIJSKE VJEŽBE: SEGMENTACIJA SLIKE - NASTAVAK
clustersresult(im==(i-1))=closest cluster(i);
end;
clusters = cluster;
result image = imresult;
clusterized image = clustersresult;
figure
subplot(1,2,1), imshow(im)
subplot(1,2,2), imshow(result image)