Kalibrierung der Kamera: Unterschied zwischen den Versionen
Zeile 37: | Zeile 37: | ||
== Verbesserungsmöglichkeiten == | == Verbesserungsmöglichkeiten == | ||
Eine mögliche Aufgabe für ein | Eine mögliche Aufgabe für ein nachfolgendes Team ist, die extrinsische Kalibrierung zu verbessern und zu automatisieren. Am besten wäre eine vollständig automatisierte Kalibrierung. eine andere und einfachere Möglichkeit wäre es das Programm so zu verbessern, dass es nicht neu gestartet werden muss Außerdem um die Werte für die Kalibrierung zu verändern. Dazu könnte z. B. eine Texteingabe oder ein Schieberegler verwendet werden. Außerdem muss der Code noch genauer getestet und Code-Reviews durchgeführt werden. |
Version vom 11. Februar 2021, 16:22 Uhr
Autor: Tim Kruse
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.
Durchführung der Kalibrierung
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.
- 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.
- 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 zwischen der rechten Linie und der Mittelline sowie zwischen zwei Mittellinien liegen. In Abbildung 1 sieht man die grauen Linien am unteren Bildrand.
- 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.
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
- 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 von OpenCV: Installation 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.
Verbesserungsmöglichkeiten
Eine mögliche Aufgabe für ein nachfolgendes Team ist, die extrinsische Kalibrierung zu verbessern und zu automatisieren. Am besten wäre eine vollständig automatisierte Kalibrierung. eine andere und einfachere Möglichkeit wäre es das Programm so zu verbessern, dass es nicht neu gestartet werden muss Außerdem um die Werte für die Kalibrierung zu verändern. Dazu könnte z. B. eine Texteingabe oder ein Schieberegler verwendet werden. Außerdem muss der Code noch genauer getestet und Code-Reviews durchgeführt werden.