第三节:相机标定基础

相机标定这事儿,说难不难,说简单也不简单。我刚开始做结构光的时候,觉得标定就是拍几张棋盘格照片跑个算法完事。结果呢?第一次重建出来的点云歪歪扭扭,像喝醉了酒。后来才明白——标定是结构光的根基,根基不稳,后面全是白搭。

今天咱们就聊聊张正友标定法、棋盘格怎么做、照片怎么拍。嗯,都是实战中踩过的坑。

3.1 张正友标定法:到底在干什么?

张正友标定法,说白了就是——用一张已知尺寸的棋盘格,通过多角度拍摄,反推出相机的内参和外参

你想想看,相机把三维世界投影到二维图像上,这个过程是有数学模型的。我们想知道的,就是那个模型的参数:焦距、主点、畸变系数等等。张正友的方法妙就妙在——你不需要知道相机在空间中的精确位置,只需要棋盘格是平的、格子尺寸已知就行。

核心流程其实就四步:

  1. 检测角点:从图像里找到棋盘格的内角点
  2. 计算单应矩阵:每张图都能算出一个从棋盘格平面到图像平面的映射
  3. 求解内参:利用多个单应矩阵的约束,解出相机内参
  4. 优化畸变:考虑镜头畸变,做非线性优化

我个人习惯:标定完成后,一定要做一次重投影误差检查。如果平均误差超过0.3像素,我建议重新拍。我在项目中遇到过0.5像素的误差,重建出来的物体表面全是波纹,根本没法用。

这里我画了一张流程图,帮你理清张正友标定法的整体逻辑:

张正友标定法核心流程 ① 采集棋盘格图像 多角度、不同距离 ② 检测棋盘格角点 亚像素精度提取 ③ 计算单应矩阵 每张图独立计算 ④ 求解内参矩阵 利用约束方程 ⑤ 估计畸变系数 径向+切向畸变 ⑥ 全局非线性优化 最小化重投影误差 输出:内参 + 畸变系数 每张图提供2个约束 至少需要3张不同角度 实际建议:15~20张

3.2 棋盘格制作要求:别在这上面省钱

棋盘格看着简单,但坑特别多。我见过有人用A4纸打印贴在墙上,结果纸皱了,标定出来焦距偏了5%。

这里列几个硬性要求:

项目 要求 原因
材质 陶瓷基板或玻璃基板 热胀冷缩小,不易变形
打印精度 ≥600dpi,建议1200dpi 角点位置精度直接影响标定
棋盘格尺寸 每个格子边长10~30mm 太小看不清,太大覆盖不了视场
内角点数量 建议9×7或11×8 太少约束不够,太多检测易出错
黑白对比度 黑白分明,无反光 角点检测需要清晰边缘

我曾经踩过的坑:用亚克力板做的棋盘格,结果在强光下反光严重,角点检测全偏了。后来换了哑光陶瓷板,问题解决。记住——棋盘格一定要哑光处理

另外,棋盘格要贴在绝对平整的平面上。我习惯用玻璃板加双面胶,贴好后用直尺检查有没有气泡。嗯,这一步别偷懒。

3.3 标定图片采集规范:角度、距离、光照

照片拍得好不好,直接决定标定质量。我见过有人拍了50张,结果全是正面拍的,标定出来畸变参数完全不对。

3.3.1 角度要求

说白了,你要让棋盘格在相机视场里「动起来」:

  • 俯仰角:从-45°到+45°均匀分布
  • 偏转角:左右各30°以上
  • 旋转角:绕光轴旋转0°、90°、180°各拍几张
  • 避免:所有照片角度太接近,那等于只拍了一张

你想想看,如果所有照片都是正面拍的,那畸变参数怎么解?镜头边缘的畸变信息根本采集不到。

3.3.2 距离要求

距离变化也很关键:

  • 工作距离附近:在你实际使用相机的距离范围内多拍
  • 远近结合:从最近到最远,覆盖整个景深范围
  • 棋盘格占比:每张图中棋盘格占画面1/4到1/2
  • 注意:太远时角点会模糊,太近时可能超出视场

我的经验:先确定你的结构光系统工作距离,比如是300mm。那么就在200mm、300mm、400mm各拍一组。每组5~6张不同角度。这样标定出来的参数在实际使用中最准。

3.3.3 光照要求

光照问题,我吃过亏。有一次在实验室标定好好的,拿到产线就崩了。为什么?光照变了。

  • 均匀照明:避免强光斑和阴影
  • 避免反光:棋盘格表面不能有镜面反射
  • 亮度适中:黑白格子灰度差>100(8位图)
  • 环境光稳定:不要在闪烁的日光灯下拍

这里给个具体的操作建议:

# 标定图片采集检查清单
1. 总张数:15~25张
2. 角度覆盖:俯仰±45°,偏转±30°
3. 距离覆盖:工作距离±30%
4. 光照检查:无高光、无阴影、均匀
5. 清晰度:角点边缘锐利,无运动模糊
6. 棋盘格位置:尽量分布在画面各个区域

3.4 标定结果验证:别急着用

标定完别急着往下走。我习惯做三件事验证:

  1. 重投影误差:平均误差<0.2像素算优秀,<0.5像素可接受
  2. 畸变矫正预览:把一张照片做畸变矫正,看看直线是不是变直了
  3. 重复性测试:同一位置拍两次,标定结果差异<1%

避坑指南:如果重投影误差很大,别急着调算法。先检查——棋盘格是不是皱了?照片是不是模糊了?光照是不是不均匀了?80%的问题出在数据采集阶段,不是算法问题。

好了,相机标定这块就聊到这儿。记住一句话:标定做得有多细,重建就有多准。别嫌麻烦,这一步值得花时间。


公众号:蓝海资料掘金营,微信deep3321