我尝试使用 OpenCV(python 接口)校准立体相机。我首先使用 calibrateCamera2 分别校准了两个摄像头,然后将参数输入到 stereoCalibrate
cv.StereoCalibrate(object_points, image_points_left, image_points_right, \
point_counts, intrinsic_left, distortion_left,\
intrinsic_right, distortion_right, \
(IMGRES_X,IMGRES_Y), R, T, E, F, \
term_crit=(cv.CV_TERMCRIT_ITER+cv.CV_TERMCRIT_EPS, 100, 1e-8),\
flags=cv.CV_CALIB_FIX_INTRINSIC)
我使用极线约束检查结果(如 OpenCV 书中所述),得到的平均误差约为 0.0039。
原则上,我应该能够将基本矩阵和基本矩阵与我的相机矩阵联系起来。所以我要做的是:
Mr = asarray(intrinsic_right,dtype=float64)
Ml = asarray(intrinsic_left,dtype=float64)
E = asarray(E)
F = asarray(F)
F2 = dot(dot(inv(Mr).T,E),inv(Ml))
然而,得到的矩阵 F2 一点也不像 F。有什么明显的我做错了吗?非常感谢您的帮助。
编辑: dot 和 inv 来自 numpy。