Prerequisiti: OpenCV
Una fotocamera è parte integrante di diversi domini come la robotica, l’esplorazione dello spazio, ecc fotocamera sta giocando un ruolo importante. Aiuta a catturare ogni momento e utile per molte analisi. Per utilizzare la fotocamera come sensore visivo, dovremmo conoscere i parametri della fotocamera. La calibrazione della fotocamera non è altro che stimare i parametri di una fotocamera, i parametri relativi alla fotocamera sono necessari per determinare una relazione accurata tra un punto 3D nel mondo reale e la sua corrispondente proiezione 2D (pixel) nell’immagine catturata da quella fotocamera calibrata.
Dobbiamo considerare entrambi i parametri interni come la lunghezza focale,il centro ottico e i coefficienti di distorsione radiale dell’obiettivo ecc., e parametri esterni come rotazione e traduzione della macchina fotografica rispetto ad alcun sistema di coordinate di mondo reale.
Librerie richieste:
- La libreria OpenCV in python è una libreria di computer vision, utilizzata principalmente per l’elaborazione di immagini, l’elaborazione video e l’analisi, il riconoscimento facciale e il rilevamento, ecc.
- Numpy è un pacchetto di elaborazione di array generico. Fornisce un oggetto array multidimensionale ad alte prestazioni e strumenti per lavorare con questi array.
Calibrazione della fotocamera può essere fatto in un approccio step-by-step:
- Passo 1: Prima definire le coordinate del mondo reale dei punti 3D utilizzando la dimensione nota del motivo a scacchiera.
- Fase 2: Diversi punti di vista di immagine check-board viene catturato.
- Passo 3: findChessboardCorners() è un metodo in OpenCV e utilizzato per trovare le coordinate dei pixel (u, v) per ogni punto 3D in immagini diverse
- Passo 4: Quindi calibrateCamera() metodo viene utilizzato per trovare i parametri della fotocamera.
Ci vorrà il nostro calcolato (threedpoints, twodpoints, grayColor.shape, None, None) come parametri e restituisce l’elenco con elementi come matrice della fotocamera, coefficiente di distorsione, vettori di rotazione e vettori di traduzione.
La matrice della fotocamera aiuta a trasformare i punti degli oggetti 3D in punti immagine 2D e il coefficiente di distorsione restituisce la posizione della fotocamera nel mondo, con i valori dei vettori di rotazione e traduzione
Di seguito è riportato il programma completo dell’approccio sopra riportato:
import
cv2
import
numpy as np
import
os
import
glob
CHECKERBOARD
=
(
6
,
9
)
criteria
=
(cv2.TERM_CRITERIA_EPS
+
cv2.TERM_CRITERIA_MAX_ITER,
30
,
0.001
)
threedpoints
=
twodpoints
=
objectp3d
=
np.zeros((
1
, CHECKERBOARD
*
CHECKERBOARD,
3
), np.float32)
objectp3d
=
np.mgrid,
0
:CHECKERBOARD].T.reshape(
-
1
,
2
)
prev_img_shape
=
None
images
=
glob.glob(
'*.jpg'
)
for
filename
in
images:
image
=
cv2.imread(filename)
grayColor
=
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, corners
=
cv2.findChessboardCorners(
grayColor, CHECKERBOARD,
cv2.CALIB_CB_ADAPTIVE_THRESH
+
cv2.CALIB_CB_FAST_CHECK
+
cv2.CALIB_CB_NORMALIZE_IMAGE)
if
ret
=
=
True
:
threedpoints.append(objectp3d)
corners2
=
cv2.cornerSubPix(
grayColor, corners, (
11
,
11
), (
-
1
,
-
1
), criteria)
twodpoints.append(corners2)
image
=
cv2.drawChessboardCorners(image,
CHECKERBOARD,
corners2, ret)
cv2.imshow(
'img'
, image)
cv2.waitKey(
0
)
cv2.destroyAllWindows()
h, w
=
image.shape
ret, matrix, distortion, r_vecs, t_vecs
=
cv2.calibrateCamera(
threedpoints, twodpoints, grayColor.shape,
None
,
None
)
print
(
" Camera matrix:"
)
print
(matrix)
print
(
"\n Distortion coefficient:"
)
print
(distortion)
print
(
"\n Rotation Vectors:"
)
print
(r_vecs)
print
(
"\n Translation Vectors:"
)
print
(t_vecs)
Ingresso:
Uscita:
Camera matrix: ] Distortion coefficient: ] Rotation Vectors: , , ]), array(, , ]), array(, , ])] Translation Vectors: , , ]), array(, , ]), array(, , ])]