[PYTHON] Comprendre visuellement l'étalonnage de la caméra

Le calibrage de l'appareil photo est utilisé pour corriger la distorsion de l'objectif, mais il semble difficile de comprendre comment chaque coefficient l'affecte.

Je vais donc essayer de le comprendre intuitivement.

Qu'est-ce que l'étalonnage de la caméra?

À moins qu'il ne s'agisse d'un modèle d'appareil photo à sténopé idéal, l'image est déformée comme indiqué à gauche. En trouvant le coefficient de distorsion propre à la caméra, il est possible de corriger une telle image déformée.

image.png

Comment fonctionne l'étalonnage de la caméra

Lorsque vous calibrez votre appareil photo, vous imprimez quelque chose appelé un damier. image.png

Prenez des dizaines de photos sous tous les angles avec l'appareil photo dont vous souhaitez mesurer les paramètres.

image.png

Vous pouvez maintenant faire correspondre la coordonnée bidimensionnelle $ x $ de la caméra avec la coordonnée tridimensionnelle $ X $ de l'espace.

x = P X

Ce $ P $ est la matrice de la caméra. Il peut être calculé par des équations simultanées à 3 lignes et 4 colonnes.

P = K [R|t]

$ P $ peut être décomposé en la matrice triangulaire supérieure $ K $ et la matrice orthogonale normale $ R $.

$ K $ ...... Paramètre interne, paramètre intrinsèque (distance focale, centre optique, coefficient de cisaillement) $ [R | t] $ ... Paramètre externe, paramètre extrinsèque (rotation et conversion de la caméra)

Ce sera.

Paramètres internes

Ce paramètre interne $ K $

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

Il représente la distance focale $ (f_x, f_y) $, le centre optique $ (c_x, c_y) $ et le coefficient de cisaillement $ s $.

la mise en oeuvre

En Python, vous pouvez utiliser OpenCV pour trouver $ K $ (mtx) comme suit.

#Détecter les points du damier
ret, corners = cv2.findChessboardCorners(gray, (8,6), None)

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

#Correction de la distorsion
dst = cv2.undistort(img, mtx, dist, None, newMtx)

Compréhension intuitive

Animons des paramètres tels que la distance focale, le centre optique et le coefficient de cisaillement, respectivement. Seuls les paramètres cibles sont modifiés à partir de la matrice de caméra obtenue.

L'image originale

test_image.jpg

Distance focale

Infini → Distance focale appropriée → Petite

(1) f_x, f_y cxcy.gif

(2) f_x fx.gif

(3) f_y fy.gif

Centre optique

Négatif → position correcte → positif

(1) c_x cx.gif

(1) c_y cy.gif

Coefficient de cisaillement

Négatif → valeur propre → positif s.gif En anglais, c'est Skew.

Résumé

Comment était-ce. Il s'avère que le calibrage de l'appareil photo est utilisé pour corriger la distorsion.

Travail futur

Je veux aussi faire le coefficient de distorsion dans la direction radiale et le coefficient de distorsion dans la direction circonférentielle.

Citation d'image

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

Recommended Posts

Comprendre visuellement l'étalonnage de la caméra
Calibrage de la caméra
Utiliser le fichier d'étalonnage de la caméra avec OpenCvSharp4
Créez un modèle d'échiquier pour l'étalonnage de la caméra