WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Objekterkennung - Darstellung der Objekte

 

David D.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2016, 12:25     Titel: Objekterkennung - Darstellung der Objekte
  Antworten mit Zitat      
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',[0 0.75 0]);
hold off

probiert, jedoch habe ich hiermit die Beschriftung der einzelnen Rechtecke für jedes Objekt nicht realisieren können.

mit:
Code:
obj_nr = insertObjectAnnotation(M_BW_conncomp,'rectangle',stats(n).BoundingBox,mytitle,'Color','green','TextColor','green','TextBoxOpacity',0,'FontSize',20);

ist es mir ebenfalls nicht gelungen alle Objekte wie gewüschnt im Ausgangsbild zu makieren

auch mit:
Code:

hatte ich leider keinen erfolg.

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;
       
    subplot(1,2,2);
    imshow(M_BW_SE);
        title('M-BW-SE');
        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

%%
stats = regionprops(M_BW_conncomp,'Eccentricity','Area','BoundingBox');

%% 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

%         obj_nr = insertObjectAnnotation(M_BW_conncomp,'rectangle',stats(n).BoundingBox,mytitle,'Color','green','TextColor','green','TextBoxOpacity',0,'FontSize',20);
%        M_BW_conncomp(:,:,1) = insertObjectAnnotation(M_BW_conncomp,'rectangle',stats(n).BoundingBox,mytitle,'Color','green','TextColor','green','TextBoxOpacity',0,'FontSize',20);
%         imshow(obj_nr)
%         M_BW_conncomp = insertObjectAnnotation(M_BW_conncomp,'rectangle',stats(n).BoundingBox,mytitle,'Color','green','TextColor','green','TextBoxOpacity',0,'FontSize',20);
%         imshow(obj_nr)

%         h = rectangle('Position',stats(n).BoundingBox,'LineWidth',2);
%         set(h,'EdgeColor',[0 0.75 0]);

%         annotation('textbox',[0.5,0.4,0.1,0.1],'String',str)
%         hold off
end

%%
figure(20);
    hold on
    subplot(1,2,2);
    imshow(M_BW_conncomp);
    hold off


Soll-Zustand.png
 Beschreibung:

Download
 Dateiname:  Soll-Zustand.png
 Dateigröße:  241.31 KB
 Heruntergeladen:  289 mal
Ist-Zustand.PNG
 Beschreibung:

Download
 Dateiname:  Ist-Zustand.PNG
 Dateigröße:  10.38 KB
 Heruntergeladen:  274 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.04.2016, 13:35     Titel:
  Antworten mit Zitat      
Hallo,

eine sehr ähnliche Frage wurde auch hier schon gestellt:
http://www.gomatlab.de/label-rectangle-t40858.html
Vermutlich von dir oder jemandem, der an demselben Projekt arbeitet?

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.