news 2026/7/4 3:46:38

【Camera】Monocular vs Stereo Calibration

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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

例如:

R,t(第1组)

R,t(第2组)

R,t(第3组)

标定板 第1张

相机

标定板 第2张

标定板 第3张

所以:

单目标定没有一个固定外参。

每拍一张图都会重新算一组。


二、双目标定得到什么?

双目标定首先会分别做:

左相机

K_left / Dist_left

右相机

K_right / Dist_right

这和单目标定完全一样。

然后增加一步:

计算

R, T(固定外参)

左相机 Left

右相机 Right

也就是:

左相机到右相机的固定变换。

OpenCV 的方向约定是:把点从左相机坐标系变换到右相机坐标系,即

X r i g h t = R ⋅ X l e f t + T X_{right}=R\cdot X_{left}+TXright=RXleft+T

例如:

R = 两个相机坐标系之间旋转 T = 两个相机中心之间平移

这就是大家常说的

Stereo Extrinsic


三、最大的区别

单目标定的外参:

外参随每张图而变

标定板 Board

相机 Camera

它随着拍摄变化。

例如:

第1张: Board 在这里 第2张: Board 又换地方了

所以:

外参一直变。


双目标定的外参:

外参固定不变

左相机 Left

右相机 Right

这是两个相机安装好的位置关系。

只要相机没拆:

永远一样。

例如(理想的"完全平行"安装示意):

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)。正是这组固定外参,使得双目系统能够进行极线校正、立体匹配和三角测量来恢复三维深度。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 3:45:34

小程序开发技术栈全面对比:uni-app vs Taro vs 原生开发深度解析

前言 2026年,小程序已经成为企业数字化转型的标配入口。然而,在实际开发中,很多团队都会面临一个灵魂拷问:到底该选什么技术栈? 原生开发性能最好,但维护多端成本高跨端框架能复用代码,但性能和…

作者头像 李华
网站建设 2026/7/4 3:43:48

前端学习致命误区

** 90%前端新手都会踩的致命学习误区|为什么你学完不会写项目? 一、前言 在自学前端的这段时间里,我走过无数弯路:视频看了几十套、笔记记了几万字、知识点学了一大堆,但是真正上手写项目的时候依旧寸步难行。 相信绝大…

作者头像 李华
网站建设 2026/7/4 3:42:55

Python dict实现:增删改查一把梭,不会用等于白学

1.dict的增删改查及初始化1.1 dict的初始化1.dict() 构造函数可以直接从键值对序列里创建字典>>> dict((sape, 含有不明确含义的4139), (guido, 有着特定意义的4127), (jack, 代表这个数值的4098)。以sape为键的值是4139, 以guido为键的值是4127, 以jack为键的值是409…

作者头像 李华
网站建设 2026/7/4 3:40:19

ClaudeAPI 医疗场景落地指南:适用边界、提示词与审核流程

医疗行业引入大模型,难点其实不只是“它能不能回答医学问题”。更关键的是:哪些工作可以让 AI 帮忙,哪些内容必须由人来复核,以及怎样防止模型一本正经地“编”出内容,最后流入真实临床流程。如果团队打算基于 Claude …

作者头像 李华
网站建设 2026/7/4 3:39:51

7B 还是 14B,Strix Halo 上大模型参数量选择实测

告别显存焦虑:Strix Halo 上的大模型参数量实测 最近拿到一台搭载 AMD Strix Halo 架构的工程机,第一反应不是去跑 3A 大作,而是迫不及待地想看看它在本地大模型推理上的表现。以前在普通轻薄本上跑 LLM,总是要在“显存爆掉”和“…

作者头像 李华
网站建设 2026/7/4 3:37:45

电子合同选型7大盲区,企业必看避坑指南

前言:一个被低估的决策风险 某中型制造企业为压缩行政成本,选择了一家报价低廉的小型电子合同服务商,完成了数百份员工劳动合同的签署。一年后,该平台因经营不善停止服务,企业无法导出任何已签署的合同数据&#xff0c…

作者头像 李华