返回

张正友标定与参数求解

Zhang Calibration & Estimation
第三章 / 摄像机标定
参数面板

按阶段查看张正友标定的完整求解链:角点对应 → H → K → R,t → 误差验证。

约束数量

当前 3 张图像,共 6 条约束。

3
0
当前视图平均重投影误差为 0.074 px。误差用于评价估计参数能否解释检测角点。
窗口定位辅助操作
用方向键或下方 4 个按钮移动当前窗口;也可以直接点击原图或结果图跳转。
当前像素 (163, 130)1 / 48
方向
概念说明

张正友标定解决什么

多张不同姿态的平面标定板图像可以共同约束相机内参。图源:OpenCV calibration sample
任务

当我们只有普通相机和一张平面标定板时,想同时求出相机的内参和每张拍摄姿态的外参。问题是单张照片只能建立平面到图像的投影关系,无法直接拆分出焦距、主点和姿态。

思路

常用办法是张正友标定:对每张标定板照片,先用角点对应估计单应矩阵 H;再把多张图的 H 合起来,利用旋转矩阵的约束解出内参 K;最后用 K 和每张图的 H 分解出对应的 R 和 t。

观察

切换不同数量的标定照片,观察约束数量和估计精度的变化;点击某个角点,比较检测位置、重投影位置和真实位置之间的偏差,理解 H、K、R/t 的误差是怎样逐层传递的。

把成像模型和角点对应合起来:由点对反求相机参数

成像模型给出sm~=K[R,t]X~w,标定板提供同一批角点的世界坐标和像素坐标。张正友法把这些点对转化为,再求 K 和每张图的教学实现:角点为程序合成并加入微小偏移,这里演示真实的 H→B→K→R,t 线性求解链;畸变与非线性优化暂未包含。

3 张图 / 6 条约束
方向键移动角点 / 下拉菜单切换角点投影点 (163, 130)
1 / 48
用于求解的标定姿态
姿态 1 / 3 张图像 -> 6 条约束 / 当前重投影误差 0.057 px
多张图的单应性约束共同求解参数拖动旋转滚轮缩放
参与求解的姿态图
123
蓝框:成像平面
绿框:视场落在棋盘平面
红点:棋盘世界点
绿点:图像投影点
紫点:检测角点
1. 同一角点的两种坐标

`objectPoints` 是棋盘平面上的Xw=(X,Y,0);`imagePoints` 是同一角点在照片中的像素位置m=(u,v)

M=(0.0, 0.0, 0) ,m=(162.88, 130.36)
刚体变换

对每一张照片,先经过Xc=RXw+t,再由 K 投到像素平面。

平面约束

棋盘点都在Z=0平面上,因此一张标定图可先估计一个

输入变量先对齐:objectPoints 与 imagePoints

这两个名字来自 OpenCV 接口,本质上就是同一批棋盘角点在两个坐标系下的记录。

棋盘世界坐标
Xw=(X,Y,0)
由棋盘行列编号和格子尺寸直接确定。
图像像素坐标
m=(u,v,1)
角点由合成投影加微小偏移得到。
当前角点的坐标对
世界角点 M=(0.0, 0.0, 0)
检测角点 m=(162.88, 130.36)
重投影点 m^=(162.91, 130.41)