
1、双目标定
双目标定的目标是获取左右目相机的内参矩阵、畸变向量、旋转矩阵清静移矩阵。
除了Matlab的标定工具箱之外,OpenCV同样也实现了张友正标定法,而我们只须要调用相关的函数即可对相机举行标定。
双目相机标定步骤:
- retL, cornersL = cv2.findChessboardCorners(ChessImaL,(self.width, self.height), cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_FILTER_QUADS) # 提取左图每一张图片的角点
- retR, cornersR = cv2.findChessboardCorners(ChessImaR,(self.width, self.height), cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_FILTER_QUADS) # 提取右图每一张图片的角点
复制代码
- criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
- cv2.cornerSubPix(ChessImaL, cornersL, (11, 11), (-1, -1), criteria) # 亚像素精确化,对粗提取的角点进行精确化
- cv2.cornerSubPix(ChessImaR, cornersR, (11, 11), (-1, -1), criteria) # 亚像素精确化,对粗提取的角点进行精确化
复制代码
- # 左侧相机单独标定
- retL, K1, D1, rvecsL, tvecsL = cv2.calibrateCamera(objpoints,imgpointsL,ChessImaL.shape[::-1], None, None)
- # 右侧相机单独标定
- retR, K2, D2, rvecsR, tvecsR = cv2.calibrateCamera(objpoints,imgpointsR,ChessImaR.shape[::-1], None, None)
复制代码
- criteria_stereo = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-5)
- flags = 0
- flags |= cv2.CALIB_FIX_INTRINSIC
- # 内参、畸变系数、平移向量、旋转矩阵
- retS, K1, D1, K2, D2, R, T, E, F = cv2.stereoCalibrate(objpoints,imgpointsL,imgpointsR,K1,D1,K2,D2,ChessImaR.shape[::-1], criteria_stereo,flags)
复制代码 我们要注意函数中的flags:
- CV_CALIB_FIX_INTRINSIC:固定K和D矩阵。这是默认标志。如果你校准好你的相机,那就只求解
|