前提条件:OpenCV

カメラはロボット工学、宇宙探査などのいくつかの領域の不可欠な部分ですカメラは大きな役割を果 それは、それぞれ、すべての瞬間をキャプチャするのに役立ち、多くの分析のために役立ちます。 カメラを視覚センサーとして使用するには、カメラのパラメータを知る必要があります。 カメラのキャリブレーションは、カメラのパラメータを推定するだけであり、カメラに関するパラメータは、現実世界の3Dポイントと、そのキャリブレーションされたカメラによってキャプチャされた画像内の対応する2D投影(ピクセル)との間の正確な関係を決定するために必要とされる。

レンズの焦点距離、光学中心、半径方向の歪み係数などの内部パラメータの両方を考慮する必要があります。 そして、いくつかの現実世界の座標系に対するカメラの回転と平行移動のような外部パラメータ。

必要なライブラリ:

  • pythonのOpenCVライブラリは、主に画像処理、ビデオ処理、分析、顔認識、検出などに使用されるコンピュータビジョンライブラリです。
  • Numpyは汎用の配列処理パッケージです。 これは、これらの配列を操作するための高性能多次元配列オブジェクトとツールを提供します。

カメラの校正は段階的なアプローチで行うことができます:

  • ステップ1:最初に市松模様の既知のサイズを使用して3Dポイントの現実世界の座標を定義します。
  • ステップ2: チェックボード画像の異なる視点がキャプチャされます。ステップ3:Findchessboardcorners()はOpenCVのメソッドであり、異なる画像内の各3Dポイントのピクセル座標(u、v)を見つけるために使用されます
  • ステップ4:次に、calibrateCamera()メソッ

計算された(threedpoints,twodpoints,grayColor.shape,None,None)をパラメータとして、カメラ行列、歪み係数、回転ベクトル、平行移動ベクトルとして要素を持つリストを返します。

カメラ行列は、3Dオブジェクトポイントを2D画像ポイントに変換するのに役立ち、歪み係数は回転ベクトルと平行移動ベクトルの値で、世界のカ:

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)



入力:

出力:

 Camera matrix: ] Distortion coefficient: ] Rotation Vectors: , , ]), array(, , ]), array(, , ])] Translation Vectors: , , ]), array(, , ]), array(, , ])]
記事タグ:

コメントを残す

メールアドレスが公開されることはありません。