我有一个立体相机,我需要进行内在和外在校准。尽管重新投影误差似乎很好(<0.1像素),但外部特性很奇怪。左右摄像机之间的平移太小。
我遵循这个tutorial来获取两个摄像机的内在函数,然后将stereoCalibrate用于外在函数。
# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(8,6,0)
objp = np.zeros((9*7,3), np.float32)
objp[:,:2] = np.mgrid[0:9,0:7].T.reshape(-1,2)
objpoints2 = []
imgpoints2 = []
# Load images
images = glob.glob('*.tiff')
for fname in images:
img = cv2.imread(fname)
# Find the chess board corners
ret, corners = cv2.findCirclesGrid(img, (9,7), flags=cv2.CALIB_CB_SYMMETRIC_GRID, blobDetector=detector)
# If found, add object points, image points (after refining them)
if ret:
objpoints2.append(objp)
imgpoints2.append(corners)
# Draw and display the corners
img = cv2.drawChessboardCorners(img, (9,7), corners, ret)
cv2.imshow('img', img)
cv2.waitKey(50)
cv2.destroyAllWindows()
matrix2, distort2 = cv2.calibrateCamera(objpoints2, imgpoints2, (640,480), None, None)
然后我进行立体声校准:
R, T = cv2.stereoCalibrate(objpoints2, imgpoints1, imgpoints2, matrix1, distort1, matrix2, distort2, (640,480))
我的问题是objp的正确值应该是什么?我使用了本教程中的值,但这是否意味着我的图案是1毫米的appart?
objp[:,:2] = np.mgrid[0:9,0:7].T.reshape(-1,2)
非常感谢。
答案 0 :(得分:0)
我找到了答案。
对于固有校准,如果我没有在拐角之间提供正确的距离也没关系。
但是,对于外部(立体声)校准,我必须提供正确的值,否则比例会错误并且平移会很小。
或者,我需要将实际的图案距离乘以最终的平移矢量,以获得正确的比例。