[PYTHON] Kamerakalibrierung visuell verstehen

Die Kamerakalibrierung wird zur Korrektur von Objektivverzerrungen usw. verwendet, aber es scheint schwierig zu verstehen, wie sich jeder Koeffizient darauf auswirkt.

Also werde ich versuchen, es intuitiv zu verstehen.

Was ist Kamerakalibrierung?

Sofern es sich nicht um ein ideales Lochkameramodell handelt, ist das Bild wie links gezeigt verzerrt. Durch Auffinden des der Kamera eigenen Verzerrungskoeffizienten ist es möglich, ein derart verzerrtes Bild zu korrigieren.

image.png

So funktioniert die Kamerakalibrierung

Wenn Sie Ihre Kamera kalibrieren, drucken Sie ein sogenanntes Schachbrett. image.png

Nehmen Sie mit der Kamera, deren Parameter Sie messen möchten, Dutzende von Fotos aus allen Winkeln auf.

image.png

Jetzt können Sie die zweidimensionale Koordinate $ x $ der Kamera mit der dreidimensionalen Koordinate $ X $ des Raums abgleichen.

x = P X

Dieses $ P $ ist die Kameramatrix. Sie kann durch gleichzeitige Gleichungen mit 3 Zeilen und 4 Spalten berechnet werden.

P = K [R|t]

$ P $ kann in die obere Dreiecksmatrix $ K $ und die normale orthogonale Matrix $ R $ zerlegt werden.

$ K $ ...... Interner Parameter, intrinsischer Parameter (Brennweite, optisches Zentrum, Scherkoeffizient) $ [R | t] $ ... Externer Parameter, extrinsischer Parameter (Kameradrehung und -konvertierung)

Es wird sein.

Interne Parameter

Dieser interne Parameter $ K $

K = \begin{pmatrix}
f_x & s & c_x \\
0 & f_y & c_y \\
0 & 0 & 1 \\
\end{pmatrix}

Es repräsentiert die Brennweite $ (f_x, f_y) $, das optische Zentrum $ (c_x, c_y) $ und den Scherkoeffizienten $ s $.

Implementierung

In Python können Sie OpenCV verwenden, um $ K $ (mtx) wie folgt zu finden.

#Erkennen Sie Punkte vom Schachbrett
ret, corners = cv2.findChessboardCorners(gray, (8,6), None)

#Kalibrierung
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size,None,None)

#Verzerrungskorrektur
dst = cv2.undistort(img, mtx, dist, None, newMtx)

Intuitives Verständnis

Animieren wir Parameter wie Brennweite, optisches Zentrum bzw. Scherkoeffizient. Aus der erhaltenen Kameramatrix werden nur die Zielparameter geändert.

Das Originalbild

test_image.jpg

Brennweite

Unendlichkeit → Angemessene Brennweite → Klein

(1) f_x, f_y cxcy.gif

(2) f_x fx.gif

(3) f_y fy.gif

Optisches Zentrum

Negativ → richtige Position → positiv

(1) c_x cx.gif

(1) c_y cy.gif

Scherkoeffizient

Negativ → richtiger Wert → positiv s.gif Auf Englisch ist es Skew.

Zusammenfassung

Wie war das. Es stellt sich heraus, dass die Kamerakalibrierung zur Korrektur von Verzerrungen verwendet wird.

Zukünftige Arbeit

Ich möchte auch den Verzerrungskoeffizienten in radialer Richtung und den Verzerrungskoeffizienten in Umfangsrichtung machen.

Bildzitat

https://github.com/DavidWangWood/Camera-Calibration-Python https://jp.mathworks.com/help/vision/examples/evaluating-the-accuracy-of-single-camera-calibration.html

Recommended Posts

Kamerakalibrierung visuell verstehen
Kamerakalibrierung
Verwenden Sie die Kamerakalibrierungsdatei mit OpenCvSharp4
Erstellen Sie ein Schachbrettmuster für die Kamerakalibrierung