双目与多相机标定要点
双目和多相机标定除了每台相机的内参,还要求出相机之间的相对位姿。本文讲解同步采集、共视图像、方向唯一的标定板、基线精度、极线校正检验和联合光束法平差,帮助避免外参 180° 翻转和基线偏差等问题。
要点
- 多相机标定 = 每台相机的内参 + 相机之间的外参(旋转 R、平移 t)。双目的基线精度直接决定测距精度。
- 采集必须同步:最好用硬件触发,否则每次拍摄时标定板必须完全静止。
- 使用方向唯一的标定板(ChArUco、AprilGrid、带标记棋盘格、奇数行非对称圆点),避免对称图案造成的编号歧义。
- 标定板的尺度误差会按相同比例传递给基线。
- 联合光束法平差同时优化所有参数,结果更一致,还能给出外参的不确定度。
- 用极线校正后的纵向视差和已知长度的测量来检验结果。
要求解哪些参数?
以相机 0 为参考,需要求出:
- 每台相机的内参和畸变系数;
- 相机 i 相对相机 0 的旋转和平移(外参),双目时两个光心之间的距离就是基线;
- 每一帧中标定板相对相机 0 的位姿,这是求解过程中的中间变量。
外参的方向在不同软件中可能是“相机 0 到相机 i”,也可能反过来。交接数据时,一定要写清楚变换方向和长度单位。
为什么必须同步采集?
外参来自“同一时刻、同一块标定板在各相机中的图像”。如果各相机的曝光时刻不同,而标定板又在移动,实际上是把两个不同位置的标定板当成了同一个位置,外参就会出错。
- 优先使用硬件触发,让所有相机同时曝光;
- 无法硬件同步时,把标定板放在支架上,完全静止后再触发各相机;
- 卷帘快门相机即使触发同步,也应避免在标定板运动时拍摄。
共视:相机之间要有“交集”
只有被两台相机同时看到的帧,才能直接约束它们之间的外参。多相机系统中,每台相机都必须通过共视帧与其他相机“连通”:可以是两两直接共视,也可以经由中间相机串联起来。如果某台相机从未与任何其他相机同时看到标定板,它的外参就无法确定。
共视帧本身也要满足一般的采集要求:有倾斜、位置有变化、远近有变化。如果只在两相机视场重叠的中央区域以单一姿态拍几张,外参会很不稳定。
另外,只被一台相机看到的图像同样有用:它们可以补充这台相机画面边缘的覆盖,改善内参,而内参的质量又会影响外参。
视场不重叠的相机怎么办?
环视、多工位检测等系统中,相邻相机的视场可能几乎不重叠。这时可以利用允许部分可见的图案:只要一块足够大的 ChArUco 或 AprilGrid 标定板能在同一时刻被两台相机各看到一部分,由于板上所有角点的相对位置已知,这一帧照样能约束两台相机的相对位姿。这是部分可见图案在多相机标定中的另一个优势。如果连这样也做不到,就需要多块相对位置已知的标定板组合使用,或借助移动整个相机系统的方法,复杂度会明显增加。
为什么要用方向唯一的标定板?
双目标定要求两台相机对同一个物理特征点给出相同的编号。
- 对称图案的风险:行列方格数奇偶相同的棋盘格、对称圆点阵列,旋转 180° 后外观完全相同。两台相机可能从不同的角开始编号,求出的相对旋转就会差 180°,或者优化无法收敛。即使行列奇偶不同,也要确认所用软件确实据此判断了方向。
- 推荐的图案:ChArUco 和 AprilGrid 的每个角点都有唯一 ID,还允许部分遮挡,最适合多相机;带标记棋盘格通过中心附近的圆形标记确定原点;非对称圆点在行数为奇数时方向唯一。
基线精度取决于什么?
双目测距的深度误差与基线成反比、与距离的平方成正比;基线本身的相对误差,会直接变成测距结果的比例误差。影响基线的主要因素有:
- 标定板的尺度:方格尺寸的相对误差会 1:1 传递给基线。方格尺寸填错 0.05%,或者标定板因温度伸缩了 0.05%,基线也会偏 0.05%。
- 共视数据的多样性:标定板在共视区内的位置、倾斜和距离越多样,外参越稳定。
- 拍摄距离:在实际工作距离附近标定;距离越远,单张图对平移的约束越弱。
- 内参质量:内参的误差会有一部分被外参吸收。
- 相机支架的稳定性:基线是相机支架的物理尺寸,同样会随温度伸缩、随受力变形。例如 200 mm 长的铝合金支架温度变化 10 K,长度约变化 0.05 mm;支架受热不均时还会弯曲,改变两台相机的相对朝向。对测距精度要求高的系统,要在工作温度下标定,并关注支架的刚性和热稳定性。
分步标定还是联合标定?
常见做法有两种:
- 分步法:先分别标定每台相机的内参,再固定内参、只求外参。OpenCV 的 stereoCalibrate 默认就使用 CALIB_FIX_INTRINSIC,即这种方式。
- 联合法:把所有相机的内参、外参和每一帧的标定板位姿放进同一个优化问题,最小化所有相机全部特征点的重投影误差,即光束法平差(bundle adjustment)。
分步法简单,适合内参已经充分标定、只需要更新外参的情况。联合法利用了全部约束,内参与外参相互一致,还能通过协方差得到外参的不确定度,例如基线的标准差;代价是需要较好的初值和足够的数据。
BDB 相机标定工作台采用联合光束法平差,支持双目和多台相机同时标定,并配合 Huber 鲁棒核和离群点剔除;外参初值通过共视帧在相机之间逐级传递得到。
极线校正与结果检验
双目匹配之前通常要做极线校正(rectification):把两幅图像变换到共面、行对齐的虚拟相机下,使同一物点在两幅图中位于同一行。OpenCV 中可以用 stereoRectify 计算校正变换,再用 initUndistortRectifyMap 和 remap 生成校正后的图像。
校正结果也是检验外参的直观手段:
- 纵向视差:在校正后的图像中检测标定板角点,同名点的纵坐标之差应接近 0,可以统计它的均方根;
- 已知长度:用双目三角化测量一个经过计量的长度,在视场的不同位置、不同距离上分别检验;
- 平面拟合:重建标定板角点的三维坐标,拟合平面,检查残差和方格间距是否与标称值一致。
常见问题
- 外参看上去差了 180°:多半是对称图案导致编号不一致,换用方向唯一的标定板。
- 基线与机械设计值差了几毫米:先核对方格尺寸和单位(mm 与 m),再确认机械设计值指的是哪两个点——光心的位置通常不在镜头的机械端面上,与设计图上标注的位置本来就可能不同。
- 左右相机单独标定都很好,双目结果却差:检查同步、共视帧的数量和多样性。
- 某台相机求不出外参:它与其他相机没有共视帧,补拍能把它“连通”起来的图像。
- 使用一段时间后视差匹配变差:相机支架可能发生了微小形变或位移,用纵向视差做一次快速复检,必要时重新标定外参。