Draufsichterstellung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
==== Transformation in die Vogelperspektive ====
'''Autor:''' Luca Di-Lillo<br/>
[[Datei: ROI bestimmung Draufsixht.jpg|mini|x230px|right|Bestimmung der region of interest]]
Um die Linien optimal erkennen zu können, wurde eine Draufsicht auf die Straße erstellt. Für die Erstellung der Draufsicht OpenCV verwendet. Zuerst musste ausgewählt werden, aus welchem Bereich des Bildes eine Draufsicht erzeugt werden sollte, dazu wurde das Auto in einem Abstand von 200 mm vor das Schachbrettmuster in dem Fahrzeuglabor gestellt (siehe Abbildung "Bestimmung der region of interest") und mit der kalibrierten Kamera ein Bild von dem Schachbrett aufgenommen (siehe Abbildung "Bestimmung des zu transformierenden Bereichs"). Dann wurden vier Punkte in die Ecken der Rechtecke gezeichnet, aus denen sich ein großes Rechteck, dass den Bereich der Straße abbilden soll, ergibt. Die Pixelkoordinaten der region of interest (ROI) wurden gespeichert.
Diese vier Punkte werden dann in einer Matrix, bestehend aus den x- und y-Koordinaten aller vier Punkte, gespeichert, mit Hilfe der OpenCV Funktion
<code><source lang=cpp>
getPerspectiveTransform(const Point2f src[], const Point2f dst[])
</source>  </code>
werden die gewählten Punkte, als neue Grenzwerte des Bildes definiert (siehe Abbildung "Transformierung der Koordinaten").
In der Abbildung ist gut zu erkennen, dass besonders das Bild im hinteren Bereich sehr gestreckt werden würde, deshalb interpoliert OpenCV an dieser Stelle, da das Ausgangs und Eingangsbild die selbe Größe haben. Ein weiterer Nachteil dieser Funktion ist, dass der Bereich außerhalb des blauen Rechtecks verloren geht und für weitere Bearbeitung in der Draufsicht nicht mehr genutzt werden kann, da allerdings die primäre Aufgabe der Kamera die Spur und die Stopplinien erkennen ist, ist es nicht von großer Bedeutung, dass große Teile des Bildes verloren gehen, solange die Spur in dem Bild zu erkennen ist.
Die aktuelle Einstellung der Perspektiventransformation ist relativ einfach gehalten. Da die Eckpunkte des Schachbrettes per Hand mit einem Bildverarbeitungsprogramm erstellt wurden, sind die Werte ungenau. In Zukunft kann die Einstellung der Werte so realisiert werden, dass das Fahrzeug auf einen definierten Abstand zu einem Rechteck mit den Maßen der Straße gestellt wird, dieses Rechteck sollte im Kontrast zu der schwarzen Oberfläche stehen, sodass die Eckpunkt mit einer Kantenerkennung automatisch bestimmt werden können (siehe Abbildung "Konzept der Automatischen Kamerakalibierung"). Dadurch ist es möglich bei geänderter Kameraposition, die Werte schnell neu zu bestimmen.
[[Datei: Bestimmung_des_Rechtecks.png|mini|x230px|left|Bestimmung des zu transformierenden Bereichs]]
<div class="tleft" style="clear:none">[[Datei: Transformierung der Koordinaten.png|thumb|x230px|right|Transformierung der Koordinaten]]</div>
[[Datei: Kalibrierung des autos Draufsicht.png|mini|x230px|zentriert|Konzept der Automatischen Kamerakalibierung]]
Danach wird das Originalbild in eine Draufsicht transformiert, dazu wird die folgende Funktion verwendet.
<code><source lang=cpp>
warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
</source>  </code>
* scr ist das Originalbild
* dst ist die neu erstellte Draufsicht
* M ist die Koordinatentransformation, die mit getPerspectiveTransform erstellt wurde
* dsize bestimmt die Größe des Ausgabebildes
* flags bestimmt die Interpolationsmethode in diesem Fall Linear
* borderMode ist die Pixel Extrapolationsmethode
* borderValue wird bei der Extrapolationsmethode BORDER_CONSTANT gewählt und ist per default = 0
Nachdem diese Funktion ausgeführt wurde, kann man jetzt die Draufsicht sehen. In dem Beispiel (siehe Abbildung "Kamerabild und Draufsicht") wurde die Straße mit einem Schachbrett aufgenommen. In dem linken Bereich ist die normale Kameraperspektive mit einem blauen Rechteck, das den Bereich der Draufsicht darstellen soll, angezeigt. In dem rechten Bereich des Bildes ist die Draufsicht zu sehen, man kann gut erkennen, dass die Fahrbahnmarkierungen parallel zueinander stehen, die Rechtecke auf dem Schachbrettmuster alle die gleiche Größe haben und ebenfalls parallel zueinander sind. Im weiteren Verlauf, muss die Spurerkennung auf die Draufsicht angepasst werden, dazu muss diese Projekt in die [[OSE - Objekt - und Spurerkennung]] implementiert werden. Des Weiteren muss die Transformierung des Bildes noch auf dem Fahrzeug getestet werden, um die Rechenleistung zu minimieren, soll das Bild in ein Binärbild transformiert werden, da auf der Rundstrecke die Farben weiß für die Fahrbahnmarkierungen und schwarz für die Straße unterschieden werden müssen.
[[Datei: Schachbrett auf transformierten Bild.PNG|thumb|1000px|zentriert|Kamerabild und Draufsicht]]
=== Bestimmung des Fahrzeugfesten-Koordinatensystems ===
=== Bestimmung des Fahrzeugfesten-Koordinatensystems ===
'''Autor:''' Tim Bexten<br/>
'''Autor:''' Tim Bexten<br/>

Version vom 7. Februar 2020, 13:21 Uhr

Transformation in die Vogelperspektive

Autor: Luca Di-Lillo

Bestimmung der region of interest

Um die Linien optimal erkennen zu können, wurde eine Draufsicht auf die Straße erstellt. Für die Erstellung der Draufsicht OpenCV verwendet. Zuerst musste ausgewählt werden, aus welchem Bereich des Bildes eine Draufsicht erzeugt werden sollte, dazu wurde das Auto in einem Abstand von 200 mm vor das Schachbrettmuster in dem Fahrzeuglabor gestellt (siehe Abbildung "Bestimmung der region of interest") und mit der kalibrierten Kamera ein Bild von dem Schachbrett aufgenommen (siehe Abbildung "Bestimmung des zu transformierenden Bereichs"). Dann wurden vier Punkte in die Ecken der Rechtecke gezeichnet, aus denen sich ein großes Rechteck, dass den Bereich der Straße abbilden soll, ergibt. Die Pixelkoordinaten der region of interest (ROI) wurden gespeichert. Diese vier Punkte werden dann in einer Matrix, bestehend aus den x- und y-Koordinaten aller vier Punkte, gespeichert, mit Hilfe der OpenCV Funktion

getPerspectiveTransform(const Point2f src[], const Point2f dst[])

werden die gewählten Punkte, als neue Grenzwerte des Bildes definiert (siehe Abbildung "Transformierung der Koordinaten"). In der Abbildung ist gut zu erkennen, dass besonders das Bild im hinteren Bereich sehr gestreckt werden würde, deshalb interpoliert OpenCV an dieser Stelle, da das Ausgangs und Eingangsbild die selbe Größe haben. Ein weiterer Nachteil dieser Funktion ist, dass der Bereich außerhalb des blauen Rechtecks verloren geht und für weitere Bearbeitung in der Draufsicht nicht mehr genutzt werden kann, da allerdings die primäre Aufgabe der Kamera die Spur und die Stopplinien erkennen ist, ist es nicht von großer Bedeutung, dass große Teile des Bildes verloren gehen, solange die Spur in dem Bild zu erkennen ist.

Die aktuelle Einstellung der Perspektiventransformation ist relativ einfach gehalten. Da die Eckpunkte des Schachbrettes per Hand mit einem Bildverarbeitungsprogramm erstellt wurden, sind die Werte ungenau. In Zukunft kann die Einstellung der Werte so realisiert werden, dass das Fahrzeug auf einen definierten Abstand zu einem Rechteck mit den Maßen der Straße gestellt wird, dieses Rechteck sollte im Kontrast zu der schwarzen Oberfläche stehen, sodass die Eckpunkt mit einer Kantenerkennung automatisch bestimmt werden können (siehe Abbildung "Konzept der Automatischen Kamerakalibierung"). Dadurch ist es möglich bei geänderter Kameraposition, die Werte schnell neu zu bestimmen.

Bestimmung des zu transformierenden Bereichs
Transformierung der Koordinaten
Konzept der Automatischen Kamerakalibierung


Danach wird das Originalbild in eine Draufsicht transformiert, dazu wird die folgende Funktion verwendet.

warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

  • scr ist das Originalbild
  • dst ist die neu erstellte Draufsicht
  • M ist die Koordinatentransformation, die mit getPerspectiveTransform erstellt wurde
  • dsize bestimmt die Größe des Ausgabebildes
  • flags bestimmt die Interpolationsmethode in diesem Fall Linear
  • borderMode ist die Pixel Extrapolationsmethode
  • borderValue wird bei der Extrapolationsmethode BORDER_CONSTANT gewählt und ist per default = 0

Nachdem diese Funktion ausgeführt wurde, kann man jetzt die Draufsicht sehen. In dem Beispiel (siehe Abbildung "Kamerabild und Draufsicht") wurde die Straße mit einem Schachbrett aufgenommen. In dem linken Bereich ist die normale Kameraperspektive mit einem blauen Rechteck, das den Bereich der Draufsicht darstellen soll, angezeigt. In dem rechten Bereich des Bildes ist die Draufsicht zu sehen, man kann gut erkennen, dass die Fahrbahnmarkierungen parallel zueinander stehen, die Rechtecke auf dem Schachbrettmuster alle die gleiche Größe haben und ebenfalls parallel zueinander sind. Im weiteren Verlauf, muss die Spurerkennung auf die Draufsicht angepasst werden, dazu muss diese Projekt in die OSE - Objekt - und Spurerkennung implementiert werden. Des Weiteren muss die Transformierung des Bildes noch auf dem Fahrzeug getestet werden, um die Rechenleistung zu minimieren, soll das Bild in ein Binärbild transformiert werden, da auf der Rundstrecke die Farben weiß für die Fahrbahnmarkierungen und schwarz für die Straße unterschieden werden müssen.

Kamerabild und Draufsicht

Bestimmung des Fahrzeugfesten-Koordinatensystems

Autor: Tim Bexten
Das Koordiantensystem für das Fahrzeug wurde vorgegeben durch das Schnittstellendokument. Es soll den Ursprung in der Mitte des Stoßfängers des Fahrzeugs haben. Die X-Achse soll in richtung der Hauptfahrtrichtung liegen und die Y-Achse soll orthogonal zur Fahrtrichtung und parallel zum Boden verlaufen. Der positive Abschnitt der Y-Achse befindet sich auf der linken Seite des Fahrzeuges, in Fahrtrichtung betrachtet.
Mit Hilfe dieser Vorgaben und dem festgelegten quadratischen Bereich, der vor dem Fahrzeug als Draufsicht beobachtet wird, können nun Rückschlüsse auf die realen Abstände vor dem Fahrzeug gezogen werden. Alle Punkte die erkannt werden können, sind innerhalb des weiß markierten Beieichs in Abbindung "Konzept der Automatischen Kamerakalibierung als Koordinatensystem" vorhanden.

Sichtbereich des Kameratestfahrzeugs

Konzept der Automatischen Kamerakalibierung als Koordinatensystem

Der Sichtbereich auf der X-Achse beginnt, wie in Kapitel "Transformation in Vogelperspektive" beschrieben wurde, ab einem Abstand von 200 mm vor dem Fahrzeug. Die Breite auf der Y-Achse wurde anhand Anzahl der Schachbrettfelder und deren Breite bestimmt und auf 496,5 mm festgelegt. Mit Hilfe des selben Verfahrens wurde die Sichttiefe entlang der X-Achse ebenfalls auf einen Bereich von 1489,5 mm festgelegt. Daraus folgt, dass das Kamerafahrzeug in einem Bereich von [x = 200 mm bis 1689,5 mm und y = -248.25 mm bis 248.25 mm] das Straßenbild in Draufsicht erfassen kann. Somit ist ein körperfestes Koordinatensystem bestimmt, in dem erkannt Fahrspuren körperfest zum Fahrzeug mit einem definierten Abstand beschrieben werden können.
Das Kamerabild enthält in X-Richtung des Fahrzeug 478 Pixel und in Y-Richtung 752 Pixel. Die Umrechnung von Pixelkoordinaten in Fahrzeugkoordinaten findet über eine linear Transformation statt. Die Formel für die Umrechnungen sind folgende:





Die daraus ermittelten Werte wurden getestet und im Testdokument "OSE_001_U_Pos_Draufsicht" dokumentiert und abgelegt.

Sichtbereich des Carolo-Cup-Fahrzeugs

Draufsichterstellung beim Carolo-Cup Fahrzeug

Die Kalibrierung des Kamerafahrzeugs wurde nur für seperate Testzwecke vorgenommen. Um die KOS-Transformation auf dem vollständigen Carolo-Cup-Fahrzeug zu verwenden muss die Kalibrierung verändert werden, da auf dem Fahrzeug die Kamera an einer anderen Position verbaut ist.
Der Ablauf ist dennnoch der selbe, nur die Parameter des Sichtbereiches werden verändert.
Die Formeln für die ROI ändern sich folgendermaßen: