Mit dem Stereo Vision Algorithmus zur Tiefenkarte

Grundsätzliche Aufgabe des Algorithmus:

Der Algorithmus liest die Daten aus den angegebenen Binär-Dateien (Mono-Format: zwei Dateien, Stereo-Format: eine Datei) ein und verarbeitet diese zu einer XML-Datei. In dieser Datei werden die Tiefeninformationen gespeichert, und können somit als Basis für die Tiefenkartengenerierung verwendet werden.

 

Binär-Dateien und dessen Format:

Die von uns im Labor verwendeten Kameras liefern Daten im Mono-Format. Weiters gibt es allerdings bereits Retina-Kameras, die ein anderes Daten-Format liefern (Stereo).

Im Mono-Format werden jeweils die Daten einer Kamera in ein Binär-File gespeichert. Wird dieses Format im Algorithmus verwendet, müssen immer zwei Dateien angegeben werden. In so einer Datei sind jeweils alle Events einer Kamera für eine bestimmte Zeitspanne gespeichert (genauere Beschreibung der Events und dem Format der Binär-Daten siehe Unterpunkt „Daten-Aufnahme“).

Im Stereo-Format wird nur mehr eine einzige Datei benötigt. Alle Events beider Kameras werden dabei in dieselbe Datei gespeichert.

 

Datenstruktur:

Nachdem alle Daten in unseren Algorithmus (Matlab) eingelesen wurden, müssen diese natürlich optimal abgespeichert werden. Dabei wurde eine komplette Überarbeitung des gesamten Projekts durchgeführt, und eine einheitliche Datenstruktur eingeführt.

In dieser Datenstruktur sind jeweils folgende Daten enthalten (jeweils von einer Kamera, d.h. es ist immer eine Datenstruktur für die links angeordnete und auch für die rechts angeordnete Kamera notwendig):

  • Die X- und Y-Koordinate des Events
  • Die Polarität des Events (255 für einen On-Event, 0 für einen Off-Event)
  • Der Zeitstempel des Events (z.B. bei einer Auflösung von 1 ms beim Mono-Format)

 

XML-Dateien (Tiefenwert-Daten):

Ist der Algorithmus mit seinen Berechnungen fertig, schreibt er die Ergebnisse in eine XML-Datei. Diese enthält dann jeweils folgende Informationen:

  • Am Anfang des Files steht, mit welchem Algorithmus die XML-Datei erstellt wurde
  • Danach sind die einzelnen Punkte bzw. Events in Gruppen unterteilt, welche den gleichen Zeitstempel besitzen, und beinhalten weiters:

o   Zeitstempel, indem das Event aufgetreten sind

o   X- und Y-Koordinate des Events

o   Tiefenwert des Events (horizontaler Pixelverschub der beiden Kameras)

 

Grundsätzlicher Aufbau des Algorithmus:

Nachdem alle Daten eingelesen und in die interne Datenstruktur gespeichert wurden, verwendet der Algorithmus ebendiese Daten, um zum Tiefenwert zu gelangen.

Wenn man nun diese Daten als 2-dimensionales Feld betrachtet, wird im Algorithmus von oben links beginnend immer ein „Fenster“ mit einstellbarer Größe aus den gesamten Daten herausgenommen, und untersucht. Ist in diesem Fenster ein Event, so wird dieser bearbeitet. Ist kein Event im Fenster enthalten, so wird dieses Fenster um die gesamte eigene Länge nach rechts verschoben, und nun das neue Fenster betrachtet. So wird jeweils ein Zeitpunkt nach dem anderen mittels dieser Fenster untersucht.

Wird nun ein Event in einem Fenster gefunden, so wird dieser hergenommen, und im „anderen“ Bild (man betrachtet hier immer die Daten einer Kamera, und vergleicht diese dann mit denen der anderen Kamera) gesucht. Dabei wird in derselben horizontalen Linie nach einem Event nahe der Position des „originalen“ Events gesucht. Das Event, das dem originalen am Nächsten ist, wird genommen.

Dann werden mittels Gewichtungs-Funktion alle Events gewichtet und anschließend ausgewertet. Wichtig ist hierbei, dass nicht nur die Events im aktuellen Zeitstempel betrachtet werden, sondern auch jene von den vorigen Zeitstempeln (Historie). Dieser „Zeitverschub“ wird auch gewichtet, und mittels beider Gewichtungen kann schließlich der Tiefenwert ermittelt werden.

Dieser Tiefenwert entspricht dann dem horizontalen Verschub des Events vom einen Bild zum anderen.

 

 

Java - Gui 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In Matlab ist es möglich, Java-Funktionen aufzurufen. Dies wird hier genützt um eine anschauliche 

Bedienoberfläche zu erhalten und Daten zwischen Matlab und Java-Gui zu transportieren.

 

Parametersettings:

Hier werden Algorithmusspezifische Parameter angezeigt.

 

Parametercontrol:

Hier muss der zu verwendende Algorithmus angegeben werden (dies entspricht dem verwendeten Ordnernamen im Dateipfad)

und das gewünschte Format (stereo/mono).

 

Data Import:

Hier können zu Beginn die Timestamp Daten (Anfang/Ende) des Binärfiles eingelesen werden.

 

Navigation:

Angabe ab welchem Timestamp der Algorithmus beginnen soll und Ende.

Starten/ Stoppen des Algorithmus etc.

 

Merged Picture:

Dies entspricht der "visualisierten Tiefenkarte". 

Je nach aktueller Entfernung des Objektes ändert sich die Farbe (wie rechts beim Farbbalken dargestellt).

 

 

Video:

http://youtu.be/CqQt8qxgZHg