clear all
clc
% Wczytanie obrazu, filtracja, binaryzacja, segmentacja
img = imread('pn10_Matlab_lab2_Bubak.jpg');
se = strel('disk',5);
img = imopen(img,se);
gray = rgb2gray(img);
figure(1), imshow(gray);
bw = (gray>=0 & gray<=90);
% figure(2), imshow(bw);
[L, num] = bwlabel(bw,8);
% imtool(L);
bw_1 = ismember(L,715);
bw_2 = ismember(L,461);
bw_3 = ismember(L,498);
bw_4 = ismember(L,303);
bw1 = bw;
for i=1:10
bw1 = imdilate(bw1,se);
end
for i=1:10
bw1 = imerode(bw1,se);
end
[L, num] = bwlabel(bw1,8);
% imtool(L);
bw1_1 = ismember(L,10);
bw2 = (gray<=110 | gray>=170);
% figure(3), imshow(bw2);
bw3 = bw2;
for i=1:10
bw3 = imdilate(bw3,se);
end
for i=1:10
bw3 = imerode(bw3,se);
end
[L,num] = bwlabel(bw3,8);
% imtool(L);
bw3_1 = ismember(L,8);
bw3_2 = ismember(L,18);
% figure(4), imshow(bw3);
bw4 = (gray<=30);
% figure(5), imshow(bw4);
bw5 = bw4;
for i=1:4
bw5 = imdilate(bw5,se);
end
for i=1:4
bw5 = imerode(bw5,se);
end
[L, num] = bwlabel(bw5,8);
% imtool(L);
bw5_1 = ismember(L,1);
bw5_2 = ismember(L,183);
bw5_3 = ismember(L,264);
% figure(6), imshow(bw5);
bw22 = imdilate(bw2,se);
bw22 = imdilate(bw22,se);
bw22 = imerode(bw22,se);
bw22 = imerode(bw22,se);
[L,num] = bwlabel(bw22,8);
% imtool(L);
bw22_1 = ismember(L,299);
% figure(7), imshow(bw22);
% Suma wszystkich wyodrębnionych obiektów
bw_ost = bw_1 + bw_2 + bw_3 + bw_4 + bw1_1 + bw5_1 + bw5_2 + bw5_3 + bw3_1 + bw3_2 + bw22_1;
figure(8), imshow(bw_ost);
% Wybranie cech obrazu oraz prezentacja położenia, orientacji,
% prostokąta opisanego
[L,num] = bwlabel(bw_ost,8);
feats = regionprops(L,'All');
% Położenie
figure(9)
hold on
h1 = imshow(L);
r1 = 100;
r2 = 300;
for i=1:size(feats)
h1 = line(feats(i).Centroid(1),feats(i).Centroid(2),'Marker','.','MarkerEdgeColor','r');
end
hold off
% Orientacja
figure(10)
hold on
h2 = imshow(L);
for i=1:size(feats)
h2 = line([feats(i).Centroid(1),feats(i).Centroid(1)+r2*cos(feats(i).Orientation*(pi/180))
],[feats(i).Centroid(2),feats(i).Centroid(2)+r2*sin(feats(i).Orientation*(pi/180))]);
end
hold off
% Njmniejszy prostokąt
figure(11)
hold on
h3 = imshow(L);
for i=1:size(feats)
h3 = rectangle('position',[feats(i).BoundingBox(1),feats(i).BoundingBox(2),feats(i).BoundingBox(3),feats(i).BoundingBox(4)],'EdgeColor','r');
end
hold off
% Wyliczenie charakterystyk
for i=1:size(feats)
%%form_factor
Char(i,1) = 4*pi*feats(i).Area / feats(i).Perimeter^2;
%%roundness
Char(i,2) = 4*feats(i).Area / (pi*feats(i).MajorAxisLength^2);
%%acpect_ratio
Char(i,3) = feats(i).MajorAxisLength / feats(i).MinorAxisLength;
%%solidity
Char(i,4) = feats(i).Solidity;
%%compactness
Char(i,5) = sqrt(4*feats(i).Area/pi) / feats(i).MajorAxisLength;
end
Char