第四节:相机标定基础——标定的目的、标定板设计与张正友法
说到相机标定,很多刚入行的朋友会觉得这玩意儿有点玄乎。其实说白了,就是给相机做一次「视力矫正」。你想想看,相机镜头天生就有畸变,就像人眼近视散光一样。我们做RGBD融合也好,做三维重建也罢,第一步就是把相机的「度数」测准了。
我个人习惯把标定分成三个层次来理解:为什么要标、用什么标、怎么标。这节课我们就按这个逻辑来拆解。
一、标定的目的——我们到底在求什么?
相机标定的核心目标,就是求解内参矩阵和畸变系数。内参矩阵长这样:
K = [fx 0 cx
0 fy cy
0 0 1]
其中fx、fy是焦距(单位是像素),cx、cy是主点坐标(光心在图像上的位置)。畸变系数则包括径向畸变(k1、k2、k3)和切向畸变(p1、p2)。
我在项目中遇到过最典型的案例:一台深度相机,出厂时标称内参是准的,但装到机械臂上震动了几次后,重建的点云就开始「飘」了。后来一测,主点偏移了3个像素,焦距也变了0.5%。嗯,这就是为什么我们每次部署前都要重新标定。
- 消除镜头畸变,让直线变回直线
- 建立像素坐标到物理坐标的映射关系
- 为RGB与深度图的对齐提供基础
二、标定板设计——棋盘格 vs 圆点
标定板的选择,其实挺讲究的。我见过有人拿A4纸打印一张棋盘格就开干,结果角点检测全歪了。你想想看,标定板要是没做好,后面算出来的内参能准吗?
2.1 棋盘格标定板
这是最常用的方案。优点是角点检测算法成熟(OpenCV的findChessboardCorners),精度高。但有个坑——棋盘格必须是奇数×偶数的格子数,这样才能保证内角点数量唯一。
我曾经犯过一个低级错误:打印了8×8的棋盘格,结果算法死活检测不到角点。后来才发现,内角点是7×7,但棋盘格边缘反光导致检测失败。避坑指南:棋盘格周围留白边,至少留一个格子的宽度。
2.2 圆点标定板
圆点标定板在深度相机标定中更常见。为什么?因为深度图对棋盘格角点的响应很差,边缘模糊导致角点定位不准。而圆点的质心检测对模糊不敏感。
圆点标定板的设计要点:
- 圆点直径建议为格子间距的1/3到1/2
- 行列数建议7×7或9×9(奇数×奇数),方便确定方向
- 背景用哑光材质,避免反光
三、张正友标定法简介
张正友法,说白了就是「用平面标定板搞定三维标定」。这个方法牛在哪儿?它不需要你知道标定板在空间中的精确位置,只需要拍不同角度的照片就行。
核心思想其实不复杂:
- 拍一组照片——至少10-15张,覆盖不同角度和距离
- 检测角点——提取每张图中标定板的特征点
- 求解单应矩阵——每张图都有一个从标定板平面到像平面的单应矩阵H
- 分解内参——利用多个H矩阵的约束,解出内参K
- 优化畸变——用非线性最小二乘(比如Levenberg-Marquardt)精调所有参数
我刚开始学的时候,觉得第4步特别绕。其实你可以这么理解:每个单应矩阵H都包含了内参和旋转平移信息,但旋转矩阵是正交的,这个正交约束就把内参给「挤」出来了。
四、知识体系总览
下面这张图是我自己整理的标定知识框架,你可以对照着理解:
五、实操中的几个关键点
讲完理论,说点实际的。标定过程中有几个细节,我踩过坑,你注意一下:
- 照片数量:别少于15张。我见过有人拍5张就开标,结果重投影误差0.8像素,根本不能用。20张左右比较稳妥。
- 角度覆盖:标定板要倾斜、旋转、远近都拍。如果所有照片都是正面拍摄,那标定出来的畸变系数会严重不准。
- 光照均匀:避免局部过曝或阴影。尤其是圆点标定板,阴影会导致质心偏移。
好了,关于标定基础就聊到这儿。记住一句话:标定是RGBD融合的基石,地基不牢,后面全白搭。下一节我们会深入标定板的检测算法,到时候再细聊。
公众号:蓝海资料掘金营,微信deep3321