Entfernungen effektiv erkennen

Disparitäts-Bildsegmentierung für Fahrerassistenzsysteme

20. März 2019, 11:00 Uhr | Von Viktor Mukha und Inon Sharony
CCL-Algorithmen können auch Grauskalen-Bilder segmentieren und zielen dabei auf stereoskopische Dispartitätsbilder ab
CCL-Algorithmen können auch Grauskalen-Bilder segmentieren und zielen dabei auf stereoskopische Dispartitätsbilder ab.
© Erica Smit | shutterstock

CCL-Algorithmen, wie sie bei binären Bildern genutzt werden, können auch Grauskalen-Bilder segmentieren. Durch Anpassung des Region-Growing- und Merging-Konzepts zielen sie dabei hauptsächlich auf stereoskopische Disparitätsbilder ab, in denen näher gelegene Objekte eine größere Relevanz haben.

Verschiedene Computer-Vision-Kontexte machen es erforderlich, bei einem Bild eine »Blob Extraction« oder Bildsegmentierung vorzunehmen. Das Bild kann dabei binär sein, so dass jeder Pixel entweder schwarz oder weiß ist. In Fahrerassistenzsystemen ist in der Regel jegliche Form von Sensorfusion erforderlich, wobei beispielsweise Wärmebildsensoren und stereoskopische Kameras zum Einsatz kommen. Beide Sensortypen liefern dabei »Falschfarben«-Grauskalenbilder, in denen der Pixelwert die Temperatur beziehungsweise die Parallaxe (Disparität) wiedergibt. Je höher der Disparitätswert, umso näher befindet sich das betreffende Objekt an der Kamera. Ein Objekt, das sich in unendlicher Entfernung von der Kamera befindet, hat einen Disparitätswert von »null«. Im Zusammenhang mit Fahrassistenzsystemen ermöglicht die Disparitäts-Bildsegmentierung die Detektion von Objekten im Fahrweg des Fahrzeugs, wobei die näher gelegenen Objekte von größerer Bedeutung sind (Bild 1).

Anbieter zum Thema

zu Matchmaker+
Das Fahrerassistenzsystem erkennt drei Objekte im Fahrweg
Bild 1. Das Fahrerassistenzsystem erkennt drei Objekte im Fahrweg.
© L4B

Auch bei den Wärmebildern gilt das Interesse den Objekten im Vordergrund. Hier kann jedoch mehr Domänenwissen eingebracht werden, um einen bestimmten Teil des Temperaturspektrums zu begrenzen (im Gegensatz dazu sind die relevanten Disparitätswerte nicht im Voraus bekannt).

Disparitätsbild-Segmentierung

Die Aufgabe der Bildsegmentierung besteht darin, aus einem vorverarbeiteten Disparitätsbild Blobs zu extrahieren. Jedes Blob wird mit einem Begrenzungsrahmen (Rechteck) beschrieben, der das Blob eng umfasst. Das Modul bestimmt zudem den maximalen Disparitätswert im Begrenzungsrahmen und weist ihn der Objektbeschreibung »struct« zu.

Es ist eine große Herausforderung, die »Dicke« eines Objekts aus einer Tiefenkarte abzuschätzen, die aus Stereobildern abgeleitet wurde. Besser ist es daher, sich auf die Distanz zu fokussieren – die geringste Distanz zum Objekt. Wenn sich der Maximalwert als zu grobe Schätzung erweist, sollten Ausreißer verworfen werden, indem beispielsweise eine Medianfilterung durchgeführt wird. Da das lediglich dazu dient, den wichtigsten Wert zu definieren, kann auf das Generieren einer vollständigen Matrix mit Disparitätswerten für das gesamte Rechteck verzichtet werden. Grundsätzlich handelt es sich hier um die direkte Abschätzung der Entfernung zum Objekt. Der Algorithmus sortiert die Ergebnisse nach absteigenden Disparitätswerten, da das Interesse vorrangig an den näher gelegenen Objekten besteht.

Vorausgegangene Entwicklungen

Connected Component Labeling (CCL) ist eine Bildsegmentierungs-Methode mit vielen effizienten Implementierungen. Die überwiegende Mehrzahl der Bildsegmentierungs-Algorithmen wie beispielsweise CCL [1] funktioniert jedoch ausschließlich mit Binärbildern, während es sich bei Disparitätsbildern um Grauskalen-Bilder handelt.
In einer Forschungsarbeit von Yapa & Harada [2] konnte jedoch der Nachweis erbracht werden, dass sich verschiedene CCL-Algorithmen auch auf Grauskalen-Bilder anwenden lassen. Allerdings ist die Implementierung nicht öffentlich zugänglich und die betreffenden Gedankengänge wurden mit Matlab umgesetzt und nicht hinreichend für eingebettete Systeme evaluiert. Daher lag der Fokus der Weiterentwicklung auf der Herleitung eines besser portierbaren Produkts.

Ansätze

Die erste Versuche basierten auf  der Verwendung der Klasse »cv::SimpleBlobDetector«. Hierbei handelt es sich um den einzigen Blob-Extraktionsalgorithmus in OpenCV, der anstatt mit Binärbildern auch mit Grauskalen-Bildern funktioniert. Er verwendet mehrere Schwellenwerte zum Generieren von Binärbildern und wendet anschließend den »cv::findContours()«-Algorithmus auf die Binärbilder an. »cv::findContours()« wiederum nutzt einen Border-Following-Algorithmus von Suzuki und Abe [3].

Gegenüberstellung von Disparitätsbild (links) und negiertem Bild (rechts)
Bild 2. Gegenüberstellung von Disparitätsbild (links) und negiertem Bild (rechts).
© L4B

Die Ergebnisse, die sich bei der direkten Anwendung von »cv::SimpleBlobDetector« auf die als Industriestandard etablierten Tsukuba Ground Truth Disparity Images [4] ergaben, waren allerdings nicht zufriedenstellend. Nachfolgend sind die Resultate für Parameter dargestellt, mit denen sich alle gefundenen Keypoints zeigen lassen. Bild 2 zeigt auf der linken Seite das ursprüngliche Disparitätsbild, rechts das negierte Bild (der Algorithmus sucht grundsätzlich nach dunklen Kreisen in einem hellen Bild).

Durch Anpassung der Parameter wurden lediglich einige der Keypoints ausgefiltert, während keine Hilfestellung zum Auffinden weiterer Keypoints geleistet wurde. Daher wurde der eigene Multiple-Threshold-Algorithmus auf Basis der existierenden CCL-Implementierungen aus der OpenCV-Bibliothek angewendet.

Lösungskonzept

Hinter dem Algorithmus steht ein einfacher Grundgedanke: Ein binarisierender Schwellenwert führt den CCL-Algorithmus aus, extrahiert Objekte und wiederholt den Vorgang mit einem niedrigeren Schwellenwert – bis die Objekte zu verschmelzen beginnen und keine weiteren Objekte erkannt werden. Das Histogramm des Grauskalenbilds [5] bleibt dabei unberücksichtigt, da der Fokus auf den nächstgelegenen Objekten liegt, nicht am Verlauf des globalen Histogramms.

Adaptiver, nicht-binärer CCL-Algorithmus

  • Bestimmung des Disparitätsbereichs im ursprünglichen Disparitätsbild mithilfe von »cv::minMaxLoc« und Verwendung von »thresholdStepSize« (in Prozent) als Schwellenwert-Schrittweite.
  • Initialisierung eines leeren »storedObjects«-Vektors.
  • Anwendung eines binären Schwellenwerts mit »cv::threshold«, um ein binäres Bild für den CCL-Algorithmus zu erhalten.
  • Ausführung des CCL-Algorithmus mit dem Binärbild.
  • Aktualisierung des Vektors der gespeicherten Objekte mit den neu erkannten Objekten anhand folgender Kriterien (in nachfolgender Reihenfolge):

– Verwerfen des neuen Objekts, wenn es sich nahezu vollständig im Begrenzungsrahmen eines bereits gespeicherten Objekts befindet.
– Hinzufügen des neuen Objekts, wenn es keines der bereits gespeicherten Objekte berührt.
– Wenn das neue Objekt die Mittelpunkte von mehr als einem bereits gespeicherten Objekt enthält, so bedeutet das, dass zwei gespeicherte Objekte verschmolzen sind. Somit ist das neue Objekt zu verwerfen.
– Befindet sich ein altes Objekt nahezu vollständig in einem neuen Objekt und befindet sich der Mittelpunkt des gespeicherten Objekts ebenfalls darin, sind der Begrenzungsrahmen und der Mittelpunkt des gespeicherten Objekts durch jene des neuen Objekts zu aktualisieren.


  1. Disparitäts-Bildsegmentierung für Fahrerassistenzsysteme
  2. Implementierung

Das könnte Sie auch interessieren