Python 校准单个摄像机时,RMS值较低,而在stereoCalibrate中,RMS值较高
我正在尝试校准一个由两个相同的Python 校准单个摄像机时,RMS值较低,而在stereoCalibrate中,RMS值较高,python,opencv,camera-calibration,stereo-3d,photogrammetry,Python,Opencv,Camera Calibration,Stereo 3d,Photogrammetry,我正在尝试校准一个由两个相同的佳能EOS60D组成的立体设置,我将使用它进行摄影测量。 为了校准摄像机,我使用了高精度的circlegrid模板。我能够使用cv2.findCirclesGrid检测圆的中心点,并且能够很好地校准单个摄像头。当我尝试使用OpenCV中的cv2.stereoCalibrate功能校准两个摄像头时,问题就出现了。 我将阐明所采取的步骤,并发布一些代码片段和我得到的输出。如果有人能指出我做错了什么,我将不胜感激 步骤 1) 第一步是使用OpenCV中的cv2.findC
佳能EOS60D
组成的立体设置,我将使用它进行摄影测量。
为了校准摄像机,我使用了高精度的circlegrid
模板。我能够使用cv2.findCirclesGrid检测圆的中心点,并且能够很好地校准单个摄像头。当我尝试使用OpenCV中的cv2.stereoCalibrate
功能校准两个摄像头时,问题就出现了。
我将阐明所采取的步骤,并发布一些代码片段和我得到的输出。如果有人能指出我做错了什么,我将不胜感激
步骤
1) 第一步是使用OpenCV中的cv2.findCircleGrid
函数检测circlegrid模式
2) 然后使用从每个摄像头检测到的网格模式,我使用cv2.CalibleCamera来获得摄像头矩阵和两个摄像头的失真系数
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]]
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]]
校准右摄像机后的输出如下
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]]
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]]
从上面的输出可以看出,cv2.calibleCamera
的两个返回值都是合理的
校准立体声设置后的输出如下
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]]
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]]
但立体声校准的返回值太高
参数
我在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]]
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]]
flags=cv2.CALIB\u FIX\u固有
criteria=cv2.TERM\u criteria\u MAX\u ITER+cv2.TERM\u criteria\u EPS,1000,1e-6
如果有人能指出我哪里做错了,我将不胜感激。Hi@the_parzival我也有同样的问题。你解决了这个问题吗?@MikelDíezBuil我没办法解决,但我可以通过改变帧之间的旋转来减少它。在进行校准时,您可以遵循一些良好的规则。