3. 数据采集环境搭建:固定相机与标定板、调整焦距与光圈、确保光照均匀、避免反光与阴影、采集距离与角度规划

环境搭建这件事,说实话,比很多人想象的要重要得多。我见过不少同学拿着标定脚本跑了一整天,结果内参算出来全是 NaN,或者重投影误差大得离谱。最后排查下来,不是算法问题,是相机没固定好,或者光照不均匀导致角点检测全偏了。

这一章,我就把我在项目里踩过的坑、总结的经验,一条一条拆给你看。

3.1 固定相机与标定板

先问一个问题:标定过程中,相机和标定板到底谁动谁不动?

答案是:相机固定,标定板移动。这是最标准的做法。

为什么?因为我们要标定的是相机的内参(焦距、主点、畸变系数),这些参数只跟相机本身有关。如果相机也在动,那外参(旋转和平移)就会跟着变,内参的求解就会引入额外的自由度,容易发散。

核心原则:标定过程中,相机位置、焦距、光圈、白平衡全部锁定,只改变标定板的位姿。

具体操作上,我有几个建议:

  • 相机固定:用三脚架或者工业相机支架把相机锁死。别用手持,哪怕你觉得自己手很稳。我试过手持采集 50 张图,结果有 30 张因为微小的抖动导致角点亚像素精度不够。
  • 标定板固定:标定板最好贴在硬质平板上(亚克力板或者铝板),不要用软纸板。软纸板一弯,角点坐标就变了,标定出来的畸变参数全是错的。
  • 标定板移动:用手或者机械臂改变标定板的姿态。注意,每次移动后,标定板要静止 1-2 秒再拍照,避免运动模糊。

小技巧:如果你用的是棋盘格标定板,建议在板子背面贴一张磨砂黑纸。这样可以减少透过棋盘格缝隙的光线干扰,角点检测会更稳定。

3.2 调整焦距与光圈

焦距和光圈,这两个参数一旦定了,整个标定过程中就不能再碰。否则你标定出来的内参跟实际使用时的内参对不上。

我个人习惯的做法是:

  1. 先调焦距:把标定板放在你实际工作距离的中间位置(比如你平时拍 1 米远的物体,就把标定板放在 1 米处),调整焦距让棋盘格清晰。注意,是整个画面清晰,不只是中心区域。
  2. 再调光圈:光圈决定了景深和进光量。光圈太大(比如 F1.4),景深太浅,标定板稍微倾斜一点就模糊了。光圈太小(比如 F16),衍射效应会降低图像锐度。我一般推荐 F4-F8 之间,具体看镜头。
  3. 锁定:调好后,用胶带把对焦环和光圈环贴住。别信什么「自动对焦」,标定必须手动对焦并锁定。

注意:如果你用的是变焦镜头,请把焦距拧到某个固定焦段(比如 35mm),然后用胶带锁死。变焦镜头在变焦过程中,镜片组会移动,内参也会变。标定结果只对当前焦段有效。

3.3 确保光照均匀

光照不均匀,角点检测的精度会直接下降。我遇到过最典型的情况是:标定板左边亮右边暗,结果左边角点检测精度 0.1 像素,右边直接跳到 0.5 像素,整体重投影误差被拉高。

怎么做?

  • 使用漫射光源:环形灯或者柔光箱是最好的选择。避免点光源(比如台灯),因为点光源会在标定板上产生高光斑。
  • 环境光:如果是在室内,尽量关掉顶灯,只用均匀的侧光。顶灯容易在棋盘格上产生阴影。
  • 检查均匀性:拍一张标定板的照片,用直方图看一下。理想情况下,直方图应该是单峰且集中在中间区域。如果出现双峰(一边亮一边暗),说明光照不均匀。

我的经验:在户外标定时,尽量选择阴天。阴天的光线是天然的漫射光,均匀性比大太阳天好得多。大太阳天标定,棋盘格上经常出现镜面反射,角点直接丢失。

3.4 避免反光与阴影

反光和阴影是标定数据采集的两大杀手。反光会让棋盘格上的白色区域过曝,角点被「吃掉」;阴影会让黑色区域变成灰色,对比度下降,角点检测不准。

具体避坑指南:

  • 反光:如果标定板表面有反光,可以尝试旋转标定板的角度,或者用偏振片。我曾经在标定一个玻璃柜里的相机时,标定板反光严重,最后在镜头前加了一片偏振滤镜才解决。
  • 阴影:检查标定板周围有没有遮挡物。比如,你的手或者三脚架的影子落在标定板上,这种阴影会导致局部对比度下降。我建议用遥控器或者延时拍摄,人离开标定区域。
  • 背景:标定板背后的背景最好是纯色且远离标定板。背景太杂乱,或者背景上有类似棋盘格的纹理,会影响角点检测的鲁棒性。

严重警告:不要用手机屏幕或者显示器显示棋盘格来当标定板。屏幕有刷新率、摩尔纹、亮度不均匀等问题,标定出来的内参精度极差。请使用打印并贴附在硬质平板上的物理标定板。

3.5 采集距离与角度规划

这一步决定了你的标定数据是否「覆盖全面」。内参求解需要标定板在图像的不同位置、不同距离、不同角度出现,才能约束住所有参数。

我一般按照以下策略采集:

维度 要求 说明
距离 覆盖工作距离的 70%-130% 比如工作距离 1 米,采集 0.7 米、1.0 米、1.3 米三个距离
角度 X/Y/Z 轴旋转 ±30° 绕 X 轴(俯仰)、Y 轴(偏航)、Z 轴(旋转)都要有
位置 覆盖图像四角和中心 标定板要出现在画面的左上、右上、左下、右下、中心
数量 15-25 张有效图像 不是越多越好,20 张左右覆盖全面即可

具体采集流程,我建议按这个顺序来:

  1. 中心位置 + 正对相机:先拍 3 张,作为基准。
  2. 中心位置 + 倾斜:绕 X 轴倾斜 ±20°、±30°,各拍 1 张;绕 Y 轴同理。
  3. 四角位置 + 正对:把标定板移到画面四个角,各拍 1 张。
  4. 四角位置 + 倾斜:在四角位置分别做小角度倾斜,各拍 1 张。
  5. 不同距离:靠近和远离相机,各拍 2-3 张。
  6. 绕 Z 轴旋转:把标定板旋转 45°、90°,各拍 1 张。

这样下来大概 20 张左右,覆盖非常全面。

关键指标:采集完成后,用 OpenCV 的 findChessboardCorners 检查一下,确保每张图都能检测到所有内角点。如果有 3 张以上检测失败,说明你的环境或者标定板有问题,需要重新调整。

3.6 本章知识体系

下面这张图总结了数据采集环境搭建的完整流程和关键节点:

数据采集环境搭建流程 数据采集环境搭建流程 1. 硬件准备 2. 相机设置 3. 光照控制 4. 采集规划 相机固定在三脚架 标定板贴硬质平板 锁死所有关节 手动对焦并锁定 光圈 F4-F8 胶带固定对焦环 漫射光源 检查直方图均匀性 避免反光和阴影 15-25 张 多距离多角度 覆盖四角 检查:findChessboardCorners 全部通过? 否 → 重新调整环境 是 → 开始标定 核心原则:相机固定不动,标定板移动;焦距光圈锁定;光照均匀无反光;采集覆盖全面 建议采集 15-25 张有效图像,覆盖不同距离、角度和画面位置