我尝试使用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的。
mat()
矩阵。如果这样做,它们就相等了。我已经在上面进行了编辑。 - timlukins