标定基础:什么是标定?内参、外参、畸变参数的基本概念
大家好,我是你们的嵌入式工程师老友。今天咱们聊聊标定这件事。
说实话,我刚入行那会儿,觉得标定就是个「玄学」。明明传感器买回来就能用,为什么还要多此一举?直到我在一个机器人项目中,摄像头看到的障碍物位置和激光雷达测到的差了十几厘米,差点撞上实验台……嗯,从那以后,我再也不敢小看标定了。
一、标定到底是什么?
标定,说白了就是给传感器「量体裁衣」。每个传感器出厂时都有个体差异,就像同一批手机摄像头,拍出来的颜色可能都不一样。标定就是找到这些差异,然后补偿掉。
我习惯把标定理解成三个步骤:
- 建模:用数学公式描述传感器怎么把物理世界变成数据
- 测量:用已知的参照物去实际测试
- 求解:反推出公式里的那些未知参数
举个例子,你买了个激光雷达,它告诉你前方5米有个物体。但实际测量发现是4.85米。这0.15米的偏差,就是标定要解决的问题。
核心观点:标定不是「修」传感器,而是「认识」传感器。你知道了它的脾气,才能用好它。
二、内参:传感器自己的「性格」
内参,就是传感器内部固有的参数。拿摄像头来说,内参包括:
- 焦距(fx, fy):镜头把光线汇聚到什么位置
- 主点(cx, cy):光轴和成像平面的交点,理论上应该在图像正中心,但实际总有偏移
- 像素尺寸:每个像素在感光元件上的物理大小
我记得有一次调试双目摄像头,左右图像怎么都对不齐。折腾了两天,最后发现是主点坐标差了3个像素。标定完内参,问题立刻解决。
我的经验:内参标定最好在传感器出厂后做一次,然后每隔半年或温度变化大的时候重新标定。温度会影响镜头和感光元件的形变,内参会漂移。
三、外参:传感器之间的「关系」
外参描述的是传感器在空间中的位置和朝向。比如你的机器人上装了摄像头和激光雷达,它们之间的相对位置就是外参。
外参包含两部分:
- 旋转矩阵(R):一个传感器坐标系相对于另一个的旋转关系
- 平移向量(t):两个传感器原点之间的位移
你想想看,如果外参不准,摄像头看到左边有障碍物,激光雷达却认为在右边。融合出来的数据就是矛盾的。
避坑指南:我曾经在AGV小车上犯过这个错——外参标定完没锁紧螺丝。车子跑了几圈后,摄像头被震歪了,外参全废。所以标定完一定要做机械固定,最好加防松胶。
四、畸变参数:镜头的「近视眼」
镜头不是完美的。尤其是广角镜头,拍出来的直线会变弯。这就是畸变。
畸变主要分两种:
| 畸变类型 | 表现 | 常见场景 |
|---|---|---|
| 径向畸变 | 直线向外或向内弯曲 | 鱼眼镜头、广角镜头 |
| 切向畸变 | 图像像被拉伸或压缩 | 镜头安装倾斜、模组装配误差 |
畸变参数通常用 k1, k2, k3(径向)和 p1, p2(切向)来表示。标定的时候,我们拍一张棋盘格照片,然后计算这些参数,把弯曲的直线「拉直」。
我刚开始做视觉SLAM时,没做畸变校正,结果特征点匹配全是错的。后来发现,图像边缘的畸变能达到十几个像素。校正之后,匹配准确率从60%直接跳到95%。
一句话总结:内参是传感器的「基因」,外参是传感器之间的「社交关系」,畸变参数是镜头的「视力矫正」。三者缺一不可。
五、知识体系框架
下面这张图,是我自己梳理的标定知识结构。你看一眼就能明白它们之间的关系:
六、标定的实际流程
说了这么多理论,咱们看看实际怎么做。以摄像头标定为例,流程大致如下:
- 准备标定板:打印一张棋盘格或圆点阵列,贴在平整的硬板上
- 采集图像:从不同角度拍摄15-20张照片,覆盖视野的各个区域
- 提取角点:用算法找到棋盘格上的角点坐标
- 求解参数:用最小二乘法或优化算法,解出内参、外参和畸变参数
- 验证结果:用标定后的参数去校正一张新图像,看看直线是不是真的变直了
小技巧:采集图像时,尽量让标定板在图像边缘和角落多出现几次。因为畸变在边缘最明显,数据越多,标定越准。
嗯,标定这件事,说难不难,说简单也不简单。关键是要理解每个参数背后的物理意义。你搞懂了内参、外参、畸变参数,后面做传感器融合就会顺手很多。
好了,今天就聊到这儿。下次咱们拿实际数据跑一遍标定流程,看看代码怎么写。
公众号:蓝海资料掘金营,微信deep3321