Kalibrierung der Kamera
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.
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.
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.
Möglichkeiten zur Parameterbestimmung
Durchführung der Kalibrierung mit der MATLAB Camera Calibrator App
Automatische Kamera Kalibrierung (mit Matlab Skript)
Die Automatische Kamera Kalibrierung ist ein einem eigenen Artikel beschrieben. Dort werden mit einem fertigen Matlab Skript die Kamera Parameter bestimmt und zur Weiterverarbeitung verwendet.
Durchführung der Kalibrierung mit Visual Studio
Nachfolgend wird die Kamerakalibrierung mit Visual Studio dargestellt und erklärt.
Vorgehensweise, Funktionsweise und Hinweise |
VorgehensweiseUm 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.
FunktionsweiseDie 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
|
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.
→ zurück zum Hauptartikel: SDE Praktikum Autonomes Fahren