3、相机标定原理:标定的目的与意义、标定板设计、内参与外参、畸变模型
相机标定,说白了就是给相机做「体检」。
我刚开始做视觉测量那会儿,总觉得相机买回来就能直接用。结果呢?测出来的尺寸偏差大得离谱。后来才明白——每台相机都有自己的「脾气」,标定就是摸清它的脾气。
3.1 标定的目的与意义
为什么要标定?核心就两件事:
- 建立映射关系:把像素坐标和真实世界坐标对应起来
- 消除畸变误差:修正镜头带来的图像变形
我在项目中遇到过最典型的案例:一个精密装配项目,要求定位精度0.1mm。没标定前,边缘检测误差直接飙到0.5mm。标定完成后,误差降到0.05mm以内。你看,标定前后差了整整一个数量级。
标定的核心意义:
- 将像素单位转换为物理单位(mm、cm等)
- 消除镜头畸变带来的测量误差
- 确定相机在空间中的位置和姿态
- 为多相机系统提供统一坐标系
3.2 标定板设计
标定板是标定的「尺子」。我见过有人用A4纸打印棋盘格,结果边缘翘曲,标定出来全是错的。
常见的标定板类型:
- 棋盘格标定板:黑白相间,角点检测容易,最常用
- 圆点标定板:圆心定位精度高,适合高精度场景
- ChArUco标定板:带编码信息,支持部分遮挡
设计标定板时,有几个坑要注意:
避坑指南:
- 棋盘格边长精度要控制在0.01mm以内,别用普通打印机
- 格子数量建议7×9或9×11,太少标定不稳定
- 标定板要平整,贴在玻璃或铝板上最好
- 我曾经用亚克力板做底板,结果热胀冷缩严重,标定结果随温度漂移
3.3 内参与外参
相机参数分两类:内参和外参。我习惯这么理解——内参是相机的「先天条件」,外参是相机的「后天位置」。
内参矩阵
内参描述的是相机内部的光学特性:
内参矩阵 K = [fx 0 cx]
[0 fy cy]
[0 0 1]
其中:
fx, fy: 焦距(像素单位)
cx, cy: 主点坐标(光轴与成像平面交点)
fx和fy通常不相等,因为传感器像素不一定是正方形。我遇到过一台工业相机,fx和fy差了0.3%,看似很小,但在大视场下误差会累积。
外参矩阵
外参描述的是相机在世界坐标系中的位置和朝向:
外参 = [R | t]
R: 旋转矩阵(3×3)
t: 平移向量(3×1)
旋转矩阵有3个自由度,可以用欧拉角或四元数表示。我个人习惯用罗德里格斯公式,计算起来更稳定。
小技巧:标定完记得检查重投影误差。如果大于0.5像素,说明标定质量有问题。我一般要求重投影误差在0.1像素以内。
3.4 畸变模型
镜头不是完美的,总会带来畸变。常见的畸变有两种:
径向畸变
光线通过透镜边缘时弯曲更严重,导致图像边缘变形:
- 桶形畸变:图像向外凸出,广角镜头常见
- 枕形畸变:图像向内凹陷,长焦镜头常见
切向畸变
镜头和成像平面不平行导致的变形:
- 表现为图像倾斜或拉伸
- 通常由镜头安装误差引起
畸变模型用多项式来描述:
径向畸变:Δr = k1*r³ + k2*r⁵ + k3*r⁷
切向畸变:Δx = 2*p1*x*y + p2*(r² + 2*x²)
Δy = p1*(r² + 2*y²) + 2*p2*x*y
其中:
k1, k2, k3: 径向畸变系数
p1, p2: 切向畸变系数
r: 像素到主点的距离
嗯,这里要注意——k3通常只在鱼眼镜头中使用。普通镜头用k1和k2就够了,加k3反而会过拟合。
我曾经踩过的坑:标定完发现畸变校正后图像边缘出现奇怪的波浪。排查了半天,原来是标定板只拍了中心区域,边缘畸变没采到。后来我要求标定板必须覆盖视场的四个角和中心,问题就解决了。
3.5 标定流程与知识体系
整个标定流程,我画了张图帮你理清思路:
标定完成后,你会得到一组参数:内参矩阵、外参矩阵、畸变系数。这些参数就是相机在三维世界中的「身份证」。
实用建议:
- 标定板至少拍15-20张不同角度和位置的图片
- 标定后一定要做验证——用标定板测一个已知尺寸,看误差
- 如果换了镜头或调整了光圈,必须重新标定
- 我习惯每次项目开始前都重新标定一次,哪怕相机没动过
标定这件事,看起来简单,做起来全是细节。但只要你把内参、外参、畸变这三个概念吃透了,后面的测量工作就会顺风顺水。
公众号:蓝海资料掘金营,微信deep3321