Verfasst am: 28.04.2016, 12:25
Titel: Objekterkennung - Darstellung der Objekte
Hallo liebes Forum,
ich habe ein Problem bei der Beschriftung bzw. bei der Darstellungen meiner Objekterkennung.
Ich habe ein Bild auf dem unterschiedliche Lichtquellen bei schwarzem Hintergrund zu sehen sind. Diese Lichtquellen werden von meinem Programm als Objekte erkannt. Nun möchte ich diese Lichtquellen im Ausgangsbild durch einen Rechteckigen Rahmen und zugehörigem Objektname darstellen.
Bei der Darstellung habe ich jedoch Probleme:
In einer schleife sollen ja nach anzahl an lichtquellen diese im Ausgangsbild wie beschrieben Makiert werden.
Zuerst habe ich es mit:
Code:
Figure(4); %Ausgangsbild
hold on
h = rectangle('Position',stats(n).BoundingBox,'LineWidth',2);
set(h,'EdgeColor',[00.750]);
hold off
Mein Ziel ist es: Im Ausgangsbild die detektierten Objekte durch ein Rechteck in der entsprechenden Objektgröße und eine zugehörige Beschriftung(Nummerierung des Objekts) zu integrieren, siehe Bilder im Anhang.
Hat wer eine Lösung für mein Problem?
Hier noch der restliche 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
%% Erstellen eines Cell-Arrays in dem die einzelnen Objekte(als Matrix) gespeichert werden
CA_Objekt = cell(num_comp,1);
%%
% 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; %Versatz zum Ursprung der Matrix; -1, da Ursprung 1 ist und nicht 0
sx = min(row) - 1; %Versatz zum Ursprung der Matrix; -1, da Ursprung 1 ist und nicht 0
% 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
% Speichern des jeweiligen fertigen Objektis in ein Cell-Array
CA_Objekt{n,1} = target;
% Gibt das jeweilige Objekt(target) als Bild aus
mytitle = strcat('Object Number: ',num2str(n));
figure,image(target);
title(mytitle);
% Das jeweilige Objekt wird im Ausgangsbild durch einen rechteckigen % Rahmen um das Objekt makriert % figure(20); % subplot(1,2,2); % hold on
In beiden Posts kann man das Problem aufgrund fehlender Daten nicht nachvollziehen. Dann noch der recht längliche Code dazu, und es ist sehr schwierig, bei der Problemlösung zu helfen.
Grüße,
Harald
Einstellungen und Berechtigungen
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.