Kameraparametrierung

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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:

MATLAB Camera Calibrator Toolbox





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.


Orginalbid (links) zu kalibriertem Bild (rechts)

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.


Zurück zum Hauptartikel:
OSE - Objekt - und Spurerkennung