Konturextraktion (Freeman,Chain,o.a.) in Binärbild?
mark_81
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 16.11.2010, 09:27
Titel: Konturextraktion (Freeman,Chain,o.a.) in Binärbild?
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 .
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);
erstmal vielen Dank für eure Rückmeldungen.
werde das mal testen und mich bei Problemen nochmal melden.
ansonsten: Danke!
gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.01.2011, 14:15
Titel:
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)
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);
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.