Segmentierung mittels Wärmebildkamera

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Mit einer Wärmebildkamera des Typs FLIR A300 wollte unsere Gruppe Erfahrungen in der Anwendung und der Bildverarbeitung (mittels Eyesweb XMI) machen.

Detektion und Verfolgung eines Bereiches

Unsere erste Idee für den Einsatz einer Wärmebildkamera war die Verfolgung einer Bewegung und eine damit verbundene Steuerung eines Objektes. Als Grundlage haben wir die Thermografiekamera A300 von FLIR und Eyesweb XMI genutzt. Uns hat daran auch sehr interessiert, wie sich eine Wärmebildkamera im Gegensatz zu einer normalen, bekannten Kamera verhält.

Eine Wärmebildkamera liefert ein Intensitätsbild das auf eine Grauwert- oder Farbskala abgebildet wird. Das bedeutet Bereiche höhrer Temperatur, also mit höherer Intensität infraroter Abstrahlung erhalten einen höheren Grau- oder Farbwert. Bereiche niedriger Temperatur einen niedrigeren. Bei dem Gedanken an dieses Prinzip und der Frage, welche Bereiche an einem bekleideten Menschen sich gut tracken lassen, brachte uns rasch zum Gesicht. Wir dachten konkret an Nase oder Augen und machten einige Probebilder. Dabei stellte sich allerdings heraus, dass keine Partie des Gesichts sich verläßlich vom Rest abhebt. An einem Projekttermin war bei einigen von uns die Nase wärmer als der Rest des Gesichts. An dem Folgetermin hat sie sich nicht abgehoben. Das selbe galt in diesem Sinne für die Ohren, Wangen und Augen. Einzig eine Brille läßt sich fast immer super detektieren, da Glas für Wärmestrahlung fast komplett intransparent ist. Eine Ausnahme sind hier eventuell Frontalaufnahmen. Denn Glas spiegelt thermische Strahlung ganz hervorragend. Nach kurzer Überlegung haben wir uns für das Tracking der Einfachheit halber auf das ganze Gesicht festgelegt.

Beim Tracking wird versucht eine Segmentierung des Bildmaterials vorzunehmen. In einfachen Worten ausgedrückt bedeutet das, man versucht die Merkmale die einen interessieren heraus zu filtern und schmeißt den Rest weg. Der Unterschied zwischen dem Tracking mittels Wärmebild- und normaler Kamera erklärt sich grundlegend wie folgt. In einem Bild einer normalen Kamera findet die Segmentierung und Extraktion häufig anhand eines bestimmten Farb- oder Grauwertebereichs und der Erkennung von Konturen statt. Bei der Wärmebildkamera, ist das Prinzip das Selbe. Nur das in diesem Fall der Farbwertebereich die Temperatur beziehungsweise die Strahlungsintensität darstellt.

Natürlich sind die speziellen Eigenschaften der Wärmestrahlung und der Thermografiekamera bei der Aufnahme und dem so entstehenden Bildmaterial zu berücksichtigen.


Eyesweb XMI

Eyesweb_01: Einige Eyesweb XMI Basis-Blöcke
Zum Einstieg in Eyesweb startet die Suche nach Informationen, Tutorials oder Dokumentationsmaterial. Sehr wenig, auf die Anforderungen von Einsteigern zugesschnittenes Material, findet sich im Internet. Hauptsächlich sind dort Feature-Listen oder gleich Quellcode plus dazugehörigen Fachsimpeleien zu entdecken. Was wir an brauchbaren Dokumenten fanden haben wir in eine ZIP-Datei gepackt: Eyesweb_Doku.zip

Eyesweb ermöglicht es auch Menschen, die grundsätzlich keine leidenschaftlichen Programmierer sind, Interaktionsanwendungen zu entwickeln. Als Blockorientiertes System ist allein mit der Maus und den Konfigurationsmenüs der Bausteine schon Beachtliches erreichbar. Für unseren Start in die Verarbeitung von Bewegtbildern haben wir unter anderem die in der Abbildung Eyesweb_01 zu sehenden Blöcke genutzt. Neben den Symbolen steht der jeweilige Einsatzzweck. Innerhalb der Klammern ist der Klassenname notiert. Wenn er in der Toolbar der Eyesweb-Suche eingegeben wird, erhält man den Block als Resultat. Bitte dabei auch eventuelle Leerzeichen mit eingeben.

Für die Bild- und Videoverarbeitung bildet eine Capturing- und eine Display-Möglichkeit die Grundlage. Der FrameGrabber ermöglicht die Einbindung von Standard-Videogeräten, die unter Windows erkannt oder mit einem entsprechenden Treiber zum Laufen gebracht werden. Das DisplayGDI gibt über das Windows Graphics Device Interface Bildmaterial wieder.

Weiterhin finden sich in der Eyesweb Library eine unglaubliche Vielzahl an weiteren Modulen. Filter, mathematische Operatoren, Konverter, ... der Bedarf sollte gedeckt sein. In diesem Belang stießen wir allerdings auf eine Widrigkeit. Eyesweb verfügt über gewisse Datentypen die in den Schnittstellen der Blöcke zum Einsatz kommen. Nun ist zwar in den Beschreibungen der Interfaces nachzulesen welche Datentypen das sind, allerdings gestaltet sich die Suche nach einem Block, der die benötigte, weiterführende Funktionalität bereitstellt und den passenden Schnittstellentyp besitzt mitunter sehr zäh. Wenn sich nach einiger Zeit kein Erfolg bei der Suche einstellt, ist man mit der Frage, ob man das gewünschte Ziel nicht mit einem anderen Block oder aus einer Kombination von anderen Blöcken erreichen kann, gut beraten.

Tipp: Bei einigen Modulen ist eine Auswahl der Datentypen in den Eigenschaften möglich.

Eyesweb_02: Aktivierung zusätzlicher Eingänge zur externen Parametrierung
Ein weiterer interessanter Punkt sind die Eigenschaftsdialoge der Blöcke. Sie sind ähnlich gehalten, wie z.B. die in Microsoft Visual Studio. Einstellungen sind über Text-, DropDown-, Listen- oder Dateiwahlfeldern möglich. Die Checkboxen links neben den einzelnen Eigenschaften sind nicht wie man auf den ersten Blick meinen könnte für die explizite Aktivierung der jeweiligen Option gedacht. Sie erzeugen eine weitere Schnittstelle am Block um Parameter zu verarbeiten. So ist es beispielsweise möglich einen Schwellwert im aktiven Eyesweb-Patch mit einem Schieberegler zu setzen.




Entwicklung #1

Der erste Ansatz für eine Anwendung in Eyesweb mit der Wärmebildkamera war das Tracking eines Gesichtes.

Dabei war es die generelle Idee das Gesicht in einem ersten Verabeitungsschritt zu isolieren. Im Gegensatz zu den Pixelwerten eines gewöhnlichen Grauwertbildes, repräsentieren die Pixelwerte der Wärmebildkamera direkt einer aufgezeichneten Temperatur. Da sich die Temperaturen von Körperoberflächen in den meisten Fällen recht stark von den Umgebungstemperaturen abheben, lassen sich diese Flächen relativ einfach im Bild mittels Binarisierung segmentieren. Dies erfolgt über die Einstellung eines unteren Schwellwertes. Da es in manchen Fällen sein kann, dass sich im Aufnahmebereich andere eventuell noch wärmere Objekte, wie zum Beispiel eine Heizung oder ähnliches, befinden, wurde auch noch die Möglichkeitgegeben einen oberen Schwellwert einzustellen, um auch diese Objekte aus dem Bild auszublenden. Alle Punkte die danach noch übrig bleiben, also effektiv Teil des Gesichts sein sollten, werden in einem Blob zusammengefasst. Aus diesem Blob kann man dann verschieden Werte auslesen, wie in unserem Fall ganz einfach die Koordinaten des Schwerpunktes. Diese Koordinaten werden dann dazu verwendet, einen Punkt im Originalbild einzuzeichnen um eine visuelle Bestätigung zu erhalten. Die Koordinaten könnten aber genauso gut dazu verwendet werden um sie zum Beispiel mittels OSC an andere Anwendungen zu verschicken und dort für interaktive Anwendungen zu verwenden.

Eyesweb XMI binasisierung+baricenter .PNG


Entwicklung #2

Entwicklung1_01: Eyesweb XMI Patch

Dieser Patch beinhaltet zwei Wege. Der untere grüne Bereich ist dem unter Entwicklung #1 beschriebenen Weg sehr ähnlich. In ihm ist allerdings nur ein Schwellwert zur Binarisierung verwendet worden. Zusätzlich zeichnet er ein umgebendes Rechteck.

Download: thermocam_E2.eywx

Ablauf

Da die Entwicklung der Patches überwiegend zu Haus stattfand, wurde eine normale Webcam als Ausgangspunkt benutzt. Deshalb wird im Patch direkt nach der Einspeisung in Eyesweb das Farbbild in ein Graustufenbild gewandelt. Im Anschluss wird das Bild mittels eines Median-Filters weicher gezeichnet. Das soll die Kanten der Region Of Interest glatter werden lassen.

Grüner Bereich

Nun wird das weichgezeichnete Grauwertbild mittels eines Schwellwertes segmentiert. Dieser Wert läßt sich im aktiven Patch mit dem Schieberegler oberhalb des Schwellwertblockes einstellen. Alle Pixel oberhalb der Schwelle werden auf 255 und damit auf weiß, alle anderen auf ß und somit auf schwarz gesetzt. Aus diesem binarisierten Bild versucht der nächste Block - ein BlobExtractor - einen zusammenhängenden Bereich zu extrahieren. Dafür analysiert er die hellen Areale. Mit dem Output des BlobExtractors wird nun über DrawBlob der Bereich direkt gezeichnet. Mit dem Output des DrawBlob-Bausteins läßt sich durch einen BoundingRect-Modul das umgebende Rechteck für diesen Block berechnen und mittels eines "Rectangle2DGenerator" und eines 2D-Zeichen-Moduls auf eine Leinwand bringen. Der untere Zweig nach dem BlobExtractor berechnet den Schwerpunkt des Blobs. Die daraus resultierende Koordinate wird durch einen Ellipse2dGenerator" und ein 2d-Zeichen-Modul auf eine Leinwand gebracht. Durch die Verwendung des realen Kamerabildes als Hintergrundbild des Displays kann man gut erkennen, was als Blob erkannt wurde und wo genau sich der Schwerpunkt befindet. Bei Nutzung des RGB- anstatt des Grauwertbildes als Hintergrund ist eine Darstellung der Koordinate in Farbe möglich.

Gelber Bereich

In diesem Verarbeitungsstrang wird nun nach der Filterung keine explizite Binarisierung vorgenommen. Das weichgezeichnete Grauwertbild ist der direkte Input für den BlobExtractor. Zu den Einstellungsmöglichkeiten des Bausteins gehört nämlich bereits selbst ein Schwellschwertsystem. Da es sich bei dem Eingangsmaterial des Blockes um Grau- und damit quasi um Intensitätswerte handelt, kann darauf sofort eine Schwelle appliziert werden. Auch hier wird mit nur einer Threshold gearbeitet. Da der intensivste Bereich verfolgt werden soll - in diesem Fall durch das weiße Cap repräsentiert - ist das unproblematisch. Eine weitere Schranke um einen bestimmten, nicht extremen Bereich zu erfassen ist mit dem BlobExtractor ebenfalls möglich. Eine voneinander unabhängige Kontrolle der Werte per Slider ist möglich.

Die Daten des erfaßten Blobs werden anschließend erneut für zwei Aktionen verwandt. Einmal wird im oberen Bereich der Schwerpunkt des Blobs errechnet. Die Koordinaten werden von einem speziellen Block aus einem Punkt extrahiert und auf ScalarDisplays ausgegeben. Mit dem Schwerpunkt wird auch hier über einen Elippsen-Generator und ein 2D-Zeichen-Block ein farbiger Punkt auf das RGB-Eingangsbild des Patches gemalt.

Im unteren Strang wird der Blob auf das noch nicht gefilterte Grauwertbild gezeichnet. Vorab werden mit einem "dilate", der morphologischen "Füll"-Operation, die leicht ausgefransten Kanten des Blobs bearbeitet.

Fazit

Entwicklung1_02: Aktiver Eyesweb XMI Patch

Die einzelnen Schritte sind im aktiven Patch gut zu erkennen. Im gelben Bereich das Areal des Blobs, das gut auf die Form des Caps angepaßt ist. Auch der daraus resultierende Schwerpunkt des Blobs deckt sich mit der expliziten vorab-Binarisierung aus dem grünen Pfad. Dort ist gut zu sehen, wie sich das einschließende Rechteck bemerkbar macht. Auf dem mittleren der drei rechten Displays ist erkennbar, dass der Blob vollständig die durch den Schwellwert segmentierte ROI abdeckt.

Durch die BlobExtractor- und Info-Bausteine ist eine einfache Nutzung der Daten einzelner Blobs möglich. Wie hier zu sehen, ist der Abgriff für die Bildung von Koordinaten einfach umzusetzen. Lediglich eine Weitergabe der Werte an eine Schnittstelle nach außen muß noch erfolgen um damit beispielsweise eine Maus oder eine andere Anwendung zu steuern. Leider ist das aus zeitlichen Gründen nicht mehr in den Patch eingeflossen.