【OpenCV】张正友标定法的 OpenCV 实现

本文详细介绍了OpenCV中使用张正友方法进行相机标定的流程,包括cvProjectPoints2的三维点重投影、cvUndistort2的去畸变校正和cvFindExtrinsicCameraParams2的内外参数计算。通过SVD分解和LM迭代优化,实现图像矫正。
摘要由CSDN通过智能技术生成

今天看到一篇文章, 把 OpenCV 中实现标定的总体流程, 每个步骤, 调用的每个函数 都讲解清楚了, 直接带路, 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图).



以下分析, 适用于 OpenCV 3.1.0

  • 以下函数源代码在 imgproc 模块找到

  • 以下函数源代码在 calibration 模块找到 calibration.cpp

    • cvFindExtrinsicCameraParams2
    • cvProjectPoints2

cvProjectPoints2 : 三维点到相平面的重投影

//declaration
/* Projects object points to the view plane using
   the specified extrinsic and intrinsic camera parameters */
CVAPI(void) cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector,
                              const CvMat* translation_vector, const CvMat* camera_matrix,
                              const CvMat* distortion_coeffs, CvMat* image_points,
                              CvMat* dpdrot CV_DEFAULT(NULL), CvMat* dpdt CV_DEFAULT(NULL),
                              CvMat* dpdf CV_DEFAULT(NULL), CvMat* dpdc CV_DEFAULT(NULL),
                              CvMat* dpddist CV_DEFAULT(NULL),
                              double aspect_ratio CV_DEFAULT(0));

cvUndistort2 : 去畸变校正

CVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst,
                          const CvMat* camera_matrix,
                          const CvMat* distortion_coeffs,
                          const CvMat* new_camera_matrix CV_DEFAULT(0) );

cvFindExtrinsicCameraParams2 : 已知内参求外参

/* Finds extrinsic camera parameters from
   a few known corresponding point pairs and intrinsic parameters */
CVAPI(void) cvFindExtrinsicCameraParams2( const CvMat* object_points,
                                          const CvMat* image_points,
                                          const CvMat* camera_matrix,
                                          const CvMat* distortion_coeffs,
                                          CvMat* rotation_vector,
                                          CvMat* translation_vector,
                                          int use_extrinsic_guess CV_DEFAULT(0) );
  • 计算原理
  1. 将空间点和图像点齐次化,得到图像点矩阵 m m m 空间点矩阵 M M M
  2. 求取矩阵 M M M的平均值 M c M_c Mc
张正友标定(Zhang's camera calibration)是一种常用的相机标定,用于确定相机的内部参数(内参)和外部参数(外参)。该方是由张正友教授在1999年提出的,被广泛应用于计算机视觉和机器人领域。 张正友标定使用特殊的标定板(一般是棋盘格)作为标定物体,在不同位置和姿态下拍摄多张图片。通过对这些图片进行处理,可以计算出相机的内参(如焦距、畸变参数等)和外参(如相机的旋转矩阵和平移向量)。这些参数可以帮助我们进行相机畸变校正、三维重建等任务。 具体实施该标定时,需要先对标定板进行角检测,然后通过求解相机的投影变换关系,从而得到相机的内外参数。标定板上的角在不同位置和姿态下的映射关系提供了用于求解的约束条件。通常,至少需要拍摄10-20张不同姿态的图片才能进行有效的标定。 在OpenCV中,可以使用函数`cv2.calibrateCamera()`来实现张正友标定。该函数可以根据提供的标定板图片和角信息,计算出相机的内外参数。通过使用这些参数,可以对相机图像进行畸变校正,使得图像中的直线保持直线,提高图像处理的准确性。 总结来说,张正友标定是一种常用的相机标定,通过拍摄多张标定板图片,可以计算出相机的内外参数,从而帮助我们进行相机畸变校正和三维重建等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值