4、图像采集实战:如何拍摄高质量标定图片

标定这事儿,算法再牛,也架不住输入图片质量差。我见过太多人拿着模糊、反光、角度单一的图片跑来问“为什么标定结果不准”。说白了,标定精度的一半以上,在拍照阶段就已经决定了。

这一章,咱们就聊聊怎么拍出能让算法“吃得舒服”的标定图片。嗯,这里要注意,不是随便拍几张棋盘格就完事了。

4.1 拍摄硬件与场景设置

先说说硬件。你不需要专业摄影棚,但有几个坑得避开。

硬件要素 推荐配置 避坑说明
相机 固定焦距、手动模式 别用自动变焦,焦距一变内参就变了
镜头 定焦镜头优先 变焦镜头请锁死在同一个焦段
光照 漫反射光源,均匀照明 避免单侧强光,会产生阴影和反光
标定板 亚光材质打印,贴平在硬板上 不要用光面纸,反光会让你崩溃
三脚架 建议使用 手持拍摄容易引入运动模糊
我的习惯: 每次标定前,我会先拍一张纯白纸检查光照均匀度。如果纸面有明显亮度梯度,那就调整光源位置再开始。这一步花不了30秒,但能省掉后面筛选图片的大量时间。

4.2 图片数量与角度要求

很多人问:“到底要拍多少张?” 我的答案是:20-30张有效图片。但“有效”两个字是关键。

为什么会这样?因为标定算法需要从不同视角观察标定板,才能稳定求解内参和畸变系数。角度太少,解出来的参数容易过拟合。

4.2.1 角度覆盖策略

我个人习惯把拍摄分成三个维度:

  1. 水平旋转:标定板在相机前方左右摆动,覆盖 -45° 到 +45°
  2. 俯仰变化:标定板上仰下俯,覆盖 -30° 到 +30°
  3. 距离变化:标定板从近到远,覆盖整个工作距离范围

你想想看,如果所有图片都是标定板正对着相机,那算法永远学不到透视畸变的信息。标定结果自然不准。

核心原则: 每张图片的标定板姿态,都应该和前一张有明显差异。不要连续拍10张几乎一模一样的照片,那是浪费存储空间。

4.2.2 数量与分布参考

场景 建议张数 角度分布要求
普通室内标定 20-25 水平±45°,俯仰±30°,距离3档
广角/鱼眼镜 30-40 增加边缘区域覆盖,标定板尽量靠近画面边缘
远距离监控 25-30 重点覆盖远距离,标定板尺寸要足够大
高精度测量 35-50 每个角度区间至少3张,重复拍摄取优

4.3 避免运动模糊与反光

这两个问题,是我在项目中遇到最多的“杀手”。

4.3.1 运动模糊

运动模糊会让角点检测产生亚像素偏移。一张模糊图片,可能拉低整体标定精度0.1个像素。听起来不多?对于高精度测量,这已经是灾难了。

我曾经在一个产线项目中,连续拍了200张图片,结果筛选下来只有40张能用。原因就是手持拍摄时手抖,加上快门速度太慢。

解决方案:

  • 快门速度至少设为 1/100s 以上
  • 使用三脚架或固定支架
  • 如果必须手持,连拍模式 + 后期筛选
  • 检查图片:放大到100%看棋盘格角点是否清晰锐利
注意: 不要相信你的眼睛在屏幕缩略图上的判断。一定要放大到100%检查边缘。模糊的图片,在缩略图里看起来可能“还行”,但算法会诚实地告诉你——它检测不到角点。

4.3.2 反光问题

反光会让棋盘格的黑白区域变成一片亮白,角点直接消失。我见过最夸张的一次,标定板上的反光区域占了半个画面,算法直接报错“找不到棋盘格”。

避坑指南:

  • 使用亚光(哑光)标定板,不要用光面纸
  • 光源从两侧45°方向打光,避免正面直射
  • 如果环境光无法控制,可以稍微旋转标定板角度,让反光移出画面
  • 实在不行,用偏振片贴在镜头前,能滤掉大部分反射光

4.4 数据筛选策略

拍完照片,别急着全部扔进标定程序。先做一轮筛选,能省下大量调试时间。

4.4.1 自动筛选流程

我一般写一个简单的筛选脚本,流程如下:

# 伪代码:标定图片自动筛选逻辑
for each image in 拍摄目录:
    ret, corners = cv2.findChessboardCorners(img, pattern_size)
    if not ret:
        continue  # 检测不到角点,直接丢弃
    
    # 检查角点分布
    if 角点覆盖面积 < 画面60%:
        continue  # 标定板太小,精度不够
    
    # 检查清晰度(拉普拉斯方差)
    laplacian_var = cv2.Laplacian(gray_img, cv2.CV_64F).var()
    if laplacian_var < 阈值:
        continue  # 模糊图片,丢弃
    
    # 检查角度重复度
    if 当前姿态与已有图片相似度 > 90%:
        continue  # 角度太接近,不增加信息量
    
    保留该图片到有效集合
我的经验值: 拉普拉斯方差的阈值,我通常设在 100-200 之间。具体值和你使用的标定板纹理、光照有关。可以先拍一张清晰图片算个基准值,然后以它的60%作为下限。

4.4.2 人工复核清单

自动筛选之后,我还会手动过一遍。重点看这几项:

  • 画面边缘是否有裁剪?标定板不能出界
  • 是否有局部过曝或过暗区域?
  • 标定板是否平整?有没有褶皱或弯曲?
  • 角度分布是否均匀?不要全是左边角度,右边一张都没有

4.5 知识体系:图像采集核心逻辑

下面这张图,是我自己总结的图像采集决策流程。每次做标定项目前,我都会对照着走一遍。

图像采集核心决策流程 图像采集核心决策流程 开始采集 硬件检查:焦距锁定、光照均匀 拍摄策略:多角度 + 多距离 质量检查:模糊?反光?裁剪? 筛选决策:自动筛选 + 人工复核 得到有效图片集 关键指标 • 20-30张有效图片 • 角度覆盖±45° • 拉普拉斯方差 > 阈值 常见失败原因 • 运动模糊 • 标定板反光 • 角度分布不均

4.6 实战检查清单

最后,给你一份我每次采集前都会过一遍的清单。打印出来贴在相机旁边,比什么都管用。

检查项 通过标准 常见问题
焦距锁定 手动对焦,拍摄过程中不改变 自动对焦导致内参变化
光照均匀度 画面无过曝、无阴影、无反光 单侧光源造成亮度梯度
标定板平整 贴在刚性背板上,无褶皱 软纸打印,弯曲变形
角度覆盖 水平±45°,俯仰±30° 所有图片都是正面拍摄
图片清晰度 100%放大后角点清晰可辨 手持拍摄快门太慢
数量要求 有效图片 ≥ 20张 拍了50张但一半不能用
最后提醒一句: 标定图片的质量,直接决定了标定结果的可用性。花1小时拍好照片,能省下后面10小时调试算法的时间。这个账,你算得明白。