Beispiel: Erkennen von geometrischen Formen in Bildern - Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Fachkräfte:
Informatiker (m/w) für den Bereich Toolkette Embedded Software
Weiterentwicklung einer MATLAB-/Simulink-Toolkette, Automatisierung der Code-Generierung mit TargetLink und Embedded Coder
cbb-Software GmbH - Stuttgart

Softwareentwickler (m/w) automatische Codegenerierung
Umsetzung, Neuprogrammierung und Weiterentwicklung in Simulink, TargetLink und C
EFS - Ingolstadt, Wolfsburg

Entwicklungsingenieur (m/w) Fahrdynamikregelsysteme
Entwicklung der für die Fahrdynamik relevanten Funktionen
EFS - Ingolstadt, Wolfsburg

Systemingenieur (m/w) Funktionsentwicklung Automotive
Konzeption und Spezifikation von spezifischen Funktionen in elektronischen Steuergeräten
Lisa Dräxlmaier GmbH - Vilsbiburg bei Landshut, Garching bei München

Test- und Erprobungsingenieur (m/w) für vorausschauende Sicherheitsfunktionen / Fahrerassistenz
Erstellung von Testspezifikationen (z. B. in Doors) für Kundenfunktionen
Automotive Safety Technologies GmbH - Gaimersheim

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Beispiel: Erkennen von geometrischen Formen in Bildern

 

steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.971
Anmeldedatum: 03.09.07
Wohnort: Dessau
Version: R2014b
     Beitrag Verfasst am: 16.06.2008, 18:40     Titel: Beispiel: Erkennen von geometrischen Formen in Bildern
  Antworten mit Zitat      
Es geht um das Erkennen einfacher geometrischer Formen in Bildern. Dabei beschränke ich mich hier auf die Möglichkeiten Dreieck, Kreis, Quadrat, Rechteck.

Code:
image1 = imread('ball.jpg'); % Einlesen des Bildes

B = rgb2gray(image1); % umwandeln des Bildes in ein Graustufenbild

figure,
imshow(B);

thresh = graythresh(B); % automatische Bestimmung eines Schwellenwertes, um Vorder- und Hintergrund zu unterscheiden

C = im2bw(B,thresh); % Umwandeln des Graustufenbildes in ein b/w-Bild (Schwarz-Weiß oder auch binär) in Abhängigkeit des vorherbestimmten Schwellenwertes

C = ~C; % Da du einen weißen Hintergrund hast und weiß immer als '1' interpretiert wird

figure,
imshow(C);

C = imclearborder(C,4); % Damit werden automatisch alle zusammenhängenden Objekte, die Kontakt zu mindestens einem Bildrand haben, auf '0' gesetzt und damit Schwarz gemacht

D = imfill(C,'holes'); % Hier werden alle schwarzen Bereiche, die komlett von weißen Bereichen umgeben sind, auf weiß gesetzt und damit zu dem Objekt hinzugefügt

figure,
imshow(D);

E = bwlabel(D); % Hier werden alle Bereiche gelabelt, das heißt, dass jedes selbständige Objekt eine interne Nummer zugewiesen bekommt (es wird markiert)

stats = regionprops(E,'BoundingBox','Extent'); % hier wird ein struct "stats"  mit den Feldern "BoundingBox" und "Extent" gebildet. In diesen Feldern wird zum einen die Position und Größe des das Objekt umfassenden Rechtecks (BoundingBox) und das Verhältnis zwischen Anzahl der Pixel des Objekts und Anzahl der Pixel der BoundingBox (Extent)

for i=1:numel(stats)
    % Wenn die Abweichung der Breite minus die Höhe des umfassenden Rechtecks kleiner ist als 0.1 und gleichzeitig die Flächen übereinstimmen muss es ein Quadrat sein
    if abs((stats(i).BoundingBox(3)-stats(i).BoundingBox(4))) < .1 && stats(i).Extent==1
        display('Quadrat');

    % Wenn die Abweichung der Breite minus die Höhe des umfassenden Rechtecks kleiner ist als 0.1 und das Flächenverhältnis zwischen 0.7 und 1 liegt, dann ist es ein Kreis
    elseif abs((stats(i).BoundingBox(3)-stats(i).BoundingBox(4))) < .1 && (.7<stats(i).Extent & stats(i).Extent<1)
        display('Kreis');

    % Wenn das Flächenverhältnis gleich 1 ist, aber die Breite und Höhe nicht übereinstimmen, dann muss es ein Rechteck sein
    elseif isequal(stats(i).Extent,1)
        display('Rechteck');

    % Da es hier nur 4 mögliche Fälle gibt, muss alles andere ein Dreieck sein
    else
        display('Dreieck');

    end
end


Hinweise auf Fehler und/oder Verbesserungsvorschläge sind herzlich willkommen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen


twilightfox
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 16.07.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2008, 15:20     Titel:
  Antworten mit Zitat      
Ich hab das mal mit coin.jpg von Matlab probiert. Liefert mir allerdings nen Schmarrn. Gib doch ein paar Infos mehr dazu bitte: Wie groß die Dreiecke,..., sein dürfen damit sie erkannt werden oder ob man das Bild vorher noch ein wenig manipulieren muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 1.971
Anmeldedatum: 03.09.07
Wohnort: Dessau
Version: R2014b
     Beitrag Verfasst am: 23.12.2008, 16:46     Titel:
  Antworten mit Zitat      
Moin,

das Problem liegt darin, dass ich diesen Code in Bezug auf ein spezielles Problem geschrieben habe. Hier findest du aber Bilder mit denen der Code auf jeden Fall funktioniert: http://www.gomatlab.de/viewtopic,p,7676.html#7676

Gruß
Alex
_________________

>> I told me to.

____________________________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Silverhawk
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 20.11.08
Wohnort: Braunschweig
Version: R2008b
     Beitrag Verfasst am: 25.02.2009, 16:03     Titel:
  Antworten mit Zitat      
Ich habe gerade ein ähnliches Problem (sicher nur eine Zeile)

und zwar hab ich einen Bildausschnitt, aus einem binärbild und ich möchte nur wissen, ob sich darin weiße Pixel befinden. Wenn dem so ist, soll er eine Antwort ausgeben.

kennt dazu jemand den passenden Befehl? Wink
Danke schonmal...
_________________

Lauf nicht weg sagte der Drache, ich will doch nur kosten....
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2009, 16:12     Titel:
  Antworten mit Zitat      
Guck mal nach
Code:
 
Fati

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.12.2009, 01:04     Titel:
  Antworten mit Zitat      
Hi steve, ich beschäftige mich auch mit Segmentierung, ich weiss nicht wie ich mit boundingBox arbeiten kan. wie kann ich es auf das original bild ploten lssen!?
 
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
.



goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.