Bildentzerrung und KOS-Transformation: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 134: Zeile 134:
''void'' '''Canny'''(''InputArray'' '''image''', ''OutputArray'' '''edges''', ''double'' '''threshold1''', ''double'' '''threshold2''', ''int'' '''apertureSize=3''', ''bool'' '''L2gradient=false''' )<br>
''void'' '''Canny'''(''InputArray'' '''image''', ''OutputArray'' '''edges''', ''double'' '''threshold1''', ''double'' '''threshold2''', ''int'' '''apertureSize=3''', ''bool'' '''L2gradient=false''' )<br>
<br>
<br>
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 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".<br>
Die nächsten zwei Parameter, ''threshold1'' und ''threshold2'' sind Schwellwerte für die Kantenerkennung. Diese können für den jeweiligen Verwendungsfall angepasst werden.


==== Bildtransformation in Vogelperspektive mit OpenCV ====
==== Bildtransformation in Vogelperspektive mit OpenCV ====

Version vom 14. Mai 2019, 13:59 Uhr

Autoren: Luca_Di-Lillo, Tim Leonard Bexten
Betreuer: Prof. Schneider

Inbetriebnahme der Kamera

Ansteuerung mit CamLab am Fahrzeug

Bereich zum Download der Software

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.
Oberfläche des CamLab Programms
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

Bildverarbeitung

Installation von OpenCV

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.

Umgebungsvariablen

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
Umgebungsvariablen hinzufügen
Visual Studio auf x86 einstellen
Zusätzliche Includeverzeichnisse
Zusätzliche Bibliotheksverzeichnisse
Zusätzliche Abhängigkeiten




































Darstellung des Kamerabildes mit OpenCV

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

Orginalbild der Strecke in Graustufen
Binärbild der Strecke nach Kantendetektion

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 )

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 können für den jeweiligen Verwendungsfall angepasst werden.

Bildtransformation in Vogelperspektive mit OpenCV