Я использую OpenCV как Tutoral здесь . К сожалению, я не понимаю, как можно уменьшить среднюю ошибку воспроизведения. Я использую шахматную доску размером от 6 до 4. Я также могу влиять на область поиска с помощью функции cornerSubPix. У меня ошибка от 0,7 до примерно 3 пикселей в зависимости от камеры, но разрешение всегда одинаковое.
Кроме того, у меня есть две линзы. Чем меньше погрешность исходит от камеры с фокусным расстоянием 6 мм, тем больше погрешность исходит от камеры с фокусным расстоянием 30 мм.
Из-за моего кода результат плохой? Или я должен что-то учитывать при съемке?
Я использую следующий код:
path_name = './data/*.jpg'
board_width = 6
board_height = 4
square_size = 110 #[mm]
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((board_height*board_width,3), np.float32)
objp[:,:2] = np.mgrid[0:board_width,0:board_height].T.reshape(-1,2)*square_size
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.
images = glob.glob(path_name)
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (board_width,board_height),None)
if ret == True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray,corners,(5,5),(-1,-1),criteria)
imgpoints.append(corners2)
img = cv2.drawChessboardCorners(img, (board_width,board_height), corners2,ret)
#image = cv2.resize(img, (1028, 752))
#cv2.imshow("image", image)
#cv2.waitKey(100)
cv2.destroyAllWindows()
retval, cameraMatrix, distCoeffs, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
retval, cameraMatrix, distCoeffs, rvecs, tvecs, stdDeviationsIntrinsics, stdDeviationsExtrinsics, perViewErrors = cv2.calibrateCameraExtended(objpoints, imgpoints, gray.shape[::-1], cameraMatrix, distCoeffs)
cv_file = cv2.FileStorage("cam.yml", cv2.FILE_STORAGE_WRITE)
[...]
cv_file.release()
Тогда мой результат как:
[...]
camera_matrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 1.9559374807020929e+03, 0., 2.0428473382526779e+03, 0.,
1.9638127960739512e+03, 1.5557663707100560e+03, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ -2.1838555943133031e-01, 2.7847719015637917e+00,
4.1974899313532484e-03, -8.2215146697108520e-04,
-1.3016726976766938e+01 ]
avg_reprojection_error: 2.9218207016515794e+00
[...]