20.08.2013 Aufrufe

Lane Detection

Lane Detection

Lane Detection

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Lane</strong> <strong>Detection</strong><br />

Kurzdokumentation<br />

Semesterprojekt im Fach - Graphische Datenverarbeitung im WS05/06<br />

Martin Hattenkofer<br />

Peter Paulus


Inhaltsverzeichnis<br />

1. Abstract ........................................................................................................................................3<br />

2. Benutzeranleitung.........................................................................................................................3<br />

2.1 Ausführen des Programms.....................................................................................................3<br />

2.2 Die Benutzeroberfläche .........................................................................................................4<br />

3. Programmbeschreibung................................................................................................................8<br />

3.1 Allgemeiner Programmablauf ...............................................................................................8<br />

3. 2 Hough-Transformation .........................................................................................................8<br />

3.3 Übersicht der wichtigsten Methoden...................................................................................10<br />

4. Probleme und Verbesserungsvorschläge....................................................................................11


1. Abstract<br />

Fahrerassistenzsysteme stellen einen interessanten Wachstumsmarkt für die Automobilindustrie<br />

dar. Hierbei handelt es sich um Zusatzeinrichtungen im Fahrzeug, die den Fahrer in bestimmten<br />

Fahrsituationen unterstützen sollen, mit dem Ziel, die Sicherheit und den Fahrkomfort zu<br />

erhöhen.<br />

Die Ziele des Programms „<strong>Lane</strong> <strong>Detection</strong>“, welches in der Entwicklungsumgebung Visual<br />

Studio 2003 in der Programmiersprache C# implementiert wurde, sind zum einen die Erkennung<br />

der voraus liegenden Fahrspurmarkierungen, um den Fahrer beim Verlassen der Fahrspur (z.B.<br />

durch Sekundenschlaf hervorgerufen) zu warnen und zum anderen die Überwachung des<br />

unmittelbar vorausfahrenden Verkehrs in Abhängigkeit des Fahrbahnverlaufs, wobei der Fahrer<br />

auf eventuell vorausfahrende Fahrzeuge hingewiesen werden soll.<br />

Als Bildmaterial standen Filmsequenzen von typischen Fahrsituationen zur Verfügung. Aus<br />

diesen wurden die einzelnen Frames des Films als Bitmaps extrahiert. Die Bilder der Bildsequenz<br />

sind in aufsteigender Folge durchnummeriert und dienen als Eingabe für das Programm „<strong>Lane</strong><br />

<strong>Detection</strong>“.<br />

Für die Bildvorverarbeitung wurden Methoden aus den Toolboxen Blob, Edge, Filter und<br />

Morpheus der Bildverarbeitungs-Software Common Vision Blox der Firma Stemmer AG<br />

verwendet.<br />

2. Benutzeranleitung<br />

2.1 Ausführen des Programms<br />

Das Programm liegt als ausführbare exe-Datei vor. Es werden keine Aufrufparameter benötigt.<br />

Der Quellcode liegt als C# Projekt vor.


2.2 Die Benutzeroberfläche<br />

Die Benutzeroberfläche besteht aus:<br />

1. Dem Hauptbildbereich, der den Original Frame mit eingezeichneten<br />

Fahrbahnmarkierungen anzeigt, nachdem die Verarbeitung des einzelnen Bildes<br />

abgeschlossen ist<br />

2. Einem Bildbereich zur Anzeige des vorverarbeiteten Bildes im Binärformat, mit zwei<br />

darüber gelegenen Schiebereglern, mit deren Hilfe man den oberen und unteren Threshold<br />

für die Binarisierung einstellen kann. So kann eine Optimierung der Bildvorverarbeitung<br />

erzielt werden<br />

3. Einem Bildbereich zur Anzeige des Bereichs, in dem ein vorausfahrendes Fahrzeug in<br />

unmittelbarer Nähe erkannt werden soll<br />

4. Zwei Bereichen, in denen Hinweise „ Fahrzeug kreuzt bzw. verlässt die Fahrbahn“ und<br />

„Fahrzeug befindet sich in Front“ angezeigt werden sollen<br />

5. Einem Schieberegler zur Navigation in der Bildsequenz. Dies ermöglicht das gezielte<br />

Auswählen einer beliebigen Stelle in der Bildfolge, ab der die Bearbeitung vorgesetzt<br />

bzw. gestartet werden soll. Die aktuelle Position in der Bildsequenz, sowie die<br />

Gesamtzahl der Bilder in der Sequenz werden rechts neben dem Schieberegler angezeigt<br />

6. Zwei Buttons, zum Wählen eines beliebigen Ordners, der die Bildsequenz enthält, bzw.<br />

zum Starten der Abarbeitung der einzelnen Frames der Bildsequenz<br />

6) 5) 1) 4) 3)<br />

2)


Um die zu bearbeitende Bildsequenz auszuwählen, muss der Button „Load Sequence“ angeklickt<br />

werden, worauf folgender Dialog erscheint. Nun muss der Pfad zur gewünschten Bildfolge<br />

ausgewählt werden.<br />

Anschliessend wird der erste Frame der Bildsequenz geladen und ausgewertet. Die erkannten<br />

Fahrbahnmarkierungen werden farbig eingezeichnet. Die Fahrbahnmarkierungen werden in 2<br />

Bereichen erkannt. Zum einen im Nahbereich und zum anderen im Fernbereich. Dies ermöglicht<br />

ein genaueres Erkennen von Kurven.<br />

Trennung von Nah-<br />

und Fernbereich


Bei einem Klick auf den Button „Play“ wird die sukzessive Verarbeitung der Bildsequenz<br />

gestartet.<br />

Kreuzt das Fahrzeug eine Fahrspur, bzw. wird eine Fahrspur überfahren, ertönt ein akustisches<br />

Warnsignal und das Hinweisschild „crossing lane“ wird rechts neben dem Hauptbildbereich<br />

angezeigt. Diese Situation tritt sowohl bei einem Fahrspurwechsel, als auch bei einem<br />

beginnenden Verlassen der Fahrbahn, z.B. bei Sekundenschlaf auf.<br />

Auch wird nur noch die gekreuzte Fahrspur farbig dargestellt.


In Abhängigkeit des erkannten Strassenverlaufs im Fernbereich wird der zu überwachende<br />

Bereich in Front des Fahrzeugs gewählt. Es soll erkannt werden, ob sich in diesem Bereich ein<br />

vorausfahrendes Fahrzeug befindet. Der vorverarbeitete Bildbereich wird unten rechts im<br />

Programmfenster angezeigt. Befindet sich ein Fahrzeug in diesem Bereich, wird der „Fahrer“<br />

durch das Hinweisschild „car in front“ rechts neben dem Hauptbildbereich gewarnt.<br />

Beim kreuzen einer Fahrspur, also wenn sich das Fahrzeug nicht in einer definierten Fahrspur<br />

befindet, ist die Erkennung von vorausfahrenden Fahrzeugen deaktiviert.


3. Programmbeschreibung<br />

3.1 Allgemeiner Programmablauf<br />

Auf die Bildfolge werden folgende Verfahren angewandet. Das Vorgehen bei der Hough-<br />

Transformation, welche die Schlüsselfunktionalität des Programms realisiert, wird im Anschluss<br />

näher erläutert.<br />

- Bild laden<br />

- Tiefpassfilter (Gaußfilter mit 3x3-Maske)<br />

- Kantenfilter (Laplacefilter mit 3x3-Maske)<br />

Vor dem Binarisieren wird eine region of interest festgelegt. Alle folgenden Aktionen werden<br />

dann lediglich auf diese ROI angewendet.<br />

- Binarisieren mit gewähltem Thresholdbereich<br />

- Thinning<br />

Nun ist die Bildvorverarbeitung abgeschlossen und das Erkennen von Fahrbahnlinien mit Hilfe<br />

der Hough Transformation folgt getrennt für die zwei Bereiche Nah und Fern.<br />

- Hough-Transformation<br />

- Geradenzeichnung<br />

Die Signalisierung, ob die Fahrspur verlassen, bzw. gekreuzt wird, erfolgt über Events.<br />

Die zweite Funktionalität der Software, die Erkennung von vorausfahrenden Fahrzeugen wird im<br />

Anschluss an die Fahrspurerkennung ausgeführt.<br />

Hier wird in Abhängigkeit vom während der Fahrspurerkennung ermittelten Fahrbahnverlauf im<br />

Fernbereich eine neue ROI definiert. Dieser Bereich wird nun einer Bildvorverarbeitung mit den<br />

folgenden Filtern unterzogen:<br />

- Tiefpassfilter (Gaußfilter mit 3x3-Maske)<br />

- Kantenfilter (Laplacefilter mit 3x3-Maske)<br />

Als Kriterium, ob sich ein Fahrzeug in Front in derselben Fahrspur befindet, dient die Varianz der<br />

Pixelwerte in der ROI. Wird ein bestimmter Schwellwert überschritten, erfolgt die<br />

Benachrichtigung über ein Event.<br />

3. 2 Hough-Transformation<br />

Für die Erkennung der Linien im Bild wurde Hough-Transformation herangezogen. Das Prinzip<br />

der Hough-Transformation ist es, durch jeden weissen Punkt der binarisierten und skelettierten


ROI ein Geradenbüschel zu legen und anschließend nach den Geraden zu suchen, auf denen die<br />

meisten Punkte liegen.<br />

Die Bildpunkte eines Frames können mit karthesischen Koordinaten (x-y-Koordinaten)<br />

angesprochen werden. P(30, 40) ist beispielsweise das Pixel mit dem x-Wert 30 und dem y-Wert<br />

40.<br />

Unter einer Geraden versteht man im<br />

Sinne des Hough-Algorithmus eine Menge von<br />

kollinearen Punkten.<br />

Im karthesischen Koordinatensystem wird eine Gerade normalerweise durch ihre Steigung m und<br />

den y-Achsenabschnitt t beschrieben:<br />

y= m x t;<br />

Eine andere Darstellung ermöglicht die sogenannte<br />

Hesse-Normalform<br />

n x− a = 0;<br />

Dabei ist a der Haltepunkt der Geraden und n die Normale mit n = 1 .<br />

Aus n = 1 folgt:<br />

n= cos<br />

sin<br />

Dann gilt:<br />

n x− a = cos<br />

sin<br />

=><br />

= x cos y sin<br />

x<br />

y −<br />

cos<br />

sin<br />

= x cos y sin − = 0<br />

= wird durch den Winkel zwischen der positiven x-Achse und n gebildet<br />

= Abstand zwischen dem Ursprung (Punkt (0, 0)) und der Gerade<br />

Damit drückt die Hesse'sche Normalform die Gerade durch ihren senkrechten Abstand zum<br />

Ursprung und den Winkel zwischen der Normalen n und der x-Achse aus.<br />

Für jeden Punkt P(x, y) wird nun ein Geradenbüschel gelegt und der Abstand zum Ursprung<br />

berechnet.<br />

Die entsprechenden Kombinationen ( , ) bilden die neuen Koordinaten im Hough-Raum<br />

(Hough-Akkumulator Matrix), in dem die Koordinatenwerte die Häufigkeiten des Auftretens der<br />

jeweiligen Geraden darstellen.<br />

Eine Koordinate (ein Punkt) ( , ) im Hough-Raum stellt also eine Geradengleichung in der<br />

Hesse'schen Normalform dar.


Um nun Fahrbahnmarkierungen detektieren zu können, sucht man in einem bestimmten, vorher<br />

definierten Bereich der Hough-Akkumulator Matrix nach einem maximalen Wert. Dies entspricht<br />

dann der durch die meisten Punkte gestützten Gerade in diesem Bereich, oder anders<br />

ausgedrückt: auf dieser Gerade liegen die meisten Pixel im Bild.<br />

3.3 Übersicht der wichtigsten Methoden<br />

playSequence();<br />

Steuerung der Bearbeitung der einzelnen Frames der Bildfolge.<br />

detect<strong>Lane</strong>();<br />

Bildvorverarbeitung der eingelesenen Frames der Bildfolge. (Tiefpass-Filter, Kanten-Filter,<br />

Binarisierung und Skelettierung) Anschliessend aufruf der Hough-Transformation<br />

binarizeImage();<br />

Binarisieren des Bildes anhand des eingestellten oberen und unteren Thresholds.<br />

thinning();<br />

Skelettierung des binarisierten Bildes.<br />

hough();<br />

Aufbau der Akkumulator Matrix. Ermittlung der Geraden für linke und rechte<br />

Fahrspurbegrenzung, bzw. Fahrspurtrennlinie im Nah- und Fernbereich.<br />

drawLine();<br />

Einzeichnen der detektierten Geraden für den Nah- und Fernbereich in das Originalbild.<br />

detectVehicleInFront();<br />

Erkennung von vorausfahrenden Fahrzeugen.<br />

Festlegen des zu untersuchenden Bereichs vor dem Fahrzeug in Abhängigkeit der gefundenen<br />

Geraden im Fernbereich. Ermittlung der Varianz der Bildpunkte in diesem Bereich und vergleich<br />

mit einem festgelegten Schwellwert.


4. Probleme und Verbesserungsvorschläge<br />

• Laufzeit: Trotz Einschränkung und Zuschnitt der ROI bei der Linienerkennung liegt die<br />

Zeit zur Bearbeitung eines Frames je nach eingesetzter Rechnerleistung bei ca 3-4<br />

Sekunden.<br />

• Erkennung der Linien bei mangelnden Fahrspurmarkierungen<br />

• Erkennung der Linien in Kurven mit engem Radius<br />

Verbesserungsvorschläge:<br />

• Derzeit werden die Geraden des Geradenbüschels in der Auflösung von einem Grad<br />

berechnet. Wird diese Auflösung erniedrigt, werden zwar die Werte in der Akkumulator<br />

Matrix kleiner und somit das Auffinden der Geraden schwieriger, die Laufzeit pro Frame<br />

würde sich dann aber verkürzen.<br />

• Die Auflösung der Kamerabilder ist mit 752x404 Pixeln relativ gross. Eine Reduktion der<br />

Auflösung würde in einem Laufzeitvorteil pro Frame resultieren.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!