function W = Erkennung(ImageFile)

%1. Ausgangsbild einlesen und in ein binäres Bild konvertieren

RGB = imread(ImageFile);        % RGB einlesen
figure, imshow(RGB), title('Original Image');

GRAY = rgb2gray(RGB);           % RGB in GRAY
figure, imshow(GRAY), title('Gray Image');

threshold = graythresh(GRAY);
S = im2bw(GRAY, threshold);    % in Binär
figure, imshow(S), title('Binary Image');

S2 = ~S;                        % Invertieren
figure, imshow(S2), title('Inverted Binary Image');

Sfilter = Filter(S2,1,1);

% 2. Bezeichnungen einfügen
S3 = bwlabel(S2);
imagesc(S3);



%3. Eigenschaften der Objekte auslesen
S4 = regionprops(S3,'MinorAxisLength','MajorAxisLength','Area','Perimeter','centroid','EquivDiameter');

%4. Evaluierung der gefundenen Objekte anhand ihrer Eigenschaften:
%   - Längste und kürzeste Verbindung/Durchmesser,
%   - Vergleich der Fläche mit Kreisfläche pi*r^2.
%   - Vergleich Umfang mit 2*pi*r
%   - Normierung des Scores: 1 ist idealer Kreis

for cnt = 1:length(S4)
score1(cnt) = abs(1-(S4(cnt).MajorAxisLength-S4(cnt).MinorAxisLength)...
/max([S4(cnt).MajorAxisLength,S4(cnt).MinorAxisLength]));
score2(cnt) = abs(1 - abs(pi*((mean([S4(cnt).MajorAxisLength,...
S4(cnt).MinorAxisLength]))/2)^2-S4(cnt).Area)/S4(cnt).Area);
score3(cnt) = abs(1 - abs(pi*(max([S4(cnt).MajorAxisLength,...
S4(cnt).MinorAxisLength]))-S4(cnt).Perimeter)/S4(cnt).Perimeter);
end
score = mean([score1;score2;score3]);

%5. Ausgabe der Werte in Bild

figure, imshow(S2), title('Labeled Binary Image');
for cnt = 1:length(S4)
text(S4(cnt).Centroid(1),S4(cnt).Centroid(2),['Score: ',num2str(score(cnt))],'color','red');
text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)+10,['MaxA: ',num2str(S4(cnt).MajorAxisLength)],'color','green');
text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)+20,['MinA: ',num2str(S4(cnt).MinorAxisLength)],'color','yellow');
text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)+40,['Mitt: ',num2str((S4(cnt).MinorAxisLength+S4(cnt).MajorAxisLength)/2)],'color','yellow');
%text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)+30,['MaxI: ',num2str(S4(cnt).MajorAxisLength)],'color','green');
%text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)+40,['MinI: ',num2str(S4(cnt).MinorAxisLength)],'color','yellow');
%text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)-10,['Area: ',num2str(S4(cnt).Area)],'color','cyan');
%text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)-20,['Peri: ',num2str(S4(cnt).Perimeter)],'color','blue');
text(S4(cnt).Centroid(1),S4(cnt).Centroid(2)+30,['Equi: ',num2str(S4(cnt).EquivDiameter)],'color','blue');
end
W = S4;
end

