为什么需要标定
图像里看到的是像素坐标,真实场景里关心的是长度、角度和位置。相机标定要做的事,就是估计相机自己的参数,让像素和空间几何能对应起来。后面做三维测量、位姿估计、机器人视觉时,这一步会直接影响结果。
主要概念
- 焦距 fx、fy:描述相机在 x 和 y 方向上的成像尺度,通常以像素为单位。
- 主点 cx、cy:理想光轴与成像平面的交点,在图像中通常接近中心,但不一定完全等于图像中心。
- 径向畸变:由镜头形状引起,常见表现为桶形畸变或枕形畸变。
- 切向畸变:由镜头与成像平面不完全平行引起,会造成局部位置偏移。
实验流程
实验用棋盘格作为标定板。程序先生成棋盘格角点的三维坐标,再在每张图片中检测二维角点,并用亚像素优化提高角点位置精度。积累多组 3D-2D 对应点后,调用 cv2.calibrateCamera 求相机矩阵、畸变系数和每张图像的外参。
标定完成后,再通过 cv2.getOptimalNewCameraMatrix 和 cv2.undistort 对测试图像进行畸变校正,并将原图与校正图进行对比。
我的思考
做完这个实验后,我对相机标定的感觉更具体了。它看起来像预处理,但误差会一路传到后面的三维重建、极线几何和位姿估计里。内参如果不准,后面再怎么调也会别扭。
我觉得比较容易忽略的是采图质量。棋盘格最好覆盖不同角度和不同位置,不能总在画面中心拍。角点检测成功也不代表标定质量一定好,还要看角点分布和重投影误差。畸变校正时也要注意黑边和裁剪,不能只看图像有没有变直。