为什么需要标定

图像里看到的是像素坐标,真实场景里关心的是长度、角度和位置。相机标定要做的事,就是估计相机自己的参数,让像素和空间几何能对应起来。后面做三维测量、位姿估计、机器人视觉时,这一步会直接影响结果。

主要概念

  • 焦距 fx、fy:描述相机在 x 和 y 方向上的成像尺度,通常以像素为单位。
  • 主点 cx、cy:理想光轴与成像平面的交点,在图像中通常接近中心,但不一定完全等于图像中心。
  • 径向畸变:由镜头形状引起,常见表现为桶形畸变或枕形畸变。
  • 切向畸变:由镜头与成像平面不完全平行引起,会造成局部位置偏移。

实验流程

实验用棋盘格作为标定板。程序先生成棋盘格角点的三维坐标,再在每张图片中检测二维角点,并用亚像素优化提高角点位置精度。积累多组 3D-2D 对应点后,调用 cv2.calibrateCamera 求相机矩阵、畸变系数和每张图像的外参。

标定完成后,再通过 cv2.getOptimalNewCameraMatrixcv2.undistort 对测试图像进行畸变校正,并将原图与校正图进行对比。

相机标定实验原图 相机标定畸变校正结果
报告中的标定实验图,左侧为原始图,右侧为畸变校正后的结果。

我的思考

做完这个实验后,我对相机标定的感觉更具体了。它看起来像预处理,但误差会一路传到后面的三维重建、极线几何和位姿估计里。内参如果不准,后面再怎么调也会别扭。

我觉得比较容易忽略的是采图质量。棋盘格最好覆盖不同角度和不同位置,不能总在画面中心拍。角点检测成功也不代表标定质量一定好,还要看角点分布和重投影误差。畸变校正时也要注意黑边和裁剪,不能只看图像有没有变直。