校准单个摄像机时的RMS值较低,而stereoCalibrate中的RMS值较高

时间:2017-08-30 11:15:31

标签: python opencv camera-calibration stereo-3d photogrammetry

我正在尝试校准由两个相同的Canon EOS60D组成的立体声设置,我将用它来进行摄影测量。 为了校准相机我正在使用高精度circlegrid模板。我能够使用cv2.findCirclesGrid检测圆的中心点,并且能够很好地校准单个相机。当我尝试在OpenCV中使用cv2.stereoCalibrate功能校准两个摄像头时出现问题。 我将阐明所采取的步骤,并发布一些我已经获得的输出的代码片段。如果有人能指出我做错了什么,我将不胜感激。

步骤

1)第一步是在OpenCV中使用cv2.findCirclesGrid函数检测圆弧网格模式。

2)然后使用每个摄像机检测到的网格图案,我使用cv2.calibrateCamera来获取摄像机矩阵和两个摄像机的失真系数。

3)获取两台摄像机的摄像机矩阵和失真系数后,我将它们传递给cv2.stereoCalibrate功能。

输出

校准左相机后的

输出如下

Left Camera Return Value :  0.202690712694
Left Camera Camera Matrix :  [[  2.42046647e+04   0.00000000e+00       1.78281995e+03]
[  0.00000000e+00   2.42115121e+04   2.51720578e+03]
[  0.00000000e+00   0.00000000e+00   1.00000000e+00]]
Left Camera Dist Coeff :  [[-0.09448288 -1.38934436  0.00951455 -0.00568115  0.11248399]]
校准右镜头后输出如下

Right Camera Return value :  0.258429588138
Right Camera Camera Matrix :  [[  2.69094574e+04   0.00000000e+00   1.70580157e+03]
[  0.00000000e+00   2.69534209e+04   2.55185400e+03]
[  0.00000000e+00   0.00000000e+00   1.00000000e+00]]
Right Camera Dist Coeff :  [[-0.1854594   1.89124255  0.00592814 -0.00377697  0.05715002]]

从上面的输出中可以看出,cv2.calibrateCamera的返回值都是合理的。

校准立体声设置后的

输出如下

StereoCalib Return Value :  278.98818985
Rotation Vector :  [[ 0.72415334  0.13289823  0.67671265]
[ 0.68078781  0.018949   -0.73223554]
[-0.11013584  0.99094853 -0.07675351]]
Translation Vector  [[-1.20860215]
[ 1.23017549]
[ 2.08116679]]
Essential Matrix :  [[-1.55231939  1.17960457  1.42948401]
[ 1.37397347  1.47424592  1.31558743]
[-1.7136373  -0.18638995  0.05250614]]
Fundamental Matrix :  [[ -3.15554184e-07   2.39721211e-07   6.99264445e-03]
[  2.78844610e-07   2.99110045e-07   5.21248054e-03]
[ -9.54712002e-03  -2.19149124e-03   1.00000000e+00]]

但立体声校准的返回值太高。

PARAMS

我在cv2.stereoCalibrate中使用的标志和标准如下

flags = cv2.CALIB_FIX_INTRINSIC

criteria = cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 1000, 1e-6

如果有人能指出我在哪里做错了,我将不胜感激。

0 个答案:

没有答案