Bildentzerrung und KOS-Transformation: Unterschied zwischen den Versionen
Zeile 205: | Zeile 205: | ||
==== Transformation in Vogelperspektive ==== | ==== Transformation in Vogelperspektive ==== | ||
'''Autor:''' Luca Di-Lillo<br/> | '''Autor:''' Luca Di-Lillo<br/> | ||
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 20 cm vor das Schachbrettmuster in dem Fahrzeuglabor gestellt (siehe Abbildung "Bestimmung des zu transformierenden Bereichs"). Danach wurde mit der kalibrierten Kamera ein Bild von diesem Schachbrett aufgenommen. 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. | 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 20 cm vor das Schachbrettmuster in dem Fahrzeuglabor gestellt (siehe Abbildung "Bestimmung des zu transformierenden Bereichs"). Danach wurde mit der kalibrierten Kamera ein Bild von diesem Schachbrett aufgenommen. 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 und mit Hilfe der OpenCV Funktion | Diese vier Punkte werden dann in einer Matrix, bestehend aus den x- und y-Koordinaten aller vier Punkte, gespeichert und mit Hilfe der OpenCV Funktion | ||
Zeile 212: | Zeile 212: | ||
</source> </code> | </source> </code> | ||
werden dann die gewählten Punkte, als neue Grenzwerte des Bildes definiert (siehe Abbildung "Transformierung der Koordinaten"). | werden dann 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. | 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. | ||
[[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> | |||
<br> | |||
<br> | |||
<br> | |||
<br> | |||
<br> | |||
<br> | |||
<br> | |||
<br> | |||
<br> | <br> | ||
<br> | <br> |
Version vom 18. Juli 2019, 11:47 Uhr
Autoren: Luca_Di-Lillo, Tim Leonard Bexten
Betreuer: Prof. Schneider
Inbetriebnahme der Kamera
Ansteuerung mit CamLab am Fahrzeug
Autor: Tim Bexten
Um einen ersten Funktionstest der Kamera durchzuführen, wurde die Kamera über einen Ethernetkabel mit dem Laborrechner verbunden und das zugehörige Netzteil für die Stromversorgung angeschlossen. Das VRmagic Programm zum ausgeben des Kamerabildes "CamLab" ist auf allen Laborrechnern bereits installiert.
Falls es nicht installiert sein sollte, kann das Programm von der VRmagic Homepage heruntergeladen werden:
https://www.vrmagic.com/de/vrmagic-imaging/service-support/
Der richtige Typ der Software, für den entspechenden Rechner kann unter dem Punkt "USBPlattform/Software" ausgewählt und heruntergeladen werden, siehe Bild.
Nachdem das Programm heruntergeladen wurde, muss die ZIP-Datei entpackt werden und die "Setup"-Datei ausgeführt werden. Für nähere Informationen zur Installation, ist in der ZIP-Datei eine README-Dokument enthalten.
"WICHTIG: Admin-Rechte von Nöten!!!"
Nachdem die Installation erfolgreich abgeschlossen wurde, kann das Programm "CamLab" ausgeführt werden.
Nachdem das Programm geöffnet wurde kann die VRmagic Kamera mit dem CamLab kommunizieren. Die angeschlossene Kamera kann in dem Dropdown-Menü ausgewählt werden. Dies kann nach dem ersten mal anschließen etwas dauern, bis das Programm die Ethernetverbindung zur Kamera findet. Im Anschluss daran kann die Bildausgabe gestartet werden.
Wenn die Kamera ausgewählt wurde, öffnet sich ein erweiteretes Menü. In diesem Menü können alle möglichen Konfigurationen vorgenommen werden, die die VRmagic Kamera anbietet (Format, Timing, Sensor, Filter etc.). Mit einem Klick auf den Button "Grab" kann die Bildwiedergabe gestartet werden. Es können auch Snapshots erstellt werden, die auf dem Rechner gespeichert werden können.
Mit diesem Programm wurde ein erster Funktionstest der Kamera durchgeführt, welcher Grundlage für weitere Ansterungskonzepte mit Visual Studio ist.
Implementierung der Kamera in Visual Studio
Autor: Luca Di-Lillo
Die Kamera stellt Librarys für die Programmierung in C/C++ bereit, diese sind im SVN Ordner hinterlegt und müssen in die aktuelle Projektmappe im Explorer hinzugefügt werden.
In Visual Studio wählt man in dem Dropdown Menü in der oberen Leiste neben Debug x86 aus (siehe Abbildung Visual Studio auf x86 einstellen rotes Rechteck), ohne diese Einstellung lässt sich das Programm nicht kompilieren. Im nächsten Schritt wählt man in dem Fenster Projektmappen-Explorer mit einem Rechtsklick die Projektmappe aus und öffnet Eigenschaften. Die Konfiguration des Eigenschaftsfensters muss auf Debug eingestellt sein und die Plattform auf Aktiv(Win32) (siehe Abbildung Zusätzliche Includeverzeichnisse rote Rechtecke). In diesem Fenster wählt man als erstes die Registerkarte C/C++ aus (blaues Rechteck), dort fügt man jetzt unter dem Punkt Zusätzliche Includeverzeichnisse (grünes Rechteck), den Dateipfad C:\[Dateipfad auf eigenem Rechner]\VRMagic\include hinzu. Im nächsten Schritt muss man die Library Dateien mit dem Linker verlinken, dazu bleibt man in dem Eigenschaftsfenster und wählt die Registerkarte Linker aus und öffnet dort Allgemein (siehe Abbildung Zusätzliche Bibliotheksverzeichnisse rotes Rechteck). Dort wählt man jetzt den Punkt Zusätzliche Bibliotheksverzeichnisse (siehe grünes Rechteck) und fügt den Dateipfad C:\[Dateipfad auf eigenem Rechner]\VRMagic\lib hinzu. Nun öffnet man auch unter der Registerkarte Linker den Punkt Eingabe (siehe Abbildung Zusätzliche Abhängigkeiten rotes Rechteck), dort fügt man unter dem Punkt Zusätzliche Abhängigkeiten (siehe grünes Rechteck) folgendes hinzu:
- vrmusbcam2.lib
Bildverarbeitung
Installation von OpenCV
Autor: Luca Di-Lillo
Um das Kamerabild der VRMagic Kamera zu sehen und zu verabeiten wurde OpenCV verwendet. OpenCV bietet zahlreiche Möglichkeiten Bilder zu erkennen und zu verarbeiten.
Für dieses Projekt wurde OpenCV 3.0.0 (Downloadlink zu OpenCV 3.0.0) verwendet, da diese eine x86 (32-Bit) Version enthält, die nötig ist, um OpenCV mit der VRMagic in Visual Studio lauffähig zu machen. Denn die Kamera ist nur mit x86 kompatibel.
Nach abgeschlossenem Download, wird die OpenCV.exe gestartet und in einem gewünschten Verzeichnis installiert. Um OpenCV richtig zu implementieren, sucht man im Windows Suchmenü nach Systemsteuerung und dort wählt man die Einstellung System aus. Unter System wählt man nun als Administrator in der oberen linken Ecke Erweiterte Systemeinstellungen aus. Jetzt öffnet sich ein Fenster namens Systemeinstellungen, dort wählt man den Button Umgebungsvariablen aus und sucht dort in Systemvariablen, die Variable Path (siehe Abbildung Umgebungsvariablen) und wählt den Button Bearbeiten aus. Jetzt Öffnet sich das Fenster Umgebungsvariable bearbeiten (siehe Abbildung Umgebungsvariablen bearbeiten), dort betätigt man den Button Neu. Jetzt fügt man den Dateipfad zu den OpenCV bin Dateien hinzu C:\[Dateipfad auf eigenem Rechner]\openCV 3.0.0\opencv\build\x86\vc12\bin, dabei ist darauf zu achten, dass man x86 und vc12 auswählt, andere Konfigurationen sind mit der Kamera nicht lauffähig. Achtung bei einigen Windows Versionen sieht das Fenster Umgebungsvariablen bearbeiten anders aus, dort befindet sich lediglich eine Textbox mit verschiedenen Dateipfaden, sollte dies der Fall sein, trennt man den letzten Pfad mit einem Semikolon und fügt den Pfad zu OpenCV hinten an.
Nach diesen Einstellungen wird ein Projekt (Konsolenanwendung in C++) in Visual Studio geöffnet oder erstellt. In Visual Studio wählt man in dem Dropdown Menü in der oberen Leiste neben Debug x86 aus (siehe Abbildung Visual Studio auf x86 einstellen rotes Rechteck), ohne diese Einstellung lässt sich das Programm nicht kompilieren. Im nächsten Schritt wählt man in dem Fenster Projektmappen-Explorer mit einem Rechtsklick die Projektmappe aus und öffnet Eigenschaften. Die Konfiguration des Eigenschaftsfensters muss auf Debug eingestellt sein und die Plattform auf Aktiv(Win32) (siehe Abbildung Zusätzliche Includeverzeichnisse rote Rechtecke). In diesem Fenster wählt man als erstes die Registerkarte C/C++ aus (blaues Rechteck), dort fügt man jetzt unter dem Punkt Zusätzliche Includeverzeichnisse (grünes Rechteck), den Dateipfad C:\[Dateipfad auf eigenem Rechner]\openCV 3.0.0\opencv\build\include hinzu. Im nächsten Schritt muss man die Library Dateien mit dem Linker verlinken, dazu bleibt man in dem Eigenschaftsfenster und wählt die Registerkarte Linker aus und öffnet dort Allgemein (siehe Abbildung Zusätzliche Bibliotheksverzeichnisse rotes Rechteck). Dort wählt man jetzt den Punkt Zusätzliche Bibliotheksverzeichnisse (siehe grünes Rechteck) und fügt den Dateipfad C:\[Dateipfad auf eigenem Rechner]\openCV 3.0.0\opencv\build\x86\vc12\lib hinzu. Nun öffnet man auch unter der Registerkarte Linker den Punkt Eingabe (siehe Abbildung Zusätzliche Abhängigkeiten rotes Rechteck), dort fügt man unter dem Punkt Zusätzliche Abhängigkeiten (siehe grünes Rechteck) folgendes hinzu:
- opencv_ts300d.lib
- opencv_world300d.lib
Darstellung des Kamerabildes mit OpenCV
Autor: Luca Di-Lillo
Damit das Live Bild der Kamera mit OpenCV ausgegeben und verarbeitet werden kann muss dieses zuerst in den OpenCV Typ Mat gewandelt werden. Dazu benötigt man eine Hilfsfunktion, die das Farbformat von VRMagic in das Farbformat von OpenCV wandelt, die Funktion ist im folgenden dargestellt.
/***************************
*Quelle: VRmagic Holding AG*
****************************/
int toCvType(VRmColorFormat f_color_format)
{
int cv_type(-1);
switch (f_color_format)
{
case VRM_ARGB_4X8:
cv_type = CV_8UC4;
break;
case VRM_BGR_3X8:
cv_type = CV_8UC3;
break;
case VRM_BAYER_BGGR_8:
case VRM_BAYER_GBRG_8:
case VRM_BAYER_GRBG_8:
case VRM_BAYER_RGGB_8:
case VRM_GRAY_8:
cv_type = CV_8UC1;
break;
case VRM_BAYER_BGGR_16:
case VRM_BAYER_GBRG_16:
case VRM_BAYER_GRBG_16:
case VRM_BAYER_RGGB_16:
case VRM_GRAY_16:
cv_type = CV_16UC1;
break;
default:
break;
}
return cv_type;
}
Mit Hilfe der Funktion kann das Kamerabild jetzt in ein Mat gewandelt werden, dazu werden die Parameter des VRMagic Bildes an das Mat Bild übergeben. Danach wird der Mat Datentyp in ein UMat gewandelt, um die Auslastung der CPU zu verringern, mit Hilfe von imshow() wird das Bild dann in einem Fenster angezeigt.
VRmColorFormat color_format_src = p_gray_src_img->m_image_format.m_color_format;
/*Wandlung des Kamerabilds in ein Mat, um das Bild mit OpenCV zu verarbeiten*/
Mat src_image(cvSize(p_gray_src_img->m_image_format.m_width, p_gray_src_img->m_image_format.m_height), toCvType(color_format_src),(void*)p_gray_src_img->mp_buffer, p_gray_src_img->m_pitch);
src_image.copyTo(src_UMat_image); //Kopiert die Mat in eine UMat, um die Auslastung der CPU zu verringern
imshow("Live Bild", src_UMat_image); //Zeigt das Bild an
Kantendetektion in OpenCV mit Canny Edge
Autor: Tim Bexten
Nachdem das Kamerabild der VRmagic Kamera und in eine OpenCV-Matrix (UMat) umgewandelt wurde, kann eine Kantendetektion durchgeführt werden. OpenCV bietet verschiedene Algorithmen zur detektion von Kanten in einem Kamerabild an.
Für die Kantendetektion wurde der weit verbreitete Algorithmus Canny Edge verwendet. OpenCV bietet für diesen Anwendungsfall bereits eine vorgefertigte Funktion an.
void Canny (InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false )
- InputArray: Kamerabild in Graustufen (Datentyp: UMat, Mat)
- OutputArray: Binärbild mit Kanten (Datentyp: UMat, Mat)
- threshold1: Parameter 1 für Hysterese
- threshold2: Parameter 2 für Hysterese
- apertureSize: Einstellung des Sobel-Operators = 3
- L2gradient: Flag zur Angabe ob anderer Gradient berechnet werden soll (Vorgabe "false")
Die Funktion wird durch ihren Namen "Canny()" aufgerufen. Sie besitzt keinen Rückgabewert. Die Canny-Funktion besitzt zwei Hauptparameter. Als ersten Parameter benötigt die Funktion ein Graustufenbild indem die Kanten detektiert werden sollen, siehe Bild "Orginalbild der Strecke in Graustufen". Dies muss als eine Matrix übergeben werden. Der zweite Hauptparameter ist das Rückgabebild der Canny-Funktion, welches eine Matrix der selben Größe des Originalbildes ist und die detektierten Kanten in einem Binärbild enthält, siehe Bild "Binärbild der Strecke nach Kantendetektion".
Die nächsten zwei Parameter, threshold1 und threshold2 sind Schwellwerte für die Kantenerkennung. Diese double-Werte können für den jeweiligen Verwendungsfall angepasst werden. Sie sind Verantwortlich für das Edge linking der Canny-Funktion.
Die apertureSize stellt den Sobel-Operator ein, welchen die Canny-Funktion als Unterfunktion aufruft. Von der OpenCV Homepage wird empfolen diesen Interger-Wert auf "3" einzustellen.
Das letzte Argument L2gradient ist eine Flagge um der Funktion mitzuteilen, ob der Gradient des Bildes auf eine andere (genauere) Weise berechnet werden soll, siehe https://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html?highlight=canny#canny86. Diese Bool-Variable wird standardmäßig auf "false" gesetzt.
Entzerrung des Kamerabildes
Autor: Tim Bexten
Wie in den vorhergegangenen Bildern zu sehen ist, weist das Kamerabild noch eine gewisse Verzerrung auf. Diese Verzerrungen entstehen durch die optischen Eigenschaften der Linse und dem internen Aufbau der Kamera. Diese Eigenschaften sind spezifisch für jedes Kamerasystem und sind somit unabhängig von der äußeren Bewegung und Position der Kamera. Diese Eigenschaften sind durch die optischen Komponenten, die fest in der Kamera verbaut sind bestimmt und somit bleiben sie beim Betrieb der Kamera immer konstant. Diese intrinsischen Kameraparameter werden benötigt, um den Zusammenhang zwischen den Punkten die auf den Pixeln des Kamerasensors abgebildet sind zu den echten Punkten in der Welt (Teststrecke) herzustellen.
Um die Abbildung der Bildpunkte die durch die Linse auf den Kamerasensor fallen darzustellen, muss eine Kalibrierungsmatrix K aufgestellt werden.
Diese Kalibrierungsmatrix beinhaltet die bauteilspezifischen Parameter die die Kamera beschreiben. Die Komponenten cx,cy geben die Verschiebung des Koordinatenursprungs der Pixelkoordinaten an. Der Nullpunkt der Kamerakoordinaten, welcher in er mitte der Linse liegt wird nicht auf den Nullpunkt der Pixelkoordinaten abgebildet, da das Pixelkoordinatensystem in den meisten Fällen unten links oder oben links seinen Ursprung hat. Somit muss eine Verschiebung berücksichtigt werden.
Des Weiteren müssen die Faktoren fx und fy brücksichtigt werden, die die Brennweite der Kamera beinhalten. Die Brennweite der Kamera gibt den Abstand der Linse zum Kamerasensor an.
Die letzte Variable, die in der Kameramatrix vorkommt, ist die Scherung der Pixel s. Die Scherung gibt an, in welchem Winkel der Kamerasensor zur Linse steht. Für die verbaute VRmagic Kamera ist der Kamerasensor paralell zur Linse verbaut, somit muss keine Scherung berücksichtigt werden und s = 0.
Für eine gelungene Kalibrierung muss auch die radiale Verzerrung der verbauten Linse der VRmagic Kamera bestimmt werden. Verzerrung bei Linsen tritt auf, wenn Licht an den Rändern einer Linse stärker gebrochen wird als im Linsenzentrum. Bei der radialen Verzerrung wird zwischen der Kissenförmigen- und Tonnenförmigen-Verzerrung unterschieden. Die VRmagic Kamera weist durch ihre Linse eine kissenförmige Verzerrung auf. Die stärke der Verzerrung eines Bildpunktes, ist Abhängig von dessen Abstand zum Bildmittelpunkt. Dieses Verhältnis lässt sich durch folgende Gleichungen ausdrücken:
Um diese Parameter zu bestimmen, müssen Bilder mit der VRmagic Kamera aufgenommen werden, bei denen ein Kalibrierungsobjekt mit bekannten Abmessungen aufgenommen wird.
Für diese Aufgabe wird die Camera Calibrator Toolbox genutzt um die Parameter des verbauten Kamerasystems automatisiert zu bestimmen. Die Toolbox befindet sich in MATLAB unter dem Reiter Apps / Image Processing and Computer Vision. Die Toolbox benötigt Kalibrierungsbilder von einem Schachbrettmuster mit bekannten Kantenlängen, wie in der Abbildung recchts zu sehen. Ein Schachbrettmuster wird verwendet, da das regelmäßige Muster des Schachbrettes einfach zu detektieren ist. Die Größe der einzelnen Kacheln auf dem Schachbrett muss zunächst vom Benutzer eingegeben werden.
Wenn die Kalibrierungsbilder in die Toolbox geladen wurden, kann man unter dem Reiter Options die radialen und tangentialen Verzerrungsparameter berechnen lassen. Durch einen Klick auf den Button Calibrate berechnet die Toolbox alle nötigen Verzerrungsparameter und die Kameramatrix. Im Anschluss daran, projiziert die Toolbox neue Schachbretteckpunkte als rote Kreuze zu sehen, zurück auf das Bild. Des Weiteren wird die Abweichung der Projektion zu erkannten Eckpunkten in Pixeln angegeben (siehe Abbildung oben rechts). Diese errechneten Parameter können an den MATLAB Workspace exportieren oder sie als Script speichern.
Um die VRmagic Kamera mit OpenCV zu kalibrieren müssen die ermittelten Werte in das C++ Programm übernommen werden. Danach muss das Kamerabild mit Hilfe der undistort-Funktion verändert werden. Die Funktion benötigt folgende Parameter:
void undistort (InputArray Source, OutputArray Image, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray())
- Source: Kamerabild in Graustufen (Datentyp: UMat, Mat)
- Image: Kalibriertes Ausgabebild in Graustufen (Datentyp: UMat, Mat)
- cameraMatrix: Die Kameramatrix erstellt aus der MATLAB Toolbox 3x3-Matrix
- distCoeffs: Die Verzerrungsparameter erstellt aus der MATLAB Toolbox
- newCameraMatrix: Für die Verwendung einer neuen Kameramatrix erstellt aus den verzerrten Bildern (standardmäßig = cameraMatrix) muss nicht extra angegeben werden.
Nachdem die Parameter der Funktion übergeben wurden, erhält man ein entzerrtes Kamerabild. Es ist deutlich zu erkennen, dass die Straßemarkierungen im rechten Bild paralell verlaufen, wären im linken Bild eine deutliche Verzerrung vorliegt.
Transformation in Vogelperspektive
Autor: Luca Di-Lillo
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 20 cm vor das Schachbrettmuster in dem Fahrzeuglabor gestellt (siehe Abbildung "Bestimmung des zu transformierenden Bereichs"). Danach wurde mit der kalibrierten Kamera ein Bild von diesem Schachbrett aufgenommen. 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 und mit Hilfe der OpenCV Funktion
getPerspectiveTransform(const Point2f src[], const Point2f dst[])
werden dann 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.
Danach wird das Originalbild in eine Draufsicht transformiert, dazu wird die Funktion
warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
verwendet.
- scr ist das Originalbild
- dst ist die neu erstellte Draufsicht
- M ist die Koordinatentransformation, die mit getPerspectiveTransform erstellt wurde
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 sind, 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.
Weiteres Vorgehen
- Binärbild aus weißen Spurlinien und Hintergrund erstellen