19 视觉基础 · 相机模型与内参标定
返回 00 - 项目总览与学习路线 | 下一节 20 视觉基础 - ArUco 与 ChAruco
为什么学这个(项目关联)
UMI 用超广角相机做观测,内参标定是手眼标定的前置条件。原文在这部分踩了一个非常经典的坑(值得背下来):
“只改变平移距离、棋盘姿态固定不变:重投影 RMS 甚至更低,但轴上焦距剧烈浮动。仅仅依靠低 RMS 会误判标定成功。“
知识点清单
1. 针孔相机模型(pinhole)
- 投影:
uv = K · [R|t] · P;K =[[fx,0,cx],[0,fy,cy],[0,0,1]] - 内参四元组 fx fy cx cy 的几何含义(焦距以像素计、光心)
- 归一化像平面、视场 FOV 与焦距关系(焦距越短视场越大)
2. 畸变模型谱系(本项目的核心选型问题)
| 模型 | OpenCV 接口 | 适用视场 | 备注 |
|---|---|---|---|
| 针孔 + 径向/切向畸变 | calibrateCamera | <~120° | 超广角完全不适用(原文明确) |
| Kannala-Brandt 4 参数 | fisheye 模块 | 最高约 195° | 原文测试:报错/不收敛 |
| Mei 全向 | omnidir 模块 | >180° | 原文最终选择,唯一收敛好 |
| Double Sphere | 第三方/厂商 | 大视场 | 交叉验证用 |
| EUCM (Enhanced Unified) | 第三方 | 大视场 | 交叉验证用 |
- 等距投影 vs 球面投影的直觉;为什么针孔模型在 180°+ 无法表示
- 原文推断路径:fisheye 失败 + omnidir 收敛 → 视场超过 fisheye 上限 → 用 Double Sphere/EUCM 交叉验证 omnidir 结果一致 → 锁定 omnidir
3. ChArUco 棋盘
- 普通棋盘 vs ChArUco:角点 + ArUco 编码混合 → 部分遮挡仍可检测、角点亚像素精度
- 生成:
cv::aruco::CharucoBoard+ 标定程序(见 20 视觉基础 - ArUco 与 ChAruco)
4. 标定流程与评估
- 检测角点 → solvePnP 每帧外参 → 全局优化内参+外参 → 重投影 RMS
- 重投影误差的陷阱(原文精华):
- RMS 低 ≠ 内参对:参数间互相补偿(fx 和 cx 可以联合变形)
- 病态采集(只变距离不变姿态)→ 焦距不定(residual 沿某方向平坦)
- 良好采集 = 充分改变姿态(前后倾、左右倾、滚转)+ 多距离多位置铺满画面
- 可复现性检验:多组独立标定,看 RMS 与焦距的波动范围(不是只看单次 RMS)
- 数据量策略:原文 10 组 × 30 张;最终一次性拟合全部 300 张
- 评估间接量:各次标定输出之间的焦距一致性
5. 贴齐标定(原文的附加技巧)
- 目的:定位光学中心在机械结构中的物理位置(相机系原点在哪儿不知道)
- 方法:UMI 已知平面完全压紧贴在棋盘平面(Z 法向平面),读出光学中心到贴齐面的距离、光轴与法向夹角
- 用途:把标定结果从”相机光学系”转换到”工具系”时必需
学习资源
| 资源 | 用途 |
|---|---|
| OpenCV 官方相机标定教程 + omnidir 模块文档 | 动手 |
| Mei & Rives《Omnidirectional Camera Model》 | omnidir 原理论文 |
| Kannala & Brandt 2006 | 鱼眼通用模型 |
| ”camera calibration degenerate configurations” 检索 | 病态标定深入 |
实践任务
- 💻 手机/网络相机 + 打印棋盘:完成一次标准针孔标定,报告 RMS 与 K
- 💻 复现原文大坑:两组采集——A 组充分变姿态,B 组只变距离;分别标定,对比焦距稳定性(B 组焦距应剧烈浮动)
- 💻 可复现性:同 A 组条件独立标定 10 次,画 fx 直方图
- 💻 (进阶,有广角相机才做)fisheye vs omnidir 拟合同一组图像,对比收敛性与 RMS
- ✍️ 总结自己的”标定检查清单”(姿态覆盖、画面覆盖、多组一致性、最终全量拟合)
掌握标准(自测)
- 能写出投影公式并解释 K 每个参数
- 能说出四种畸变模型适用视场,解释为什么原文选 omnidir
- 能解释”低 RMS 但内参错”的机理与规避方法
- 独立完成带可复现性检验的标定
关联笔记
- 前置数学:11 机器人学基础 - 坐标系与位姿变换
- 标记检测:20 视觉基础 - ArUco 与 ChAruco
- 应用:21 标定系统 - 手眼标定(内参是手眼的前置)
- 原文对应章节:01 - 原文存档 - Dream-UMI 开发手记 “相机内参标定”
实践记录
(学习时在这里追加:日期 / 做了什么 / 踩坑 / 疑问)