1. 视觉标定概述:什么是相机标定、为什么需要标定、标定的核心目标与物理意义

大家好,我是老张。做机器视觉这行十几年了,每次带新人,第一个要讲透的就是标定。很多人觉得标定就是拍几张棋盘格照片,跑个算子就完事了。其实不然。今天咱们就把标定这件事,从根上捋清楚。

1.1 什么是相机标定?

说白了,相机标定就是给相机“量尺寸、纠偏差”。

你想想看,相机镜头不是完美的。它会把直线拍成曲线,把正方形拍成梯形,还会把真实世界的三维坐标压缩成二维像素坐标。标定要做的,就是找到这些畸变和映射关系的数学参数。

我习惯把标定分成三个层面:

  • 内参标定:焦距、主点、畸变系数——相机自己的“性格”
  • 外参标定:相机在世界坐标系里的位置和朝向——它“站在哪、看哪”
  • 手眼标定:相机和机器人手臂的坐标关系——它“和谁配合”

咱们这门课主要聚焦在前两个,也就是单目相机的内参和外参标定。手眼标定后面有专门章节讲。

核心定义:相机标定是通过已知几何特征(如棋盘格角点)的图像,求解相机成像模型参数的过程。这些参数包括内参矩阵、畸变系数和外参矩阵。

1.2 为什么需要标定?

这个问题我经常被问到。有人觉得:“我买的工业相机出厂不是调好了吗?”

嗯,这里要注意:出厂参数是理论值,不是实际值。而且镜头一拧、光圈一调,参数就变了。

我举几个真实场景:

  • 测量场景:你要测一个零件长50mm,不标定的话,像素当量算不准,测出来可能是49.2mm或者50.8mm。我曾经有个项目,客户投诉说我们的系统测距总是偏大0.3mm,查到最后就是标定板放歪了0.5度。
  • 定位场景:机器人要抓取传送带上的工件。相机告诉机器人“工件在像素坐标(500, 300)”,但机器人需要知道“它在世界坐标的什么位置”。没有标定,这两个坐标系之间就是断的。
  • 畸变校正:广角镜头边缘的桶形畸变,能把一条直线拍成弯的。不校正,边缘区域的检测精度直接崩掉。

避坑提醒:我曾经在一个3C电子厂的项目里,因为赶工期,用出厂焦距参数直接做测量,结果产品尺寸一致性差,被客户退货。从那以后,我定了个规矩:每次换镜头、调光圈、变工作距离,必须重新标定。没有例外。

1.3 标定的核心目标

标定的目标,用一句话概括:建立从像素到物理世界的精确映射。

具体拆开来看,有四个子目标:

目标 说明 对应参数
消除畸变 校正镜头带来的径向和切向畸变 k1, k2, k3, p1, p2
确定内参 获取焦距、主点坐标、像素尺寸 fx, fy, cx, cy
确定外参 获取相机相对于世界坐标系的位姿 R, t (旋转矩阵和平移向量)
建立映射 实现像素坐标 ↔ 物理坐标的转换 单应性矩阵或投影矩阵

1.4 物理意义——标定到底在算什么?

咱们不推公式,只说物理意义。

相机成像,本质上是一个降维打击:三维世界投影到二维平面。这个过程中,信息丢失了(深度没了),形状扭曲了(透视效应),还加上了镜头畸变。

标定要做的,就是把这个过程的逆过程算出来:

  • 内参矩阵:告诉你像素坐标系和相机坐标系之间怎么换算。比如,一个像素在传感器上对应多少毫米。
  • 畸变系数:告诉你图像边缘被“拉”歪了多少,怎么把它“拉”回来。
  • 外参矩阵:告诉你相机坐标系和世界坐标系之间怎么旋转和平移。

我打个比方:标定就像给相机做一次“视力检查+配眼镜”。内参是眼镜的度数,畸变系数是散光矫正,外参是你戴眼镜的角度和位置。三者合起来,才能让相机“看清”真实世界。

个人经验:我习惯在标定完成后,先做一步验证——用标定结果反投影几个已知点,看重投影误差。如果误差超过0.1像素,我会重新采集标定图像。这个习惯帮我避免了很多“标定完了但实际用不了”的尴尬。

1.5 标定的知识体系

下面这张图,是我自己总结的标定知识框架。每次培训新人,我都会先让他们看这张图,建立全局观。

相机标定知识体系框架图 相机标定知识体系 标定核心目标 内参标定 外参标定 畸变校正 内参矩阵 焦距 fx, fy 主点 cx, cy 外参矩阵 旋转矩阵 R 平移向量 t 畸变参数 径向畸变 k1,k2,k3 切向畸变 p1,p2 标定板(棋盘格/圆点) HALCON 标定算子 重投影误差验证 标定质量 = 内参精度 × 外参精度 × 畸变校正精度

这张图把标定的知识体系分成了四个层次:目标层、模块层、参数层和工具层。你从上往下看,就能理解标定到底在做什么。

1.6 标定在HALCON中的位置

在HALCON里,标定不是一个孤立的步骤,而是整个视觉系统的基石。我列一下常用算子,你就知道标定贯穿了哪些环节:

阶段 HALCON算子 作用
标定板生成 gen_caltab 生成标定板描述文件
标定板识别 find_caltab, find_marks_and_pose 在图像中定位标定板并提取角点
标定计算 camera_calibration 求解内参、外参和畸变系数
畸变校正 change_radial_distortion_cam_par 生成无畸变图像
测量应用 image_to_world_plane 将像素坐标映射到物理平面

这些算子的具体用法,咱们后面章节会一个一个拆解。今天先把概念打牢。

我的习惯:每次开始一个新项目,我会先花15分钟做一次快速标定验证——哪怕只是拍一张标定板照片,跑一遍camera_calibration,看看重投影误差。如果误差大于0.3像素,我会检查光照、标定板平整度或者镜头是否松动。这个习惯帮我省了无数后期排查的时间。

好了,标定的概念就讲到这里。记住一句话:标定不是一次性的工作,而是贯穿整个视觉系统生命周期的基本功。后面我们会一步步深入,从标定板的选择、图像采集,到HALCON算子的具体参数配置,再到实际项目中的坑和技巧。