Hallo Leute,

ich arbeite gerade an meiner Diplomarbeit, und bin auf ein Problem gestoßen...


Ich möchte ein Bild segmentieren, wie z.B. dieses:
Bild hier  

Ein buntes Schachbrettmuster, projiziert von einem Beamer und aufgenommen mit einer ganz normalen Kamera. Und was ich jetzt brauche sind die einzelnen Felder, im einfachsten Fall als S/W-Bild bei dem alle Felder weiß sind, getrennt durch schwarze Linien.


Noch ein paar Worte zu dem verwendeten Muster:

1. Die Helligkeit ist idealerweise konstant, und die Sättigung zumindest annähernd. Die Felder unterscheiden sich also im wesentlichen durch ihren Farbwinkel.

2. Die Differenz der Farbwinkel zweier senkrecht oder waagerecht benachbarter Felder beträgt immer entweder 120° oder 240°.


Naja, ich möchte das Bild also segmentieren, und dabei möglichst unabhängig von Sättigung und Helligkeit bleiben. Daher habe ich das Bild zunächst mal nach HSI umgewandelt, und mich bei der Weiterverarbeitung auf den H-Kanal beschränkt. Da der aber Phasensprünge enthält (360° -> 0°) die bei der Verarbeitung stören, habe ich den H-Kanal wieder in ein RGB-Bild konvertiert.

Dieses Bild sieht dann so aus:
Bild hier  


Der nächste Schritt war dann die Berechnung von Gradientenbildern für R, G und B. Und weil ich nur ein einziges brauche, werden die dann noch zu einem Bild verrechnet (für jeden Pixel wird von den 3 Werten jeweils der größte verwendet).

Wenn das dann fertig ist sieht es so aus:
Bild hier  


Das Bild zu segmentieren ist dann zwar immernoch nicht trivial, aber es ist machbar.




So, und jetzt kommt mein eigentliches Problem...
die Methode funktioniert nämlich nicht mehr sobald irgendein farbiges Objekt mit auf dem Bild ist, da dadurch der Farbwinkel des projizierten Musters verfälscht wird.

Hier mal ein Beispiel mit einem gelben Blatt Papier, wie man sieht ist das resultierende Gradientenbild de facto nicht zu gebrauchen.
Bild hier  
Bild hier  
Bild hier  



Also, wie kann ich solche Bilder zuverlässig segmentieren?
Ich habe zwar reichlich Lektüre zu dem Thema im Internet gefunden, aber die verschiedenen Algorithmen werden immer nur ganz grob umschrieben, was die Sache nicht unbedingt erleichtert. Außerdem kostet es zu viel Zeit unterschiedliche Segmentierungsalgorithmen zu implementieren, von denen ich nichtmal weiß ob sie überhaupt für Bilder dieser Art geeignet sind.

Leider verfügt Matlab nur über eine einzige Segmentierungsfunktion, und die arbeitet nach dem Watershed-Algorithmus. Dummerweise bringt mir diese Funktion aber rein garnichts, da ja schon die Vorverarbeitung bei farbigen Objekten fehlschlägt.


Optimal wären für mich jetzt natürlich Programme die unterschiedliche Segmentierungsalgorithmen beherrschen, so daß ich den auswählen kann der für meine Anwendung optimal geeignet ist. Aber auch nach inzwischen bestimmt schon 10-12 Stunden intensiven googelns, habe ich noch nichts derartiges gefunden.


Es ist auch recht frustrierend, daß ich zwar alles über das Muster weiss was es zu wissen gibt, dieses Wissen bei der Segmentierung aber bisher nicht einsetzen konnte. (je mehr Informationen man hat, desto effizienter sollte man die Bilder ja auch segmentieren können)



Naja, vielleicht fällt euch ja irgendwas dazu ein...


Gruß,
Felix