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

Konturextraktion (Freeman,Chain,o.a.) in Binärbild?

 

mark_81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2010, 09:27     Titel: Konturextraktion (Freeman,Chain,o.a.) in Binärbild?
  Antworten mit Zitat      
Hallo,

ich möchte gerne die in einem Binärbild vorhandenen Regionenkonturen extrahieren (Ziel: Bild mit Konturlinien). Habe nun schon eine Weile gesucht, anscheinend gibt es in Matlab selbst hierfür keine Lösung?
Sowas wie bwtraceboundary habe ich bereits versucht, leider ohne wirklichen Erfolg.

Gibt es denn keine Implementierung des Freeman-Codes o.ä. in Matlab? Für alternative Lösungsvorschläge wäre ich natürlich ebenso empfänglich Smile.

Vorab vielen Dank u viele Grüße!


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 16.11.2010, 12:54     Titel:
  Antworten mit Zitat      
Hallo,

das ist sehr wohl in Matlab-Funktionen integriert:
Code:

BW = imread('circles.png');
figure, imshow(BW)
BW2 = bwmorph(BW,'remove');
figure, imshow(BW2)
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2010, 13:00     Titel:
  Antworten mit Zitat      
Hallo,

was es in MATLAB bzw. der Image Processing Toolbox gibt sind die Befehle:
bwperim: erzeugt Binärbild mit Objektumrissen (Konturen)
bwtraceboundary: Du gibst Startpunkt vor und bekommst Liste mit Konturpixeln des gewünschten Objekts
bwboundaries: Du bekommst die Umrisse aller Objekte als Pixelliste (inkl. der Löcher wenn gewünscht)

Falls Du für irgendwelche nachfolgenden Berechnungen tatsächlich eine Freeman oder Chain-Code benötigst, müsstest Du Dir das aus der Liste mit Pixelwerten selber berechnen:
So in etwa:
Code:

% read image and convert to binary
img = imread('coins.png');
img = imcrop(img,[206,145,60,58]);
coin = img > 95;
figure, imshow(coin)

% find start point
[r,c] = find(coin);
start = [r(1),c(1)];

% trace boundary
B = bwtraceboundary(coin,start,'NW',8,inf,'counterclockwise');

% convert to chain code
code = [3,2,1;4,nan,0;5,6,7];  % Lookup table
B = diff(B)+2;
idx = sub2ind(size(code),B(:,1),B(:,2));
C = code(idx);

 


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
mark_81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2010, 13:37     Titel:
  Antworten mit Zitat      
erstmal vielen Dank für eure Rückmeldungen.
werde das mal testen und mich bei Problemen nochmal melden.

ansonsten: Danke! Smile
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 14:15     Titel:
  Antworten mit Zitat      
Kennt jemand vielleicht ein paar gute Beispiele oder Einführungen, wo erklärt wird wie man den Kettencode am besten auswertet? Ich habe den relativen Kettencode aus dem absoluten gebildet und dachte mir ich suche nach der Abfolge der Richtungsänderungen und der Länge des Codes, da meine Figuren sehr stark von der gesuchten Norm abweichen können. Dazu wollte ich eventuell den Mittelwert über ein paar Randpixel bilden um eine Richtungsänderung sicher erkennen zu können. (Die Figuren wurden vorher auf ca. 50x50 heruntergesetzt).

Bis jetzt hab ich nur gelesen, dass es über eine FT und über Histogramme bzw. Krümmungen geht, aber ob es dazu Matlabbefehle gibt oder wie es genau funktionieren soll ist mir noch nicht klar.

Danke


(Musste übrigens feststellen, dass es bei Matlab bei vereinzelten Randpixeln zu Fehlern bei der Abtastung kommt, so wird unter anderem eine 180° Drehung vollführt, dann wird eine Runde im Kreis gelaufen um dann wieder normal weiter abzutasten... wenn ich das richtig gesehen habe)
 
turi
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 02.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2014, 14:24     Titel:
  Antworten mit Zitat      
Vielen vielen Dank LittleX.Es hat mir sehr geholfen






LittleX hat Folgendes geschrieben:
Hallo,

was es in MATLAB bzw. der Image Processing Toolbox gibt sind die Befehle:
bwperim: erzeugt Binärbild mit Objektumrissen (Konturen)
bwtraceboundary: Du gibst Startpunkt vor und bekommst Liste mit Konturpixeln des gewünschten Objekts
bwboundaries: Du bekommst die Umrisse aller Objekte als Pixelliste (inkl. der Löcher wenn gewünscht)

Falls Du für irgendwelche nachfolgenden Berechnungen tatsächlich eine Freeman oder Chain-Code benötigst, müsstest Du Dir das aus der Liste mit Pixelwerten selber berechnen:
So in etwa:
Code:

% read image and convert to binary
img = imread('coins.png');
img = imcrop(img,[206,145,60,58]);
coin = img > 95;
figure, imshow(coin)

% find start point
[r,c] = find(coin);
start = [r(1),c(1)];

% trace boundary
B = bwtraceboundary(coin,start,'NW',8,inf,'counterclockwise');

% convert to chain code
code = [3,2,1;4,nan,0;5,6,7];  % Lookup table
B = diff(B)+2;
idx = sub2ind(size(code),B(:,1),B(:,2));
C = code(idx);

 


Viele Grüße,

LittleX
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 - 2024 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.