Kalibrierung der Kamera: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(101 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Kalibrierung der Kamera]]
'''Autor:''' Tim Kruse
'''Autor:''' [[Tim Kruse]]
 
'''Bearbeitet durch:''' [[Benutzer:Niklas Reeker| Niklas Reeker]] am 10.06.2023


== Einleitung ==
== Einleitung ==
Dieser Artikel beschreibt die Funktionsweise der Kalibrierung der intrinsischen und extrinsischen Kameraparameter. Der aktuelle Stand der Kalibrierung ist, aufgrund mangelnder Zeit, nicht vollständig automatisiert und nicht ausführlich getestet und dokumentiert.
Dieser Artikel beschreibt die Funktionsweise der Kalibrierung der intrinsischen und extrinsischen Kameraparameter. Dabei wird zunächst auf ein älteres Verfahren zur Bestimmung der Kameraparameter eingegangen. Anschließend wird ein schnellerer und einfacherer Weg mit Hilfe der MATLAB Camera Calibrator App gezeigt. Des Weiteren kann auch die [[Automatische_Kamera_Kalibrierung|Automatische Kamera Kalibrierung]] zur Parameterbestimmung verwendet werden.
==Durchführung der Kalibrierung==
 
== Darstellung der theoretischen Grundlagen==
Die Funktion der intrinsischen und extrinsischen Kameraparameter besteht darin, dass die Perspektive und Projektion der 3D-Welt auf ein 2D-Bild zu beschreiben. Mit den extrinsischen Parametern können die genaue Position und Ausrichtung der Kamera im Raum beschrieben werden. Die intrinsischen Parameter ermöglichen es, die optischen Eigenschaften der Kamera zu berücksichtigen, sodass sie die bestmögliche Bildqualität erzielen kann und geometrische Verzerrungen minimiert werden. <ref>https://ch.mathworks.com/help/vision/ref/cameraparameters.html, abgerufen am 10.06.2023</ref>
 
=== Extrinsische Parameter ===
Extrinsische Kameraparameter können die Höhe der Kamera im Raum (Translationsvektor), als auch die Ausrichtung der Kamera im Raum (Rotationsmatrix) sein. Sie beschreiben also die Position und Ausrichtung der Kamera im Raum. <ref>https://ch.mathworks.com/help/vision/ref/cameraparameters.html, abgerufen am 10.06.2023</ref>
 
=== Intrinsische Parameter ===
Die intrinsischen Kameraparameter beschreiben die internen Eigenschaften der Kamera. Sie umfassen die folgenden Parameter:
* Focal Length (Brennweite): Die Brennweite der Kamera in Pixeln. Sie bestimmt das Sichtfeld und die Vergrößerung der Kamera.
* Principal Point (Hauptpunkt): Die Koordinaten des Hauptpunkts in Pixeln. Der Hauptpunkt ist der Punkt, an dem die optische Achse der Kamera den Bildsensor schneidet. Er bestimmt den Bildmittelpunkt.
* Skew (Schiefe): Der Skew-Parameter gibt an, ob die Bildachse des Sensors nicht senkrecht zur optischen Achse liegt.
* Radial Distortion (radiale Verzerrung): Diese Parameter modellieren radiale Verzerrungen, die durch die Kameralinse verursacht werden.
* Tangential Distortion (tangential Verzerrung): Diese Parameter modellieren tangentiale Verzerrungen.
 
Weitere Parameter und eine genauere Beschreibung von diesen ist [https://ch.mathworks.com/help/vision/ref/cameraparameters.html hier] zu finden. <ref>https://ch.mathworks.com/help/vision/ref/cameraparameters.html, abgerufen am 10.06.2023</ref> <ref>https://ch.mathworks.com/help/vision/ug/using-the-single-camera-calibrator-app.html, abgerufen am 10.06.2023</ref>
 
== Möglichkeiten zur Parameterbestimmung==
 
=== Durchführung der Kalibrierung mit der MATLAB Camera Calibrator App===
Nachfolgend wird die Kalibrierung mit der MATLAB Camera Calibrator App näher erläutert.
 
==== Funktion====
Die MATLAB Camera Calibrator App ist eine benutzerfreundliche Oberfläche, die entwickelt wurde, um den Prozess der Kamerakalibrierung zu erleichtern. Mit dieser App können die intrinsischen und extrinsischen Parameter einer Kamera geschätzt werden, die für die Bildverarbeitung von großer Bedeutung sind. Bei der Kamerakalibrierung nach Tsai kann ein Kalibrierungsgittermuster ausgewählt oder definiert werden. Zudem lassen sich Bilder importieren, mit denen aus verschiedenen Blickwinkeln dann die Parameter ermittelt werden können. Die App erkennt automatisch die Ecken des Gitters in den importierten Bildern und führt eine präzise Kamerakalibrierung durch, um die Brennweite, den Hauptpunkt und die Verzerrungskoeffizienten der Kamera zu schätzen. Die Parameter kann man sich anschließend als .mat-Datei oder Matlab-Funktion ausgeben lassen.
Wichtig ist, dass die Bilder den gesamten Kamera Bereich mit dem Schachbrettmuster abdecken um eine möglichst genaue Kalibrierung zu ermöglichen. <ref>https://ch.mathworks.com/help/vision/ref/cameraparameters.html, abgerufen am 10.06.2023</ref> <ref>https://ch.mathworks.com/help/vision/ug/using-the-single-camera-calibrator-app.html, abgerufen am 10.06.2023</ref><br>
<gallery widths="1000" heights="450">
Datei:MATLAB Camera Calibrator App.png|Abb. 1: MATLAB Camera Calibrator App <ref> Eigenes Dokument </ref>
</gallery>
 
==== Anwendung ====
Folgende Schritte sind bei der Anwendung einzuhalten:<br>
1. Bilder machen von Schachbrettmuster vor Kamera. Dabei ist zu beachten, dass alle Ecken des Bildes mal von dem Muster bedeckt waren. Wichtig ist, dass man sich die Größe der Schachfelder merkt (in diesem Fall: 30,83mm x 30,83mm).
[[Datei:Bilder zur Kalibrierung.jpg|mini|Abb. 2: Erzeugung der Bilder für die Kamerakalibrierung <ref> Eigenes Dokument </ref>]]
2. Bilder in MATLAB Camera Calibrator App hochladen (Add images).<br>
3. Optionen anpassen. Weitwinkel kameras müssen beispielsweise den modus Fisheye ausgewählt haben.<br>
4. Calibrate. <br>
5. Bilder überprüfen (Show Undistored).<br>
6. Export Camera Parameters to Workspace.<br>
 
==== Ergebnis ====
Das Ergebnis der Kalibrierung ist nachfolgend dargestellt. Auf der linken Seite ist das Bild vor der Kalibrierung dargestellt und auf der rechten das gleiche Bild nach der Kalibrierung zu sehen.
<gallery widths="1000" heights="450">
Datei:Einfluss der Kamerakalibrierung.png|Abb. 3: Einfluss der Kamerakalibrierung <ref> Eigenes Dokument </ref>
</gallery>
<gallery widths="1000" heights="400">
Datei:Vergleich zwischen Originalbild (links) und entzerrtes Bild (rechts).jpg|Abb. 4: Vergleich zwischen Originalbild (links) und entzerrtes Bild (rechts) <ref> Eigenes Dokument </ref>
</gallery>
Die Calibrator App hat für die Kalibrierung eine .mat Datei erzeugt, in welcher die verwendeten Parameter enthalten sind. Die .mat Datei ist nachfolgend dargestellt:<br>
<gallery widths="400" heights="400">
Datei:Kameraparameter.png|Abb. 5: Kameraparameter <ref> Eigenes Dokument </ref>
</gallery>
Für die Erstellung des kalibrierten Bildes wurden folgende von der App erstellten Parameter verwendet:
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 1: Erzeugte Parameter der Matlab Calibrator App
|-
! Parameter !! Wert
|-
| FocalLength || [482.9843, 484.1678]
|-
| ImageSize  || [478, 752]
|-
| RadialDistortion  || [-0.3325, 0.1218]
|-
| TangentialDistortion  || [0, 0]
|-
| PrincipalPoint  || [380.8518, 230.4655]
|-
| MeanReprojectionError || 0.0884
|}
 
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 2: Extrinsische Kameraparameter
|-
! Parameter !! Wert
|-
| Kameraneigung || 10°
|-
| Kamerahöhe über Boden  || 27,5cm
|-
| Fahrzeugfront bis Kamera  || 28cm
|-
| Fahrzeuglänge  || 50cm
|-
| Fahrzeugbreite  || 22cm
|}
Alle weiteren Werte und Matrizen sind in SVN [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Daten/Vision/KameraKalibrierung/ hier] zu finden.
 
Um die Entfernung kalibrieren zu können, wurde das Fahrzeug auf ein Schachbrettmuster gestellt. In einem Schachbrett ist ein Zettel geklebt, um die Entfernung dazu errechnen zu können (vgl. Abb. 6).
<gallery widths="400" heights="400">
Datei:Kamerabild Fahrzeugperspektive Entzerrt.png|Abb. 6: Fahrzeugperspektive auf Schachbrettmuster <ref> Eigenes Dokument </ref>
</gallery>
Auf Abb. 6 ist das Schachbrettmuster und der geklebte Zettel in dem Bild zu sehen. Eine Kachel in dem Muster ist 17,5cm x 17,5cm groß. Das Fahrzeug ist 2 Kacheln von dem Zettel entfernt.
 
[[Datei:BTF ImgTransf Funktion.PNG|400px|thumb|right|Abb. 7: BTF_ImgTransf-Funktion]]
[[Datei:Intrinsische Matrix Matlab.PNG|400px|thumb|right|Abb. 8: Intrinsische Matrix-Matlab]]
[[Datei:OpenCV Intrinsische Matrix.PNG|400px|thumb|right|Abb. 9: Intrinsische Matrix-OpenCV]]
 
=== Einbettung der Kameraparameter in VisualStudio ===
 
Damit die Spurerkennung des Carlo Cup Fahrzeuges zuverlässig funktionieren kann, müssen die intrinsischen und extrinsischen Kameraparameter in das VisualStudio-Projekt eingefügt werden.
Dies erfolgt in der Funktion "BTF_ImgTransf()", welche sich innerhalb der main() befindet, worin alle benötigten Variablen entsprechend deklariert werden (siehe Abb. 7). Zudem ist darin eine switch-case-Anweisung enthalten, dessen Aufgabe es ist, zu unterscheiden, welches Auto bei der zu Beginn gestellten Abfrage ausgewählt wurde (neues oder altes Fahrzeug). Dementsprechend werden darauf die jeweiligen Variablen gewählt.
 
 
"OSE_IntrinsicMatrix_ac32" ist dabei eine 3x3-Matrix, worin die durch Matlab erzeugte intrinsische Matrix eingetragen werden muss (siehe Abb. 8). Dabei ist jedoch zu beachten, dass die von Matlab generierte Matrix bei der Hauptdiagonalen gespiegelt werden muss, da die Funktionen von openCV mit einer anderen Anordnung arbeiten (siehe Abb. 9) <ref>https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga69f2545a8b62a6b0fc2ee060dc30559d, abgerufen am 15.01.2024</ref>.
"OSE_dist_s32" beinhaltet die radialen und tangentialen Verzerrungsparameter. Dabei ist zu berücksichtigen, dass bei der Anwendung der Matlab-Kalibrierungsfunktion, die Auswahl auf 2-radiale Werte und die tangetiale Werte mit ermittelt werden. Dies lässt sich in den Einstellungen anpassen. Anschließend müssen zunächst die zwei radiale und darauffolgend die zwei tangentiale Verzerrungsparameter eingetragen werden.
 
<br>
 
=== Automatische Kamera Kalibrierung (mit Matlab Skript)===
Die [[Automatische_Kamera_Kalibrierung|Automatische Kamera Kalibrierung]] ist ein einem eigenen Artikel beschrieben. Dort werden mit einem fertigen Matlab Skript die Kameraparameter bestimmt und zur Weiterverarbeitung verwendet.  
<br>
 
=== Durchführung der Kalibrierung mit Visual Studio===
Nachfolgend wird die Kamerakalibrierung mit Visual Studio dargestellt und erklärt.


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong> Vorgehensweise, Funktionsweise und Hinweise</strong>
|-
|
==== Vorgehensweise====
Um die Kalibrierung durchzuführen muss das Visual Studio Projekt „Kalibrierung Kamera“ geöffnet werden. Die Kalibrierung kann aktuell nicht durch einfaches ausführen einer fertigen  .exe-Datei durchgeführt werden. Wenn nach einer Veränderung der Kameraposition oder dem Kamerawinkel eine Kalibrierung durchgeführt werden soll müssen folgende Schritte befolgt werden.
Um die Kalibrierung durchzuführen muss das Visual Studio Projekt „Kalibrierung Kamera“ geöffnet werden. Die Kalibrierung kann aktuell nicht durch einfaches ausführen einer fertigen  .exe-Datei durchgeführt werden. Wenn nach einer Veränderung der Kameraposition oder dem Kamerawinkel eine Kalibrierung durchgeführt werden soll müssen folgende Schritte befolgt werden.
* Sicherstellen, dass im Ordner „Bilder intrinsische Kalibrierung“ mehrere Bilder von einem 7x9 Felder (6x8 Punkte wo vier Ecken von Feldern aufeinandertreffen) großen Schachbrettmuster liegen. Das Schachbrettmuster sollte in allen Bildern an einer anderen Stelle sein, so dass durch alle Bilder das gesamte Sichtfeld der Kamera abgedeckt ist.
 
* Sicherstellen, dass im Ordner „Bilder extrinsische Kalibrierung“ ein Bild liegt auf dem das Fahrzeug/ die Kamera gerade auf einem geraden Teil der Strecke steht.
* Sicherstellen, dass im Ordner '''„Bilder intrinsische Kalibrierung“''' mehrere Bilder von einem 7x9 Felder (6x8 Punkte wo vier Ecken von Feldern aufeinandertreffen) großen Schachbrettmuster liegen. Das Schachbrettmuster sollte in allen Bildern an einer anderen Stelle sein, so dass durch alle Bilder das gesamte Sichtfeld der Kamera abgedeckt ist.
 
* Sicherstellen, dass im Ordner '''„Bilder extrinsische Kalibrierung“''' ein Bild liegt auf dem das Fahrzeug/ die Kamera gerade auf einem geraden Teil der Strecke steht.
 
* Das Programm kann nun in VisualStudio über den lokalen Windows Debugger im Modus „Release“ gestartet werden („Debug“ funktioniert auch hat aber eine um ein Vielfaches schlechte Performance)
* Das Programm kann nun in VisualStudio über den lokalen Windows Debugger im Modus „Release“ gestartet werden („Debug“ funktioniert auch hat aber eine um ein Vielfaches schlechte Performance)
* Die Kalibrierung wird nun durchgeführt und dass Ergebnis angezeigt.
* Die Kalibrierung wird nun durchgeführt und dass Ergebnis angezeigt.
[[Datei:Ergebnis der Kalibrierung.jpeg|rechts|mini|Abbildung 1: Ergebnis der Kalibrierung]]
[[Datei:Ergebnis der Kalibrierung.jpeg|rechts|mini|Abbildung 1: Ergebnis der Kalibrierung]]
* Um die Extrinsische Kalibrierung anzupassen müssen nun die Werte xLinie, yLinie, horizontal_laenge und WertKalibVogelperspektive angepasst werden. Dies muss durch mehrfaches Ausprobieren und langsames verändern der Werte geschehen. Die eingezeichneten Linien müssen dann so liegen wie in Abbildung 1.


* Ist das Kalibrierte Bild zufriedenstellend kann der Inhalt des Ordners „Kalibrierungsdaten“ in des entschprechenden Ordner des Programms zur Zuerkennung und Stopplinienerkennung kopiert werden. Außerdem muss der in der Config.ini abgespeicherte Wert „Pixel_pro_cm“ in der entsprechenden Config.ini der Spurerkennung und Stopplinienerkennung übertragen werden.
* Um die Extrinsische Kalibrierung anzupassen müssen nun die Werte '''xLinien''', '''yLinien''', '''horizontal_laenge''', '''WertYKalib''' und '''WertKalibVogelperspektive''' angepasst werden. Dies muss aktuell durch mehrfaches Ausprobieren und langsames verändern der Werte geschehen. Die eingezeichneten Linien müssen dann zwischen der rechten Linie und der Mittelline sowie zwischen zwei Mittellinien liegen. In Abbildung 1 sieht man die grauen Linien am unteren Bildrand. (Die Kurze Linie ist halb so lang wie die Lange Linie, da die Breite einer Fahrspur 40 cm und der Abstand der Kanten zweier Mittellinen 20 cm beträgt.)
 
* Ist das Kalibrierte Bild zufriedenstellend kann der Inhalt des Ordners '''„Kalibrierungsdaten“''' in des entsprechenden Ordner des Programms zur Zuerkennung und Stopplinienerkennung kopiert werden. Außerdem muss der in der '''Config.ini''' abgespeicherte Wert '''„Pixel_pro_cm“''' in der entsprechenden Config.ini der Spurerkennung und Stopplinienerkennung übertragen werden.
 
* Die Kalibrierung ist nun abgeschlossen.
* Die Kalibrierung ist nun abgeschlossen.


== Hinweise ==
==== Funktionsweise ====
 
Die Kalibrierung der Kamera ist in zwei Teile aufgeteilt. Die intrinsische und die extrinsische Kalibrierung. Bei der intrinsischen Kalibrierung wird hauptsächlich die Verzerrung des Bildes durch die Linse der Kamera ermittelt und entfernt. Die extrinsische Kalibrierung ist dazu da das Ausgangsbild der Transformation in Vogelperspektive zu Kalibrieren um ein unverzerrtes Bild zu erhalten und um einen Pixel pro cm Wert zu erhalten.
 
'''Intrinsische Kalibrierung:'''
 
Die Funktion zur intrinsischen Kalibrierung liest zunächst die Dateipfade der Bilder aus dem Ordner „Bilder intrinsische Kalibrierung“ ein. Dann wird auf jedes Bild in ein Graustufenbild umgewandelt und anschließend das Schachbrettmuster mit Hilfe der openCV-Funktion "findChessboardCorners()" gesucht. Konnte ein Schachbrettmuster gefunden werden wird mit der openCV-Funktion "cornerSubPix()" die Position jeder gefundenen Ecke im Schachbrettmuster im Subpixelbereich verfeinert. Dann werden die Punkte des Schachbrettmusters in einem Vektor gespeichert. Dieser Vorgang wird für alle Bilder aus dem Ordner widerholt. Nachdem auf allen Bildern die Punkte des Schachbrettmusters gefunden, wird die openCV-Funktion "calibrateCamera()" aufgerufen. Diese bekommt die Vektoren mit den Punkten übergeben und gibt eine Kameramatrix und die Verzerrungskoeffizienten zurück. Diese können dann verwedet werden um ein Bild mit der openCV-Funktion undistort() zu entzerren.
 
'''Extrinsische Kalibrierung''' (manuell)
 
Die extrinsische Kalibrierung kann erst durchgeführt werden wenn das Bild bereits von der Linsenverzerrung befreit wurde. Dazu wird als erstes das Bild mit den in der intrinsischen Kalibrierung ermittelten Kalibrierungsdaten entzerrt. Das entzerrte Bild wird dann in Vogelperspektive transformiert und die Transformationsmatrix und der Pixerl pro cm Wert gespeichert. In dieses Bild in Vogelperspektive erden dann zwei Linien eingezeichnet die zur manuellen Kalibrierung des Bildes dienen. Das Bild wird dann ausgegeben damit der Benutzer es sich angucken kann um Ergebnis der Kalibrierung zu bewerten und die Werte gegebenenfalls anpassen kann. Das Programm muss für jede Änderung der Werte für die extrinsische Kalibrierung erneut ausgeführt werden.
 
==== Hinweise ====
 
*das Programm befindet sich im SVN unter: trunk/Software/OSE_Draufsicht_Spurpolynom_RS232/Kalibrierung_intrinsisch
 
*'''Zum ausführen des Programms wird OpenCV benötigt.''' OpenCV muss auf dem PC auf dem das Programm ausgeführt werden soll installiert sein.
*aktuell verwendete OpenCV Version: '''4.5.1'''  Link zum download: https://sourceforge.net/projects/opencvlibrary/files/4.5.1/opencv-4.5.1-vc14_vc15.exe/download
*OpenCV installer ausführen und direkt nach C:\ installieren. Wenn dies durchgeführt wurde sollte sich das Programm sofort kompilieren lassen.
*Bei Änderung der OpenCV-Version oder dem Istallationsverzeichnis diese Anleitung beachten: https://wiki.hshl.de/wiki/index.php/Einrichten_von_OpenCV_in_Visual_Studio
*Das Programm sollte wenn möglich immer im Release Modus gestartet werden. Dieser ist um ein Vielfaches performanter als die Debug Version.
|}
 
== Zusammenfassung ==
 
Es gibt verschiedene Wege um die Kameraparameter zu bestimmen und mit den werten weiter zu arbeiten. Arbeitet man sowieso schon in Matlab so bietet sich doch die MATLAB Camera Calibrator App am ehesten an. Auch das weitere Signal processing mit der von der App erzeugten parameterdatei ist in vielen funktionen bereits implementiert oder vereinfacht.
Beide Alternativwege führen allerdings auch zum Ziel, könnten jedoch, je nach Anwendungsfall, umständlicher oder schwieriger sein.
Eine händische Überprüfung, um zu schauen ob die vom Computer errechneten Werte sinnhaft sind, muss immer erfolgen. Dadurch wird eine mögliche Fehlerquelle minimiert.
 
== Dokumentation in SVN ==
Die Messdaten, sowie die für die Auswertung verwendeten Matlabskripte können [https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Workshops/Abgaben/NiklasReeker_OliverScholze/09-Objekt-%20und%20Spurerkennung/9.4%20Kamerakalibrierung/ hier] in SVN aufgerufen werden.
 
== Literatur ==


*Zum ausführen des Programms wird OpenCV benötigt. OpenCV muss auf dem PC auf dem das Programm ausgeführt werden soll installiert sein. Anleitung zum Installieren des Programms: [https://wiki.hshl.de/wiki/index.php/Einrichten_von_OpenCV_in_Visual_Studio Installation von OpenCV in Visual Studio]
→ zurück zum Hauptartikel: [[Praktikum_SDE|SDE Praktikum Autonomes Fahren]]

Aktuelle Version vom 15. Januar 2024, 10:54 Uhr

Autor: Tim Kruse

Bearbeitet durch: Niklas Reeker am 10.06.2023

Einleitung

Dieser Artikel beschreibt die Funktionsweise der Kalibrierung der intrinsischen und extrinsischen Kameraparameter. Dabei wird zunächst auf ein älteres Verfahren zur Bestimmung der Kameraparameter eingegangen. Anschließend wird ein schnellerer und einfacherer Weg mit Hilfe der MATLAB Camera Calibrator App gezeigt. Des Weiteren kann auch die Automatische Kamera Kalibrierung zur Parameterbestimmung verwendet werden.

Darstellung der theoretischen Grundlagen

Die Funktion der intrinsischen und extrinsischen Kameraparameter besteht darin, dass die Perspektive und Projektion der 3D-Welt auf ein 2D-Bild zu beschreiben. Mit den extrinsischen Parametern können die genaue Position und Ausrichtung der Kamera im Raum beschrieben werden. Die intrinsischen Parameter ermöglichen es, die optischen Eigenschaften der Kamera zu berücksichtigen, sodass sie die bestmögliche Bildqualität erzielen kann und geometrische Verzerrungen minimiert werden. [1]

Extrinsische Parameter

Extrinsische Kameraparameter können die Höhe der Kamera im Raum (Translationsvektor), als auch die Ausrichtung der Kamera im Raum (Rotationsmatrix) sein. Sie beschreiben also die Position und Ausrichtung der Kamera im Raum. [2]

Intrinsische Parameter

Die intrinsischen Kameraparameter beschreiben die internen Eigenschaften der Kamera. Sie umfassen die folgenden Parameter:

  • Focal Length (Brennweite): Die Brennweite der Kamera in Pixeln. Sie bestimmt das Sichtfeld und die Vergrößerung der Kamera.
  • Principal Point (Hauptpunkt): Die Koordinaten des Hauptpunkts in Pixeln. Der Hauptpunkt ist der Punkt, an dem die optische Achse der Kamera den Bildsensor schneidet. Er bestimmt den Bildmittelpunkt.
  • Skew (Schiefe): Der Skew-Parameter gibt an, ob die Bildachse des Sensors nicht senkrecht zur optischen Achse liegt.
  • Radial Distortion (radiale Verzerrung): Diese Parameter modellieren radiale Verzerrungen, die durch die Kameralinse verursacht werden.
  • Tangential Distortion (tangential Verzerrung): Diese Parameter modellieren tangentiale Verzerrungen.

Weitere Parameter und eine genauere Beschreibung von diesen ist hier zu finden. [3] [4]

Möglichkeiten zur Parameterbestimmung

Durchführung der Kalibrierung mit der MATLAB Camera Calibrator App

Nachfolgend wird die Kalibrierung mit der MATLAB Camera Calibrator App näher erläutert.

Funktion

Die MATLAB Camera Calibrator App ist eine benutzerfreundliche Oberfläche, die entwickelt wurde, um den Prozess der Kamerakalibrierung zu erleichtern. Mit dieser App können die intrinsischen und extrinsischen Parameter einer Kamera geschätzt werden, die für die Bildverarbeitung von großer Bedeutung sind. Bei der Kamerakalibrierung nach Tsai kann ein Kalibrierungsgittermuster ausgewählt oder definiert werden. Zudem lassen sich Bilder importieren, mit denen aus verschiedenen Blickwinkeln dann die Parameter ermittelt werden können. Die App erkennt automatisch die Ecken des Gitters in den importierten Bildern und führt eine präzise Kamerakalibrierung durch, um die Brennweite, den Hauptpunkt und die Verzerrungskoeffizienten der Kamera zu schätzen. Die Parameter kann man sich anschließend als .mat-Datei oder Matlab-Funktion ausgeben lassen. Wichtig ist, dass die Bilder den gesamten Kamera Bereich mit dem Schachbrettmuster abdecken um eine möglichst genaue Kalibrierung zu ermöglichen. [5] [6]

Anwendung

Folgende Schritte sind bei der Anwendung einzuhalten:
1. Bilder machen von Schachbrettmuster vor Kamera. Dabei ist zu beachten, dass alle Ecken des Bildes mal von dem Muster bedeckt waren. Wichtig ist, dass man sich die Größe der Schachfelder merkt (in diesem Fall: 30,83mm x 30,83mm).

Abb. 2: Erzeugung der Bilder für die Kamerakalibrierung [8]

2. Bilder in MATLAB Camera Calibrator App hochladen (Add images).
3. Optionen anpassen. Weitwinkel kameras müssen beispielsweise den modus Fisheye ausgewählt haben.
4. Calibrate.
5. Bilder überprüfen (Show Undistored).
6. Export Camera Parameters to Workspace.

Ergebnis

Das Ergebnis der Kalibrierung ist nachfolgend dargestellt. Auf der linken Seite ist das Bild vor der Kalibrierung dargestellt und auf der rechten das gleiche Bild nach der Kalibrierung zu sehen.

Die Calibrator App hat für die Kalibrierung eine .mat Datei erzeugt, in welcher die verwendeten Parameter enthalten sind. Die .mat Datei ist nachfolgend dargestellt:

Für die Erstellung des kalibrierten Bildes wurden folgende von der App erstellten Parameter verwendet:

Tabelle 1: Erzeugte Parameter der Matlab Calibrator App
Parameter Wert
FocalLength [482.9843, 484.1678]
ImageSize [478, 752]
RadialDistortion [-0.3325, 0.1218]
TangentialDistortion [0, 0]
PrincipalPoint [380.8518, 230.4655]
MeanReprojectionError 0.0884
Tabelle 2: Extrinsische Kameraparameter
Parameter Wert
Kameraneigung 10°
Kamerahöhe über Boden 27,5cm
Fahrzeugfront bis Kamera 28cm
Fahrzeuglänge 50cm
Fahrzeugbreite 22cm

Alle weiteren Werte und Matrizen sind in SVN hier zu finden.

Um die Entfernung kalibrieren zu können, wurde das Fahrzeug auf ein Schachbrettmuster gestellt. In einem Schachbrett ist ein Zettel geklebt, um die Entfernung dazu errechnen zu können (vgl. Abb. 6).

Auf Abb. 6 ist das Schachbrettmuster und der geklebte Zettel in dem Bild zu sehen. Eine Kachel in dem Muster ist 17,5cm x 17,5cm groß. Das Fahrzeug ist 2 Kacheln von dem Zettel entfernt.

Abb. 7: BTF_ImgTransf-Funktion
Abb. 8: Intrinsische Matrix-Matlab
Abb. 9: Intrinsische Matrix-OpenCV

Einbettung der Kameraparameter in VisualStudio

Damit die Spurerkennung des Carlo Cup Fahrzeuges zuverlässig funktionieren kann, müssen die intrinsischen und extrinsischen Kameraparameter in das VisualStudio-Projekt eingefügt werden. Dies erfolgt in der Funktion "BTF_ImgTransf()", welche sich innerhalb der main() befindet, worin alle benötigten Variablen entsprechend deklariert werden (siehe Abb. 7). Zudem ist darin eine switch-case-Anweisung enthalten, dessen Aufgabe es ist, zu unterscheiden, welches Auto bei der zu Beginn gestellten Abfrage ausgewählt wurde (neues oder altes Fahrzeug). Dementsprechend werden darauf die jeweiligen Variablen gewählt.


"OSE_IntrinsicMatrix_ac32" ist dabei eine 3x3-Matrix, worin die durch Matlab erzeugte intrinsische Matrix eingetragen werden muss (siehe Abb. 8). Dabei ist jedoch zu beachten, dass die von Matlab generierte Matrix bei der Hauptdiagonalen gespiegelt werden muss, da die Funktionen von openCV mit einer anderen Anordnung arbeiten (siehe Abb. 9) [13]. "OSE_dist_s32" beinhaltet die radialen und tangentialen Verzerrungsparameter. Dabei ist zu berücksichtigen, dass bei der Anwendung der Matlab-Kalibrierungsfunktion, die Auswahl auf 2-radiale Werte und die tangetiale Werte mit ermittelt werden. Dies lässt sich in den Einstellungen anpassen. Anschließend müssen zunächst die zwei radiale und darauffolgend die zwei tangentiale Verzerrungsparameter eingetragen werden.


Automatische Kamera Kalibrierung (mit Matlab Skript)

Die Automatische Kamera Kalibrierung ist ein einem eigenen Artikel beschrieben. Dort werden mit einem fertigen Matlab Skript die Kameraparameter bestimmt und zur Weiterverarbeitung verwendet.

Durchführung der Kalibrierung mit Visual Studio

Nachfolgend wird die Kamerakalibrierung mit Visual Studio dargestellt und erklärt.

Zusammenfassung

Es gibt verschiedene Wege um die Kameraparameter zu bestimmen und mit den werten weiter zu arbeiten. Arbeitet man sowieso schon in Matlab so bietet sich doch die MATLAB Camera Calibrator App am ehesten an. Auch das weitere Signal processing mit der von der App erzeugten parameterdatei ist in vielen funktionen bereits implementiert oder vereinfacht. Beide Alternativwege führen allerdings auch zum Ziel, könnten jedoch, je nach Anwendungsfall, umständlicher oder schwieriger sein. Eine händische Überprüfung, um zu schauen ob die vom Computer errechneten Werte sinnhaft sind, muss immer erfolgen. Dadurch wird eine mögliche Fehlerquelle minimiert.

Dokumentation in SVN

Die Messdaten, sowie die für die Auswertung verwendeten Matlabskripte können hier in SVN aufgerufen werden.

Literatur

→ zurück zum Hauptartikel: SDE Praktikum Autonomes Fahren