Farbsegmentierung

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Die Verfahren Binarisierung und Hintergrundsubtraktion basieren auf einer Analyse der Helligkeit, also des Grauwertes. Für eine Erkennung können aber auch andere Merkmale bzw. Bildparameter herangezogen werden. Besonders geeignet – weil oft leicht realisierbar – ist die Verwendung einer Farbinformation. Soll beispielsweise eine Anwendung durch die Hand gesteuert werden, so kann der Benutzer einen farbigen Handschuh tragen. Die Farbe des Handschuhs sollte sich dabei deutlich von anderen Farben im Bild unterscheiden. Meist wird ein kräftiges Rot gewählt. Das Tragen eines Handschuhs ist für den Benutzer meist zumutbar und die Erkennung wird dadurch wesentlich erleichtert.

Soll die (Schwerpunkt-)Koordinate des zu detektierenden farbigen Bereichs (also z.B. des Handschuhs) ermittelt werden, so besteht das prinzipielle Vorgehen aus folgenden Schritten:

  • Auswahl des Farbwertes (in geeigneten Farbkanälen)
  • Binarisierung
  • Bestimmung des Schwerpunkts

Da ein Farbbild aus den drei Grundfarben Rot, Grün und Blau (RGB) besteht, ist es zunächst naheliegend, für die Erkennung eines roten Bereichs den roten Farbkanal zu verwenden, da dort für das Objekt eine hohe Intensität vorliegen sollte. In der Praxis zeigt sich allerdings, dass dies nicht den erwünschten Erfolg bringt. Dies ist darin begründet, dass nahezu jede in der natürlichen Umgebung vorkommende Farbe eine Mischfarbe ist, welche signifikante Anteile von Rot, Grün und Blau enthält. Daher werden auch andersfarbige Objekte einen Farbanteil im Rotkanal liefern und damit die Segmentierung erschweren. Insbesondere hat die Farbe Weiß in allen drei Farbkanälen eine hohe Intensität.

Zur Veranschaulichung ist sind nachfolgend die drei Farbkanäle (RGB) eines Bildes dargestellt:

RGB-Bild
Rot-Kanal
Grün-Kanal
Blau-Kanal


Es ist möglich, aber meist sehr mühselig, aus diesen Daten eine Farbseparierung durchzuführen (durch entsprechende Verknüpfungen der Intensitäten in den verschiedenen Farbkanälen).


Als geeigneter erweist sich die Verwendung eines anderen Farbraums. Der HSV-Farbraum verwendet ein Farbmodell, bei dem die Farbe mit Hilfe des Farbtons (englisch hue), der Farbsättigung (saturation) und der Dunkelstufe (value) definiert wird. Ähnliche Definitionen führen zu einem HSL-Farbraum mit der relativen Helligkeit (lightness), einem HSB-Farbraum mit der absoluten Helligkeit (brightness) und einem HSI-Farbraum mit der Lichtintensität (intensity).

Der HSV-Farbraum kann folgendermaßen dargestellt werden:

HSV-farbraum.png


In EyesWeb kann mittels der Funktion „ExtractChannel“ einer der drei Farbkanäle separiert werden (Farbseparation_RGB.eyw). Zu beachten ist, dass die Kanäle des „RGB“-Farbbildes meist in anderer Reihenfolge, nämlich BGR vorliegen, da dies in den verwendeten Funktionen von openCV der Standard ist. Eine Umsortierung in RGB ist mit der im darauffolgenden Patch erwähnten Funktion „ColorModel“ möglich.

Eyw Farbseparation RGB.png

In EyesWeb ist ein Funktion „ColorModel“ zur Umwandlung der Farbmodelle verfügbar. Weiterhin kann mittels „ExtractChannel“ einer der drei Farbkanäle separiert werden (Farbseparation_HSV_display.eyw):

Eyw Farbseparation HSV display.png


Der Patch für Eyesweb XMI 5.2 farbsegmentierung_kanaele_xmi_a.eywx sieht entsprechend aus.


Eywx farbsegmentierung kanaele xmi a.png



Nachfolgend sind die drei Farbkanäle des Farbbildes im HSV-Farbmodell dargestellt:


RGB-Bild
Farbton (hue)
Sättigung (saturation)
Dunkelwert (value)


Beim Farbton ist zu sehen, dass nun jede Farbe in einem anderen Wertebereich (hier codiert durch die Helligkeit) liegt. Damit kann jede Farbe einem entsprechenden Wertebereich zugeordnet werden. Zu beachten ist, dass die Farbe Rot am unteren und am oberen Ende des Wertebereichs zu finden ist, da die Definition des Farbtons einem geschlossenen Farbkreis entspricht (siehe Abbildung des Farbkegels oben). Linear aufgetragen stellt sich der Wertebereich des Farbtons folgendermaßen dar:

HueScale.png


Dies wird auch beim roten Objekt links unten im Bild deutlich, das sowohl aus sehr hellen als auch aus sehr dunklen Werten besteht.

Bei der Farbseparation, also letztlich der Identifizierung eines farbigen Objekts im Bild, ist neben dem Farbwert auch die Sättigung wichtig. Eine kräftige Farbe hat einen hohen Sättigungswert, wie dies auch im mittleren Bild des obigen Beispiels zu sehen ist. Die Farbe Weiß (also der Hintergrund) hat hingegen eine geringe Sättigung.

Zur Segmentierung / Identifizierung eines farbigen Objekts im Bild sind damit folgende Schritte notwendig:

  • Auswahl des der Farbe entsprechenden Wertebereichs (durch Vergleichs-Operationen) im Farbton-Kanal und Kennzeichnung dieser Bildpunkte (durch eine Binarisierung bekommen alle ausgewählten Bildpunkte den Wert „1“)
  • Logische UND-Verknüpfung mit einem hohen Sättigungswert (hier wird ebenfalls durch eine Binarisierung allen entsprechend hohen Sättigungswerten der Wert „1“ zugewiesen).


Die Farbseparierung ist in folgendem EyesWeb-Patch (Farbseparation_HSV.eyw) realisiert:

Eyw Farbseparation HSV.png


Hier wird das RGB-Bild zunächst in HSV konvertiert und dann der Kanal mit dem Farbwert (Hue) und der Kanal mit der Sättigung extrahiert. Für den Farbwert werden zwei Schwellwerte definiert, die den Farbwert eingrenzen. Dies geschieht jeweils durch einen Schieberegler an den ein Block "Constant" angefügt ist, der nur dazu dient, den Datentyp festzulegen (dies ist die Voraussetzung für den Einsatz eines Displays). Mit dem unteren Schwellwert ("größer als") wird eine Binarisierung durchgeführt, bei der allen Bildpunkten mit einem Farbwert größer als der Schwellwert der Wert "1" zugewiesen wird. Der Binarisierung mit dem oberen Schwellwert ("kleiner als") ist eine Invertierung ("NOT") nachgeschaltet, wodurch alle Bildpunkten mit einem Farbwert kleiner als der Schwellwert den Wert "1" zugewiesen bekommen. Durch die nachfolgende "UND"-Verknüpfung dieser beiden Ergebnisse, bekommen nur die Bildpunkte den Wert "1", deren Farbwert zwischen dem unteren und dem oberen Schwellwert liegt. Beim Sättigungswert erfolgt ebenfalls eine Schwellwertoperation, bei der nur die Bildpunkt mit einer entsprechend hohen Sättigung ausgewählt werden, also den Wert "1" bekommen. Durch "UND"-Verknüpfung der beiden Ergebnisse aus dem Farbwert- und dem Sättigungskanal, erhält man als Ergebnis ein Bild in dem die Punkte mit dem ausgewählten Farbwert und gleichzeitig hoher Sättigung dieses Farbwertes markiert sind (d.h. den Wert "1" haben). Zur farblichen Darstellung wird dieses Ergebnis noch mit dem Eingangs-Farb-Bild UND-verknüpft um die ausgewählten Punkte in ihrer Farbe sichtbar zu machen.

Diese Art der Verknüpfung ist für die Detektion der Farbe Rot allerdings nicht geeignet, da hier der Wertebereich für den Farbwert sowohl am unteren Ende als auch am oberen Ende der Skala liegt. Daher wir für diesen Fall der nachfolgende Patch (Farbseparation_HSV_ROT.eyw) verwendet:

Eyw Farbseparattion HSV ROT.png


Dieser EyesWeb-Patch entspricht im Wesentlichen dem vorherigen, nur sind hier die beiden durch Schwellwerte auszuwählenden Bereiche am oberen und unteren Ende der Farbwert-Skala mit "ODER"-verknüpft.


Die Farbwerte auf der hier verwendeten Skala von 0 bis 255 stellen sich wie folgt dar:

HueScale255.png


Bei der Farbsegmentierung zeigen sich dann beispielhaft folgende Ergebnisse. Hier ist links das Eingangsbild zu sehen und rechts alle Bildpunkte, deren (Farb-)Sättigung größer als der Wert 120 ist (dies wird über eine Binarisierung realisiert).

Farbpunkte.jpg Sat bin.jpg


Die Werte für die Sättigung liegen bei den Farbbereichen oberhalb von etwa 120, wodurch bei einer Schwellwertbildung nur noch die Farbpunkte erhalten bleiben, der Hintergrund jedoch verschwindet.


In der nachfolgenden Tabelle sind die Ergebnisse der Farbseparation für verschiedene Bereiche des Farbwertes (hue) dargestellt:


Farbwert (0-255) Punkte im Farbwert-Kanal Ergebnis nach der Verknüpfung mit dem Sättigungskanal
218 - 7 (rot) Farbseparation farbe 218 7 out.jpg Farbseparation farbe 218 7 out farbe.jpg
7 - 15 (orange) Farbseparation farbe 7 15 out.jpg Farbseparation farbe 7 15 out farbe.jpg
30 - 45 (gelb) Farbseparation farbe 30 45 out.jpg Farbseparation farbe 30 45 out farbe.jpg
100 - 125 (grün) Farbseparation farbe 100 125 out.jpg Farbseparation farbe 100 125 out farbe.jpg
145 - 160 (blau) Farbseparation farbe 145 160 out.jpg Farbseparation farbe 145 160 out farbe.jpg


Hier ist zu sehen, dass im bei der Auswahl im Farbwertkanal für die Farben rot und grün auch einige Punkte bei anderen Objekten im Bild bestehen bleiben. Deren Sättigung ist aber nur klein, wodurch diese Punkte bei der Verknüpfung mit dem Sättigungskanal eliminiert werden. In extremer Weise wir dies am Beispiel des blauen Objekts deutlich. Da der Farbwert des Hintergrunds in diesen Bereich fällt, liegen im Farbwertkanal sehr viele Punkte vor. Die Sättigung ist für die Hintergrund-Punkte jedoch sehr klein, was zu deren Auslöschung im Endergebnis führt.

Zur Verdeutlichung sind die ausgewählten Bereiche nachfolgend nochmals an Hand der Farbskala dargestellt:

Farbwert (0-255) Bereich der Farbskala
218 - 7 (rot) Farbskala farbseparation 218 7.jpg
7 - 15 (orange) Farbskala farbseparation 7 15.jpg
30 - 45 (gelb) Farbskala farbseparation 30 45.jpg
100 - 125 (grün) Farbskala farbseparation 100 125.jpg
145 - 160 (blau) Farbskala farbseparation 145 160.jpg


Für die Farb-Separierung sind in EyesWeb auch Funktionsblöcke verfügbar, welche die Anwendung dieses Verfahrens vereinfachen.

Im Funktionsblock „ExtractColor“ kann der Farbwert und die Sättigung sowie jeweils ein „Delta“ festgelegt werden. Der Farbwert ist hier im Bereich -180 bis +180 definiert. Die Sättigung hat den Wertebereich 0...1. Der Block ist kombinierbar mit der Funktion „ClickDisplay“, in welchem zur Laufzeit eine Farbe im Bild (durch Klicken mit der Maus) ausgewählt werden kann. Damit ist neben der Parametrierung über externe Schieberegler auch eine einfache interaktive Einstellung der Farbparameter möglich.


Der Funktionsblock „ExtractColor“ (mit vorgeschaltetem Block „ClickDisplay“) und das Eigenschaftenfenster ist nachfolgend dargestellt:

Eyw ExtractColor Block und Properties.png


Die Anwendung des Blocks in einem EyesWeb-Patch Farbseparation_ExtractColor.eyw ist dann trivial:

Eyw Farbseparation ExtractColor.png


Der Block „ExtractMultColors“ kombiniert intern mehrere „ExtractColor“ Funktionen, die entsprechend parametriert werden können.

Eyw ExtractMultColors Block und Properties.png

Die Anwendung in einem Patch ist dann analog dem zuvor gezeigten Vorgehen.


Der nachfolgende Patch für Eyesweb XMI 5.2 farbsegmentierung_mit_farbauswahl_xmi_a.eywx realisiert eine ähnliche Farbauswahl über ein "Click Display" und eine Erkennung von "Color Blobs".


Eywx farbsegmentierung mit farbauswahl xmi a.png