Zur Ausstattung des Labors gehört eine ultrakompakte GoPro HD Hero 2, welche mit 170° Öffnungswinkel eine exzellente Abbildung des Blickfelds des Fahrers wiedergeben kann. Das Problem einer jeden Kamera ist die Verzeichnung, welche sich durch das Objektiv ergibt. Nachfolgend ist beschrieben, wie man die internen Kamera Parameter mit Hilfe der OpenCV Bibliothek und Python ermitteln kann.
GoPro HD Hero 2 Camera Calibration
Zur Hilfe genommen wurde die OpenCV Bibliothek, welche nahezu alle wichtigen Algorithmen für die Bildverarbeitung beinhaltet. So auch einen Befehl namens
[python]FindChessboardCorners[/python]
welcher im aufgenommenen Foto ein Schachbrett erkennt und die Pixelkoordinaten der Feldpunkte ermittelt.
Diese können dann an die Funktion
[python]CalibrateCamera2[/python]
übergeben werden, welche über die Abstände (in Pixel) der ermittelten Punkte eine Verzeichnungskorrektur berechnet. Die tatsächlichen geometrischen Abmessungen des Schachbrettmusters wird dem Algorithmus ebenfalls zur Verfügung gestellt, sodass nun die Korrektur von Pixel –> realen Welt (in cm) vorgenommen werden kann. Rein mathematisch ist diese Transformation beschrieben durch
[math]s \begin{bmatrix}u\\v\\1 \end{bmatrix} = \begin{bmatrix}f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix}r_{11} & r_{12} & r_{13} & t_1 \\ r_{21} & r_{22} & r_{23} & t_2 \\ r_{31} & r_{32} & r_{33} & t_3 \end{bmatrix} \begin{bmatrix}X \\ Y \\ Z \\ 1\end{bmatrix}[/math]
Dabei sind X, Y und Z die realen 3D Welt-Koordinaten, welche die Kamera auf dem 2D Chip abbildet. Die Parameter cx und cy sind für gewöhnlich die Mitte des aufgenommenen Bildes. Im Beispiel der GoPro HD Hero 2 mit 5MP Wide Einstellung (Auflösung 2592×1944) ist die Bildmitte bei ca. 2592/2=1296px sowie 1944/2=972px zu erwarten. Die Faktoren r können zur Rotation, t zur Translation der Kamera benutzt werden (Abbildung von 3D Realwelt auf 2D Foto). Interessant sind die kamerainternen, optischen Faktoren fx und fy, welche durch den Algorithmus ermittelt werden. Diese geben die Verzeichnung der Pixel in Foto u- und v-Richtung an. Weitere Informationen hier.
Entzerrung des Fotos
Mit Hilfe der ermittelten Parameter fx und fy kann bei Annahme eines ebenen Schachbrettes (Z=0) und der Ermittlung von radialen und tangentialen Verzeichnungsparametern, so genannten Distortion Parameter k (wird alles von CalibrateCamera2 übernommen) eine Entzerrung berechnet werden.
[python]InitUndistortMap[/python]
GoPro HD Hero 2 interne Parameter
Die ermittelten, so genannten intrinsic Parameter, der GoPro HD Hero2 für den 5MP Wide Fotomodus sind folgende:
[math]A=\begin{bmatrix}767{,}4898 & 0{,}0 & 1296 \\ 0{,}0 & 762{,}59 & 972 \\ 0{,}0 & 0{,}0 & 1\end{bmatrix}[/math]
GoPro HD Hero 2 Verzeichnungsparameter
Die radiale Verzeichnung wird in den Parametern k1…k3 berechnet, die tangentiale in den Parametern p1 und p2. Für den 5MP Wide Fotomodus sind diese:
[math]k_1=-0{,}10541202873 \\
k_2=0{,}0128245307133 \\
p_1=-0{,}00171211222187 \\
p_2=0{,}00142017123289 \\
k_3=-0{,}000823813956231[/math]
Da die GoPro einen konstanten Focus hat, können diese ermittelten Parameter auf alle jemals aufgenommenen Szenen (Bilder) angewendet werden um eine Verzeichnung heraus zu rechnen. Selbstverständlich nur, wenn die Einstellung 5MP Wide (4:3) gewählt wird.
Bei Videoaufnahmen ergibt sich durch die 16:9 Auflösung eine andere Verzeichnung.