双目标定中stereoCalibrate()函数

用于标定立体相机

函数形式

C++:
cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1,
const CvMat* image_points2, const CvMat* npoints,
CvMat* camera_matrix1, CvMat* dist_coeffs1,
CvMat* camera_matrix2, CvMat* dist_coeffs2,
CvSize image_size, CvMat* R, CvMat* T,
CvMat* E CV_DEFAULT(0), CvMat* F CV_DEFAULT(0),
CvTermCriteria term_crit CV_DEFAULT(cvTermCriteria(
CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6)),
int flags CV_DEFAULT(CV_CALIB_FIX_INTRINSIC));

参数

o objectPoints– 校正的图像点向量组.
o imagePoints1–通过第一台相机观测到的图像上面的向量组.
o imagePoints2–通过第二台相机观测到的图像上面的向量组.
npoints--角点数
o cameraMatrix1– 输入或者输出第一个相机的内参数矩阵
o distCoeffs1– 输入/输出第一个相机的畸变系数向量
o cameraMatrix2– 输入或者输出第二个相机的内参数矩阵
o distCoeffs2– 输入/输出第二个相机的畸变系数向量
o imageSize– 图像文件的大小——只用于初始化相机内参数矩阵。
o R– 输出第一和第二相机坐标系之间的旋转矩阵。
o T– 输出第一和第二相机坐标系之间的旋转矩阵平移向量
o E–输出本征矩阵。
o F–输出基础矩阵。
o term_crit– 迭代优化算法终止的标准。
o flags–
不同的FLAG,可能是零或以下值的结合:
§ CV_CALIB_FIX_INTRINSIC要确认cameraMatrix? and distCoeffs?所以只有R, T, E , 和F矩阵被估计出来
§ CV_CALIB_USE_INTRINSIC_GUESS根据指定的FLAG优化一些或全部的内在参数。初始值是由用户提供。
§ CV_CALIB_FIX_PRINCIPAL_POINT在优化过程中确定主点。
§ CV_CALIB_FIX_FOCAL_LENGTH确定和 .
§ CV_CALIB_FIX_ASPECT_RATIO优化 . 确定的比值.
§ CV_CALIB_SAME_FOCAL_LENGTH执行以及 .
§ CV_CALIB_ZERO_TANGENT_DIST设置每个相机切向畸变系数为零并且设为固定值。
§ CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6在优化中不改变相应的径向畸变系数. 如果设置CV_CALIB_USE_INTRINSIC_GUESS , 使用distCoeffs矩阵提供的系数。否则将其置零.
§ CV_CALIB_RATIONAL_MODEL能够输出系数k4,k5,k6。提供向后兼容性,这额外FLAG应该明确指定校正函数使用理性模型和返回8个系数。如果FLAG没有被设置,该函数计算并只返回5畸变系数。
说明
该函数计算了两个摄像头进行立体像对之间的转换关系。如果你有一个立体相机的相对位置,并且两个摄像头的方向是固定的,以及你计算了物体相对于第一照相机和第二照相机的姿态,(R1,T1)和(R2,T2),各自(这个可以通过solvepnp()做到)通过这些姿态确定。这意味着,给定予(:数学:t_1),就可以计算(:数学:t_2)。你只需要知道第二相机相对于第一相机的位置和方向。
除了立体的相关信息,该函数也可以两个相机的每一个做一个完整的校准。然而,由于在输入数据中的高维的参数空间和噪声的,可能偏离正确值。如果每个单独的相机内参数可以被精确估计(例如,使用calibratecamera()),建议您这样做,然后在本征参数计算之中使用CV_CALIB_FIX_INTRINSIC的功能。否则,如果一旦计算出所有的参数,它将会合理的限制某些参数,例如,传递CV_CALIB_SAME_FOCAL_LENGTH and CV_CALIB_ZERO_TANGENT_DIST,这通常是一个合理的假设。
与calibratecamera()类似,该函数最大限度地减少了从相机中所有可用的视图的所有点的总的重投影误差。该函数返回的重投影误差最终值。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV是一种流行的开源计算机视觉库,它为用户提供了许多强大的功能和工具来处理图像和视频。 双目标定是一种用于对双目相机进行标定的方法。在双目视觉系统,我们使用两个相机来捕捉不同角度或位置的图像。而双目标定的目的是确定这两个相机之间的几何关系,以便将来可以利用它们来获取三维信息。 在OpenCV,我们可以使用cv::stereoCalibrate函数来进行双目标定。这个函数需要一对图像来作为输入,并输出相机的内部参数、外部参数以及立体校正参数。为了获得准确的结果,我们需要为该函数提供一对已知的3D点和对应的2D图像坐标。 在进行双目标定之前,我们需要确保相机已经被正确地标定。这可以通过使用OpenCV提供的单目标定工具来完成。一旦相机被单目标定,我们就可以进行双目标定。 由于函数的使用过程较为复杂,我们需要先创建一些存储相机矩阵和畸变系数的变量。然后我们可以读取一对标定图像,并在这些图像上检测角点。接下来,我们可以使用cv::findChessboardCorners函数来查找棋盘格角点的二维图像坐标。最后,我们可以使用cv::stereoCalibrate来进行双目标定,并将结果保存在事先创建的变量。 通过OpenCV自带的双目标定功能,我们可以准确地计算出双目相机之间的几何关系,从而实现更准确的立体视觉和三维图像重建。这对于许多计算机视觉和深度学习任务来说非常重要,例如目标检测、三维建模等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值