Forutsetninger: OpenCV
et kamera er en integrert del av flere domener som robotikk, romforskning, etc kameraet spiller en viktig rolle. Det bidrar til å fange hvert øyeblikk og nyttig for mange analyser. For å kunne bruke kameraet som en visuell sensor, bør vi vite parametrene til kameraet. Kamerakalibrering er ingenting annet enn å estimere parametrene til et kamera, parametere om kameraet kreves for å bestemme et nøyaktig forhold MELLOM ET 3d-punkt i den virkelige verden og dets tilsvarende 2d-projeksjon (piksel) i bildet tatt av det kalibrerte kameraet.
Vi må vurdere både interne parametere som brennvidde, optisk senter og radiale forvrengningskoeffisienter på linsen etc., og eksterne parametere som rotasjon og oversettelse av kameraet med hensyn til noen virkelige verden koordinatsystem.
Nødvendige biblioteker:
- OpenCV library I python Er et datasynbibliotek, mest brukt til bildebehandling, videobehandling og analyse, ansiktsgjenkjenning og deteksjon, etc.
- Numpy er en generell array-behandling pakke. Det gir en høy ytelse flerdimensjonal array objekt og verktøy for å arbeide med disse arrays.
Kamerakalibrering kan gjøres i en trinnvis tilnærming:
- Trinn 1: definer først virkelige koordinater AV 3D-punkter ved hjelp av kjent størrelse på sjakkbrettmønster.
- Trinn 2: Ulike synspunkter på check-board bildet er tatt.
- Trinn 3: findChessboardCorners () er en Metode I OpenCV og brukes til å finne pikselkoordinater (u, v) for HVERT 3d-punkt i forskjellige bilder
- Trinn 4: deretter brukes calibrateCamera () – metoden til å finne kameraparametere.
det vil ta vår beregnede (threedpoints, twodpoints, grayColor.figur, Ingen, Ingen) som parametere og returnerer liste med elementer Som Kameramatrise, Forvrengningskoeffisient, Rotasjonsvektorer og Oversettelsesvektorer.
Kameramatrise bidrar til å transformere 3d-objekter poeng TIL 2d bildepunkter Og Forvrengningskoeffisienten returnerer posisjonen til kameraet i verden, med Verdiene For Rotasjon og Oversettelsesvektorer
Nedenfor er det komplette programmet for ovennevnte tilnærming:
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)
Input:
Utgang:
Camera matrix: ] Distortion coefficient: ] Rotation Vectors: , , ]), array(, , ]), array(, , ])] Translation Vectors: , , ]), array(, , ]), array(, , ])]