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

Strukturerkennung und -bestimmung

 

AnnaB
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2011, 09:15     Titel: Strukturerkennung und -bestimmung
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem:
Mir liegt ein zweifarbiges Bild einer Struktur vor (s. Anhang Original) vor.
Ich möchte ein Matlab-Programm schreiben, welches das "Skelett" dieser Struktur erkennt. Dabei soll möglichst eine 1-Pixel-Linie die Struktur darstellen. Das Ergebnis soll ca. aussehen wie der Anhang Skelett (hier ist das Skelett von Hand in weiß in das Originalbild eingezeichnet).
Dabei interessiert mich insbesondere die Länge der verschiedenen Linien, deren Anzahl und die Anzahl der Knotenpunkte.
Die Linien sollen keine Geraden sein.

Gibt es für mein Problem irgendeine "fertige" Matlabfunktion?

Oder hat jemand eine Idee wie man dabei vorgehen könnte? Was würdet ihr machen?
Eventuell mittels Kantenerkennung und Reduzierung der Struktur auf eine Linie arbeiten?

Vielen Dank für eure Vorschläge und Hilfe!
Grüße
Anna

Original.jpg
 Beschreibung:

Download
 Dateiname:  Original.jpg
 Dateigröße:  178.07 KB
 Heruntergeladen:  788 mal
Skelett.jpg
 Beschreibung:

Download
 Dateiname:  Skelett.jpg
 Dateigröße:  308.28 KB
 Heruntergeladen:  809 mal
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 31.05.2011, 06:44     Titel:
  Antworten mit Zitat      
Moin,

habe soeben einen längeren Text entfernt, da das Ganze auch einfacher geht. Der Befeh lautet "bwperim":l

Code:
I=imread(Bild); % wenn Farbe, dann weiter:
R=I(:,:,1);
I2=im2bw(R);
I3=bwperim(~I2);
figure; imshow(I3)


bwperim erzeugt das Format >logical<. Geht so also nicht mit m*n*3. Von logical auf uint8 müßte das über einen Schwellwert gehen. Das funktioniert auch mit Farbauszügen, nur wenn diese zum Colorbild mit der cat-Anweisung wieder zusammengeführt werden, habe ich nur ein schwarzes Bild. Wenn Du also unbedingt ein Colorbild als Resultat haben möchtest, muss das Problem noch behoben werden. Vielleicht kennt einer die Lösung. Oder Du legst über das Bild eine Colormap:


Code:
colormap = [0:1/255:1]' * ones(1,3);  
colormap(1,:) = [1 0 0];
imshow(I3, colormap);


Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
AnnaB
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2011, 09:25     Titel:
  Antworten mit Zitat      
Hallo Hubertus,
vielen Dank für deine Antwort.
Die Farben selbst interressieren mich nicht.

Deine Funktion ist sehr schön, erkennt aber leider nur die Grenzen meiner Struktur. Mich interressiert aber mehr das Skelett und die Kontenpunkte.

Besser geeignet ist hierfür vermutlich die Funktion "bwmorph" mit der Operation 'skel'. (Diese Funktion habe ich dank deinem Hinweis gefunden.)

Code:

I=imread('Ausschnitt.jpg');
R=I(:,:,1);
I2=im2bw(R);  
 
I3=bwmorph(I2,'skel',Inf);

figure;
imshow(I3);
 


Ich freue mich über weitere Vorschläge!

Grüße
Anna
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 01.06.2011, 07:52     Titel:
  Antworten mit Zitat      
Moin AnnaB,

bei meiner Problembeschreibung zu logical "war ich wohl noch nicht ganz wach". Du kannst diese und ähnliche Funktionen natürlich auch auf Fabbilder anwenden, sollte das mal erforderlich sein. Bei "skel" könnten interessante Details sichtbar werden. Darum will ich das noch nachliefern. Du zerlegst einfach ein Farbbild in seine Farbauszüge: Rot=I(:,:,1) usw, wendest Deine Funktionen auf die Farbauszüge an und mußt dann mit: im2uint8 Deine berechneten Farbauszüge von logical auf uint8 wandeln. Danach mit der cat-Anweisung wieder zum Colorbild zusammenfügen.

Viele Grüße

Hubertus
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.