ich habe ein Problem bei der Beschriftung meiner Rechtecke.
Ich will mit meinem Script in einem Bild (Aufnahme eines Raumausschnittes mit mehreren Lichtquellen) die vorhandenen Lichtquellen detektieren. Dies Ausgabe soll das Ausgangs-Bild mit den detektierten Objekten darstellen. Die Objekte sollen anhand von Rechtecken umrandet werden. Soweit funktioniert dies auch.
Jedoch bekomme ich leider die BEschriftung der Rechtecke nicht hin. Je nach Anzahl der detektierten Objekte soll jedes Objekt mit: Obj1,Obj2,... auf dem modifizierten Ausgangsbild visualisiert werden.
Ich habe dies schon mit den Funktionen annotation, set, insertObjectAnnotation,... versucht. Ich komme leider nicht auf das gewünschte Ergebnis.
Ich habe meine aktuelle Ausgabe und die Soll-Ausgabe zum besseren Verständnis angehängt.
Hier mein bisheriger Code:
Code:
%% Objekterkennung
%% Bild wird als binäres Bild (in Schwarz(0) und Weis(1)) dargestellt
level = graythresh(M_Ascii); % Berechnung des Grenzwertes zwischen Vorder- und Hintergrund
M_BW = im2bw(M_Ascii,level); % Erstellen eines Schwarz(0)-/Weis(1)-Bildes
%% "Objekte die kleiner SE sind werden rausgefiltert
SE = strel('disk',2); %Erstellt eine "Scheibe" als Struktur-Element mit dem Radius von 2 Pixeln
M_BW_SE = imopen(M_BW,SE); %Löscht "Objekte die kleiner als SE sind
%% Darstellung nach Umrechnung in SW mit level=grenzwert für Vorder-/Hintergrund figure(20);
subplot(1,2,1);
imshow(M_BW);
title('M-BW');
ylabel('Zeile');
xlabel('Spalte');
axis on;
grid on;
%%
%[M_BW_conncomp] = bwconncomp(M_BW_SE,4); % bwconncomp ermittelt connected components der Matrix M_BW_SE mit einer mindestanzahl an 4 Pixeln. Jeder component wird ein wert(1,2,..) zugewiesen [M_BW_conncomp,num_comp] = bwlabel(M_BW_SE,4); % bwlabel ermittelt connected components der Matrix M_BW_SE mit einer mindestanzahl an 4 Pixeln. Jeder component wird ein wert(1,2,..) zugewiesen
%%
% Schleife für jedes Objekt(component), ermittelt die Lage der einzelnen % Objekte und extrahiert diese ein eigenen Bilder for n = 1:num_comp
[row,col] = find(M_BW_conncomp == n); %Liest die Zeile und Reihe jedes Elements eines Objekts aus
hight = max(row) - min(row) + 1; %Berechnet die Höhes des Objekts (als Rechteckig gedacht)
width = max(col) - min(col) + 1; %Berechnet die Weite des Objekts (als Rechteckig gedacht)
target = uint8(zeros([hight,width])); %Erstellt eine Matrix (target) aus "0" mit der Ermittelten Höhe und Weite
sy = min(col) - 1;
sx = min(row) - 1;
% sy = min(col); % sx = min(row);
% Schleife, die den Wert jedes Elements (für das jeweilige Objekt) aus % M_Ascii ausliest und in die Matrix (target) die der reinen % Objektgröße entspricht geschrieben werden for i = 1:size(row,1)
x = row(i,1) - sx; %Offset für unterschiedliche Matrixgröße
y = col(i,1) - sy; %Offset für unterschiedliche Matrixgröße
target(x,y) = M_Ascii(row(i,1),col(i,1));
end
mytitle = strcat('Object Number: ',num2str(n));
%figure,imshow(target);
figure,image(target);
title(mytitle);
figure(20);
subplot(1,2,2);
hold on
% h = rectangle('Position',[x,y,width,hight],'LineWidth',2);
h = rectangle('Position',stats(n).BoundingBox,'LineWidth',2);
set(h,'EdgeColor',[00.750]);
% str = ('Objekt'); % annotation('textbox',[.5,.5,.1,.1],'String',str);
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.