předpoklady: OpenCV

kamera je nedílnou součástí několika domén, jako je robotika, průzkum vesmíru atd. kamera hraje hlavní roli. Pomáhá zachytit každý okamžik a užitečné pro mnoho analýz. Abychom mohli kameru používat jako vizuální senzor, měli bychom znát parametry kamery. Kalibrace kamery není nic jiného než odhad parametrů kamery, parametry kamery jsou nutné k určení přesného vztahu mezi 3D bodem v reálném světě a jeho odpovídající 2D projekcí (pixelem) v obrazu zachyceném touto kalibrovanou kamerou.

musíme zvážit oba vnitřní parametry, jako je ohnisková vzdálenost, optické centrum a koeficienty radiálního zkreslení objektivu atd., a externí parametry, jako je rotace a překlad kamery s ohledem na nějaký souřadnicový systém v reálném světě.

požadované knihovny:

  • Knihovna OpenCV v Pythonu je knihovna počítačového vidění, která se většinou používá pro zpracování obrazu, zpracování videa a analýzu, rozpoznávání a detekci obličeje atd.
  • Numpy je univerzální balíček pro zpracování polí. Poskytuje vysoce výkonný objekt multidimenzionálního pole a nástroje pro práci s těmito poli.

kalibraci kamery lze provést krok za krokem:

  • Krok 1: nejprve definujte souřadnice 3D bodů v reálném světě pomocí známé velikosti šachovnicového vzoru.
  • Krok 2: Různé pohledy na check-board obrazu je zachycen.
  • Krok 3: findChessboardCorners () je metoda v OpenCV a používá se k nalezení souřadnic Pixelů (u, v) pro každý 3D bod v různých obrázcích
  • Krok 4: poté se k nalezení parametrů kamery použije metoda calibrateCamera ().

bude trvat naše vypočtené (threedpoints, twodpoints, grayColor.tvar, Žádný, Žádný) jako parametry a vrací seznam s prvky jako matice kamery, koeficient zkreslení, vektory rotace a Translační vektory.

matice kamery pomáhá transformovat body 3D objektů na 2D obrazové body a koeficient zkreslení vrací polohu kamery ve světě, s hodnotami vektorů rotace a translace

níže je uveden kompletní program výše uvedeného přístupu:

Python3

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)



Vstup:

Výstup:

 Camera matrix: ] Distortion coefficient: ] Rotation Vectors: , , ]), array(, , ]), array(, , ])] Translation Vectors: , , ]), array(, , ]), array(, , ])]
Značky Článku:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.