第三章 图像采集规范:标定图像采集的10个黄金法则
相机标定这件事,算法选得再好,算子调得再熟,如果图像采集这关没过,后面全是白搭。我见过太多人拿着模糊、反光、标定板只占画面一角的图像来问我为什么标定失败——说实话,这种问题根本轮不到算法背锅。
这一章,我把多年现场攒下来的经验,浓缩成10条黄金法则。每条都是踩过坑之后才真正理解的。你照着做,标定成功率至少能提八成。
3.1 标定板:选对、放对、拍对
先说说标定板本身。很多人觉得随便打印一张棋盘格就能用,其实没那么简单。
法则1:标定板材质必须平整
陶瓷或玻璃基板是首选,亚克力次之。打印纸贴在硬纸板上?我劝你别试。我在一个3C项目里吃过这个亏——打印纸受潮微微起拱,标定出来的内参偏了0.3个像素,最后测量精度死活过不了。换成2mm厚的玻璃棋盘格,一次过。
法则2:图案精度要够
棋盘格角点位置误差不能超过0.01mm。圆点阵列板要求更高。工业级标定板都有出厂精度报告,别省这个钱。你想想看,标定板本身就有误差,标出来的结果能准吗?
法则3:尺寸覆盖视场1/3以上
标定板在图像里不能太小。我个人习惯是让它至少占视场的1/3到1/2。太小了,角点提取的亚像素精度会打折扣。
| 标定板尺寸选择参考 | 视场大小 | 推荐标定板边长 | 棋盘格数量 |
|---|---|---|---|
| 小视场(< 50mm) | 10-20mm | 7×7 或 9×9 | |
| 中视场(50-200mm) | 30-80mm | 12×9 或 15×11 | |
| 大视场(> 200mm) | 80-200mm | 15×11 或 20×15 |
3.2 光照:被忽视的精度杀手
光照问题,是我在项目现场遇到最多的坑。说白了,标定算法依赖的是角点或圆心的亚像素定位,光照不均匀,定位就偏。
法则4:均匀漫射照明
用环形无影光源或穹顶光源,避免点光源直射。我曾在一条产线上看到工人用手电筒照着标定板拍照——结果可想而知,标定出来的畸变系数完全是错的。
法则5:避免反光和阴影
标定板表面不能有镜面反射。如果标定板是玻璃的,注意调整光源角度,让反射光避开相机。阴影会导致棋盘格黑白区域的对比度不一致,角点提取会偏移。
min_max_gray算子检查一下图像的灰度直方图。理想情况下,黑白区域的灰度值应该分别集中在两个峰上,中间没有拖尾。
法则6:保持光照一致性
标定时的光照要和实际测量时一致。别在暗室里标定,然后拿到强光下用。镜头的光圈、增益、曝光时间,标定过程中一旦设定就不要动。
3.3 姿态多样性:标定板要“动”起来
这是新手最容易忽略的一点。很多人把标定板往视场中间一放,拍一张就完事。这样标出来的结果,只能覆盖一个姿态,畸变模型根本拟合不准。
法则7:覆盖视场所有区域
标定板要出现在图像的左上、右上、左下、右下、中心,以及四个边的中间位置。一共至少9个位置。
法则8:改变倾斜角度
标定板平面要和像平面成一定夹角。我一般控制在15°到30°之间。太斜了,角点提取会模糊;太平了,畸变参数解算会退化。
法则9:改变旋转角度
标定板绕光轴旋转0°、90°、180°、270°各拍一组。这样可以消除标定板图案本身的制造误差。
find_calib_object会报错,但更麻烦的是,它可能不报错但结果偏了。
3.4 10条法则速查表
| 编号 | 法则 | 关键要求 | 常见错误 |
|---|---|---|---|
| 1 | 材质平整 | 陶瓷/玻璃基板 | 打印纸起皱 |
| 2 | 图案精度 | 误差< 0.01mm | 使用劣质标定板 |
| 3 | 尺寸覆盖 | 占视场1/3以上 | 标定板太小 |
| 4 | 均匀照明 | 漫射光、无影光 | 点光源直射 |
| 5 | 无反光阴影 | 调整光源角度 | 玻璃反光 |
| 6 | 光照一致 | 标定与测量相同 | 标定后改光圈 |
| 7 | 覆盖全视场 | 至少9个位置 | 只拍中心 |
| 8 | 倾斜角度 | 15°-30° | 太平或太斜 |
| 9 | 旋转角度 | 0°/90°/180°/270° | 单一方向 |
| 10 | 不超出视场 | 完整可见 | 切角、切边 |
3.5 图像采集流程
下面这张图,是我自己项目里一直在用的采集流程。你照着走一遍,基本不会漏掉关键步骤。
3.6 避坑指南:我踩过的那些坑
最后,分享几个真实教训。你遇到了,直接跳过就好。
- 标定板脏了:我曾经用一块有指纹的标定板拍了20张图,标定结果一直收敛不了。后来用酒精擦干净,一次通过。标定板要定期清洁,别嫌麻烦。
- 镜头焦距没锁死:变焦镜头标定过程中如果动了焦距,所有图像的内参都不一样了。标定前一定要用胶带锁死调焦环和光圈环。
- 图像数量不够:最少15张,建议20-25张。少于10张,畸变参数解算不稳定。多于30张,边际效益递减,还浪费时间。
- 标定板太靠近图像边缘:边缘畸变最大,如果标定板没有覆盖到边缘区域,边缘的畸变就校正不准。我习惯让标定板的最外圈角点距离图像边界至少留10个像素的余量。
grab_image拍一张预览图,用disp_image显示出来,肉眼扫一遍。确认没有反光、阴影、模糊、切边之后,再开始批量采集。这一步花不了30秒,但能省下后面半小时的排查时间。