相机标定

一、前提准备

1、伪硬件

名称 数量
标定板8×10 1
手机 1
待标定照片 12
支架 1

手机固定在支架上,调整标定板位置,对其从不同角度进行拍照,所拍摄照片为11张。保存到文件夹后对其进行依次命名:*.jpg(如:1.jpg)

2、软件

  使用的编程语言:python
  工具包:opencv, numpy, glob

二、寻找标定棋盘并进行标定

1、python + opencv 的方案

  利用opencv寻找棋盘,所用到的函数如下:

  •  cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS:设置寻找亚像素点的终止迭代规则,前者为在指定迭代次数后停止算法,后者为要求的精度,在相机标定时才用的最大迭代次数为30次,最大精度为0.001。
  •  images = glob.glob(r'G:\biaoding\*.jpg'):glob函数能够返回所有匹配到的文件路径列表,用来读取待标定的棋盘图像。
  •   cv2.findChessboardCorners:该函数用来找到棋盘,其返回值为角点,且会按一定顺序排列。
  •   cv2.cornerSubPix:在上述找到角点的前提下寻找亚像素点,目的是为了增强检测角点的精度。
  •   cv2.drawChessboardCorners:绘制找到的角点
  •   retv, mtx, dist, rvecs, tvecs = cv2.calibrateCamera:相机标定函数,经过以上的计算以及找角点后进行相机标定,返回值为相机矩阵,畸变系数,旋转以及变换向量。

2、具体实施

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import cv2
import glob
import numpy as np


# 采用循环找取亚像素点的参数,最大迭代次数采用30次,精度为0.001,两者同时满足时停止迭代
criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)
# 所采用的棋盘规格8×10
objp = np.zeros((7 * 9, 3), np.float32)
objp[:, :2] = np.mgrid[0:9, 0:7].T.reshape(-1, 2) # 将世界坐标系建在标定板上,所有点的Z坐标全部为0
obj_points = [] # 坐标系中的三维点
img_points = [] # 图像平面中的二维点
# 从文件中依次读取照片
images = glob.glob(r'G:\biaoding\*.jpg')
for fname in images:
img = cv2.imread(fname)
cv2.namedWindow('img', 0)
cv2.resizeWindow('img', 600, 600)
cv2.imshow('img',img)
cv2.waitKey()
# cv2.destroyAllWindows()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
size = gray.shape[::-1]
# print(size)
# findchessboardcorner函数里寻找棋盘图的内角点
retv, corners = cv2.findChessboardCorners(gray, (7, 9), None)
print(retv)
if retv:
obj_points.append(objp)
# 在原角点的基础上寻找亚像素角点
corners2 = cv2.cornerSubPix(gray, corners, (6, 6), (-1, -1), criteria)
print(corners2)
if [corners2]:
img_points.append(corners2)
else:
img_points.append(corners)
# 绘制找到的角点
cv2.drawChessboardCorners(img, (7, 9), corners, retv)
cv2.namedWindow('img', 0)
cv2.resizeWindow('img', 600, 600)
cv2.imshow('img', img)
cv2.waitKey(20000)

  待标定图像如下所示:
标定图像.png

找到棋牌并进行标定后的图片如下图所示:

标定前 标定后
4.png 4(4).png
5.png 5(5).png
6.png 6(6).png

3、相机相关参数

相机矩阵Mtx:

1
2
3
[[1.86761254e+04 0.00000000e+00 4.09207342e+02]
[0.00000000e+00 1.77781655e+03 4.23180100e+02]
[0.00000000e+00 0.00000000e+00 1.00000000e+00]]

畸变系数dist:

1
2
dist:
[[-0.05541607 -0.17312714 0.0776916 -0.0767596 0.07245637]]

外参旋转向量:

1
2
3
[[ 2.10761526],
[-0.5901612 ],
[-2.10187724]]

外参平移向量:

1
2
3
[[ 1.32373017],
[16.72137644],
[57.99935184]]