【Camera】Monocular vs Stereo Calibration
文章目录
- 一、单目标定得到什么?
- ① 内参(Intrinsic)
- ② 畸变参数(Distortion)
- ③ 每张图片的外参(Pose)
- 二、双目标定得到什么?
- 三、最大的区别
- 四、OpenCV 返回值也能看出来
- 五、总结
不完全一样,但双目标定包含单目标定。可以这样理解:
单目标定解决的是"每个相机自己长什么样";双目标定解决的是"两个相机之间是什么关系"。
一、单目标定得到什么?
对于一个相机,标定得到:
① 内参(Intrinsic)
描述相机自身成像特性:
K = [ f x 0 c x 0 f y c y 0 0 1 ] K= \begin{bmatrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1 \end{bmatrix}K=fx000fy0cxcy1
包括:
- 焦距 (f_x,f_y)
- 主点 (c_x,c_y)
以及
② 畸变参数(Distortion)
例如:
- k1、k2、k3(径向畸变)
- p1、p2(切向畸变)
注:OpenCV 实际返回顺序是
(k1, k2, p1, p2, k3),径向与切向是交错排列的,不是"先全部径向、再全部切向"。
③ 每张图片的外参(Pose)
这里很多人容易误解。
单目标定也有外参,但它表示的是:
标定板相对于相机的位置和姿态。
对于每张图片都会得到:
- R
- t
例如:
所以:
单目标定没有一个固定外参。
每拍一张图都会重新算一组。
二、双目标定得到什么?
双目标定首先会分别做:
这和单目标定完全一样。
然后增加一步:
计算
也就是:
左相机到右相机的固定变换。
OpenCV 的方向约定是:把点从左相机坐标系变换到右相机坐标系,即
X r i g h t = R ⋅ X l e f t + T X_{right}=R\cdot X_{left}+TXright=R⋅Xleft+T
例如:
R = 两个相机坐标系之间旋转 T = 两个相机中心之间平移这就是大家常说的
Stereo Extrinsic
三、最大的区别
单目标定的外参:
它随着拍摄变化。
例如:
第1张: Board 在这里 第2张: Board 又换地方了所以:
外参一直变。
双目标定的外参:
这是两个相机安装好的位置关系。
只要相机没拆:
永远一样。例如(理想的"完全平行"安装示意):
Baseline = 60 mm R ≈ 单位矩阵 T = [60 0 0]注意:真实相机装配存在公差,标定出的 R几乎不会是严格的单位矩阵,只会接近单位阵。严格单位阵是理想假设,或者是极线校正(rectification)之后才有的状态——正是靠后续的校正,才把左右两图摆成严格行对齐。
这组参数只要相机不拆就一直不变。
四、OpenCV 返回值也能看出来
calibrateCamera()
返回:
K Dist rvecs tvecs其中
rvecs/tvecs 表示: Board → Camera而且有很多组。
stereoCalibrate()
返回:
K1 Dist1 K2 Dist2 R T E F其中:
E:本质矩阵(Essential),描述标定坐标系下的极线约束F:基础矩阵(Fundamental),描述像素坐标系下的极线约束
这里的
R T表示:
Left Camera ↓ Right Camera只有一组。
五、总结
| 项目 | 单目标定 | 双目标定 |
|---|---|---|
| 左相机内参 | ✅ | ✅ |
| 右相机内参 | ❌(需单独标定) | ✅ |
| 畸变参数 | ✅ | ✅ |
| 标定板→相机外参 | ✅(每张图一组) | ✅(每张图参与联合优化,通常不作主要返回值) |
| 左相机→右相机外参 | ❌ | ✅(固定一组) |
| 是否能做去畸变 | ✅ | ✅ |
| 是否能做双目测距/三角化 | ❌(单帧纯单目无绝对尺度) | ✅ |
一句话概括:
- 单目标定得到的是相机自身参数(内参、畸变)以及每张标定图中标定板相对于相机的姿态(外参,每张都不同)。
- 双目标定不仅得到左右相机各自的内参和畸变,还会估计左右相机之间固定的外参(R、T)。正是这组固定外参,使得双目系统能够进行极线校正、立体匹配和三角测量来恢复三维深度。
