Lane Detection
Lane Detection
Lane Detection
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.